diff --git a/datacenterlight/admin.py b/datacenterlight/admin.py
index d95e4f87..5a1fc8a2 100644
--- a/datacenterlight/admin.py
+++ b/datacenterlight/admin.py
@@ -2,7 +2,7 @@ from django.contrib import admin
 from cms.admin.placeholderadmin import PlaceholderAdminMixin
 from cms.extensions import PageExtensionAdmin
 from .cms_models import CMSIntegration, CMSFaviconExtension
-from .models import VMPricing
+from .models import VMPricing, VMTemplate
 
 
 class CMSIntegrationAdmin(PlaceholderAdminMixin, admin.ModelAdmin):
@@ -16,3 +16,4 @@ class CMSFaviconExtensionAdmin(PageExtensionAdmin):
 admin.site.register(CMSIntegration, CMSIntegrationAdmin)
 admin.site.register(CMSFaviconExtension, CMSFaviconExtensionAdmin)
 admin.site.register(VMPricing)
+admin.site.register(VMTemplate)
diff --git a/datacenterlight/cms_models.py b/datacenterlight/cms_models.py
index 5a8d7ac8..e1703aaa 100644
--- a/datacenterlight/cms_models.py
+++ b/datacenterlight/cms_models.py
@@ -9,7 +9,7 @@ from djangocms_text_ckeditor.fields import HTMLField
 from filer.fields.file import FilerFileField
 from filer.fields.image import FilerImageField
 
-from datacenterlight.models import VMPricing
+from datacenterlight.models import VMPricing, VMTemplate
 
 
 class CMSIntegration(models.Model):
@@ -299,3 +299,7 @@ class DCLCalculatorPluginModel(CMSPlugin):
         help_text='Choose a pricing that will be associated with this '
                   'Calculator'
     )
+    vm_type = models.CharField(
+        max_length=50, choices=VMTemplate.VM_TYPE_CHOICES,
+        default=VMTemplate.PUBLIC
+    )
diff --git a/datacenterlight/cms_plugins.py b/datacenterlight/cms_plugins.py
index 12de0daf..769824e0 100644
--- a/datacenterlight/cms_plugins.py
+++ b/datacenterlight/cms_plugins.py
@@ -88,7 +88,9 @@ class DCLCalculatorPlugin(CMSPluginBase):
         context = super(DCLCalculatorPlugin, self).render(
             context, instance, placeholder
         )
-        context['templates'] = VMTemplate.objects.all()
+        context['templates'] = VMTemplate.objects.filter(
+            vm_type=instance.vm_type
+        )
         return context
 
 
diff --git a/datacenterlight/management/commands/fetchvmtemplates.py b/datacenterlight/management/commands/fetchvmtemplates.py
index 6a45ebad..89271dc4 100644
--- a/datacenterlight/management/commands/fetchvmtemplates.py
+++ b/datacenterlight/management/commands/fetchvmtemplates.py
@@ -10,16 +10,28 @@ class Command(BaseCommand):
     help = '''Fetches the VM templates from OpenNebula and populates the dcl
             VMTemplate model'''
 
+    def get_templates(self, manager, prefix):
+        templates = manager.get_templates('%s-' % prefix)
+        dcl_vm_templates = []
+        for template in templates:
+            template_name = template.name.lstrip('%s-' % prefix)
+            template_id = template.id
+            dcl_vm_template = VMTemplate.create(
+                template_name, template_id, prefix
+            )
+            dcl_vm_templates.append(dcl_vm_template)
+        return dcl_vm_templates
+
     def handle(self, *args, **options):
         try:
             manager = OpenNebulaManager()
-            templates = manager.get_templates()
             dcl_vm_templates = []
-            for template in templates:
-                template_name = template.name.lstrip('public-')
-                template_id = template.id
-                dcl_vm_template = VMTemplate.create(template_name, template_id)
-                dcl_vm_templates.append(dcl_vm_template)
+            dcl_vm_templates.extend(
+                self.get_templates(manager, VMTemplate.PUBLIC)
+            )
+            dcl_vm_templates.extend(
+                self.get_templates(manager, VMTemplate.IPV6)
+            )
 
             old_vm_templates = VMTemplate.objects.all()
             old_vm_templates.delete()
diff --git a/datacenterlight/migrations/0023_auto_20180524_0349.py b/datacenterlight/migrations/0023_auto_20180524_0349.py
new file mode 100644
index 00000000..f37d6634
--- /dev/null
+++ b/datacenterlight/migrations/0023_auto_20180524_0349.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.4 on 2018-05-23 22:19
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('datacenterlight', '0022_auto_20180506_1950'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='dclcalculatorpluginmodel',
+            name='vm_type',
+            field=models.CharField(choices=[('public', 'Public'), ('ipv6only', 'Ipv6Only')], default='public', max_length=50),
+        ),
+        migrations.AddField(
+            model_name='vmtemplate',
+            name='vm_type',
+            field=models.CharField(choices=[('public', 'Public'), ('ipv6only', 'Ipv6Only')], default='public', max_length=50),
+        ),
+    ]
diff --git a/datacenterlight/models.py b/datacenterlight/models.py
index ff7eeb8d..729bbdf9 100644
--- a/datacenterlight/models.py
+++ b/datacenterlight/models.py
@@ -6,13 +6,29 @@ logger = logging.getLogger(__name__)
 
 
 class VMTemplate(models.Model):
+    PUBLIC = 'public'
+    IPV6 = 'ipv6only'
+    VM_TYPE_CHOICES = (
+        (PUBLIC, PUBLIC.title()),
+        (IPV6, IPV6.title()),
+    )
     name = models.CharField(max_length=50)
     opennebula_vm_template_id = models.IntegerField()
+    vm_type = models.CharField(
+        max_length=50, choices=VM_TYPE_CHOICES, default=PUBLIC
+    )
+
+    def __str__(self):
+        return '%s - %s - %s' % (
+            self.opennebula_vm_template_id, self.vm_type, self.name
+        )
 
     @classmethod
-    def create(cls, name, opennebula_vm_template_id):
+    def create(cls, name, opennebula_vm_template_id, vm_type):
         vm_template = cls(
-            name=name, opennebula_vm_template_id=opennebula_vm_template_id)
+            name=name, opennebula_vm_template_id=opennebula_vm_template_id,
+            vm_type=vm_type
+        )
         return vm_template
 
 
diff --git a/opennebula_api/models.py b/opennebula_api/models.py
index d9b0b6c2..35f3d8e8 100644
--- a/opennebula_api/models.py
+++ b/opennebula_api/models.py
@@ -61,7 +61,7 @@ class OpenNebulaManager():
                 domain=settings.OPENNEBULA_DOMAIN,
                 port=settings.OPENNEBULA_PORT,
                 endpoint=settings.OPENNEBULA_ENDPOINT
-            ))
+        ))
 
     def _get_opennebula_client(self, username, password):
         return oca.Client("{0}:{1}".format(
@@ -73,7 +73,7 @@ class OpenNebulaManager():
                 domain=settings.OPENNEBULA_DOMAIN,
                 port=settings.OPENNEBULA_PORT,
                 endpoint=settings.OPENNEBULA_ENDPOINT
-            ))
+        ))
 
     def _get_user(self, user):
         """Get the corresponding opennebula user for a CustomUser object
@@ -362,12 +362,12 @@ class OpenNebulaManager():
         except:
             raise ConnectionRefusedError
 
-    def get_templates(self):
+    def get_templates(self, prefix='public-'):
         try:
             public_templates = [
                 template
                 for template in self._get_template_pool()
-                if template.name.startswith('public-')
+                if template.name.startswith(prefix)
             ]
             return public_templates
         except ConnectionRefusedError:
@@ -439,7 +439,7 @@ class OpenNebulaManager():
 
     def delete_template(self, template_id):
         self.oneadmin_client.call(oca.VmTemplate.METHODS[
-                                      'delete'], template_id, False)
+            'delete'], template_id, False)
 
     def change_user_password(self, passwd_hash):
         self.oneadmin_client.call(