diff --git a/create/templates/create_instance_w2.html b/create/templates/create_instance_w2.html
index 1e73feb..09a9484 100644
--- a/create/templates/create_instance_w2.html
+++ b/create/templates/create_instance_w2.html
@@ -250,12 +250,14 @@
                                                                         <input type="checkbox" name="qemu_ga" value="true" checked>
                                                                     </div>
                                                                 </div>
+                                                                {% if virtio_support %}
                                                                 <div class="form-group">
                                                                     <label class="col-sm-3 control-label">{% trans "VirtIO" %}</label>
                                                                     <div class="col-sm-6">
-                                                                        <input type="checkbox" name="virtio" value="true" checked>
+                                                                        <input type="checkbox" name="virtio" value="{{ virtio_support }}" checked>
                                                                     </div>
                                                                 </div>
+                                                                {% endif %}
                                                         </div>
                                                         <div class="modal-footer">
                                                             <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button>
@@ -468,12 +470,14 @@
                             <input type="checkbox" name="qemu_ga" value="true" checked>
                         </div>
                     </div>
+                    {% if virtio_support %}
                     <div class="form-group">
                         <label class="col-sm-3 control-label">{% trans "VirtIO" %}</label>
-                        <div class="col-sm-7">
-                            <input type="checkbox" name="virtio" value="true" checked>
+                        <div class="col-sm-6">
+                            <input type="checkbox" name="virtio" value="{{ virtio_support }}" checked>
                         </div>
                     </div>
+                    {% endif %}
                     <div class="form-group">
                     <div class="col-sm-7 col-sm-offset-3">
                     {% if storages %}
@@ -668,12 +672,14 @@
                                 <input type="checkbox" name="qemu_ga" value="true" checked>
                             </div>
                         </div>
+                        {% if virtio_support %}
                         <div class="form-group">
                             <label class="col-sm-3 control-label">{% trans "VirtIO" %}</label>
-                            <div class="col-sm-7">
-                                <input type="checkbox" name="virtio" value="true" checked>
+                            <div class="col-sm-6">
+                                <input type="checkbox" name="virtio" value="{{ virtio_support }}" checked>
                             </div>
                         </div>
+                        {% endif %}
                         <div class="form-group">
                             <div class="col-sm-7 col-sm-offset-3">
                             {% if storages %}
diff --git a/create/views.py b/create/views.py
index f0c8633..4aa5c39 100644
--- a/create/views.py
+++ b/create/views.py
@@ -111,6 +111,7 @@ def create_instance(request, compute_id, arch, machine):
         dom_caps = conn.get_dom_capabilities(arch, machine)
         caps = conn.get_capabilities(arch)
 
+        virtio_support = conn.is_supports_virtio(arch, machine)
         hv_supports_uefi = conn.supports_uefi_xml(dom_caps["loader_enums"])
         # Add BIOS
         label = conn.label_for_firmware_path(arch, None)
@@ -149,6 +150,7 @@ def create_instance(request, compute_id, arch, machine):
                 delete_flavor.delete()
                 return HttpResponseRedirect(request.get_full_path())
             if 'create' in request.POST:
+                firmware = dict()
                 volume_list = list()
                 is_disk_created = False
                 clone_path = ""
@@ -176,7 +178,8 @@ def create_instance(request, compute_id, arch, machine):
                                     volume['path'] = path
                                     volume['type'] = conn.get_volume_type(path)
                                     volume['device'] = 'disk'
-                                    volume['bus'] = INSTANCE_VOLUME_DEFAULT_BUS
+                                    if data['virtio']:
+                                        volume['bus'] = INSTANCE_VOLUME_DEFAULT_BUS
                                     volume_list.append(volume)
                                     is_disk_created = True
                                 except libvirtError as lib_err:
@@ -193,7 +196,8 @@ def create_instance(request, compute_id, arch, machine):
                                 volume['path'] = clone_path
                                 volume['type'] = conn.get_volume_type(clone_path)
                                 volume['device'] = 'disk'
-                                volume['bus'] = INSTANCE_VOLUME_DEFAULT_BUS
+                                if data['virtio']:
+                                    volume['bus'] = INSTANCE_VOLUME_DEFAULT_BUS
                                 volume_list.append(volume)
                                 is_disk_created = True
                         else:
@@ -215,12 +219,23 @@ def create_instance(request, compute_id, arch, machine):
                         if data['cache_mode'] not in conn.get_cache_modes():
                             error_msg = _("Invalid cache mode")
                             error_messages.append(error_msg)
+                        if 'UEFI' in data["firmware"]:
+                            firmware["loader"] = data["firmware"].split(":")[1].strip()
+                            firmware["secure"] = 'no'
+                            firmware["readonly"] = 'yes'
+                            firmware["type"] = 'pflash'
+                            if 'secboot' in firmware["loader"] and machine != 'q35':
+                                messages.warning(request, "Changing machine type from '%s' to 'q35' "
+                                                          "which is required for UEFI secure boot." % machine)
+                                machine = 'q35'
+                                firmware["secure"] = 'yes'
+
                         if not error_messages:
                             uuid = util.randomUUID()
                             try:
                                 conn.create_instance(name=data['name'], memory=data['memory'], vcpu=data['vcpu'],
                                                      vcpu_mode=data['vcpu_mode'], uuid=uuid, arch=arch, machine=machine,
-                                                     firmware=data["firmware"],
+                                                     firmware=firmware,
                                                      images=volume_list, cache_mode=data['cache_mode'],
                                                      networks=data['networks'], virtio=data['virtio'],
                                                      listen_addr=data["listener_addr"], nwfilter=data["nwfilter"],
diff --git a/instances/views.py b/instances/views.py
index 368f3e4..100a17a 100644
--- a/instances/views.py
+++ b/instances/views.py
@@ -236,14 +236,19 @@ def instance(request, compute_id, vname):
             return
         if new_compute == instance.compute:
             return
-        conn_migrate = wvmInstances(new_compute.hostname,
+        try:
+            conn_migrate = wvmInstances(new_compute.hostname,
                                     new_compute.login,
                                     new_compute.password,
                                     new_compute.type)
-        conn_migrate.moveto(conn, instance.name, live, unsafe, xml_del, offline)
+
+            conn_migrate.moveto(conn, instance.name, live, unsafe, xml_del, offline)
+        finally:
+            conn_migrate.close()
+
         instance.compute = new_compute
         instance.save()
-        conn_migrate.close()
+
         conn_new = wvmInstance(new_compute.hostname,
                                new_compute.login,
                                new_compute.password,
@@ -267,6 +272,8 @@ def instance(request, compute_id, vname):
         boot_order = conn.get_bootorder()
         arch = conn.get_arch()
         machine = conn.get_machine_type()
+        firmware = conn.get_loader()
+        nvram = conn.get_nvram()
         vcpu = conn.get_vcpu()
         cur_vcpu = conn.get_cur_vcpu()
         vcpus = conn.get_vcpus()
@@ -290,7 +297,6 @@ def instance(request, compute_id, vname):
             insort(memory_range, memory)
         if cur_memory not in memory_range:
             insort(memory_range, cur_memory)
-        nvram = conn.get_nvram()
         telnet_port = conn.get_telnet_port()
         console_type = conn.get_console_type()
         console_port = conn.get_console_port()
@@ -949,16 +955,17 @@ def instance(request, compute_id, vname):
                         error_messages.append(msg)
                     else:
                         new_instance = Instance(compute_id=compute_id, name=clone_data['name'])
-                        new_instance.save()
+                        #new_instance.save()
                         try:
                             new_uuid = conn.clone_instance(clone_data)
                             new_instance.uuid = new_uuid
                             new_instance.save()
                         except Exception as e:
-                            new_instance.delete()
+                            #new_instance.delete()
                             raise e
-                        userinstance = UserInstance(instance_id=new_instance.id, user_id=request.user.id, is_delete=True)
-                        userinstance.save()
+
+                        user_instance = UserInstance(instance_id=new_instance.id, user_id=request.user.id, is_delete=True)
+                        user_instance.save()
 
                         msg = _("Clone of '%s'" % instance.name)
                         addlogmsg(request.user.username, new_instance.name, msg)
diff --git a/vrtManager/create.py b/vrtManager/create.py
index d11e2eb..a889d69 100644
--- a/vrtManager/create.py
+++ b/vrtManager/create.py
@@ -189,8 +189,16 @@ class wvmCreate(wvmConnect):
             xml += """    <boot dev='hd'/>
                           <boot dev='cdrom'/>
                           <bootmenu enable='yes'/>"""
-            if 'UEFI' in firmware:
-                xml += """<loader readonly='yes' type='pflash'>%s</loader>""" % firmware.split(":")[1].strip()
+            if firmware:
+                if firmware["secure"] == 'yes':
+                    xml += """<loader readonly='%s' type='%s' secure='%s'>%s</loader>""" % (firmware["readonly"],
+                                                                                            firmware["type"],
+                                                                                            firmware["secure"],
+                                                                                            firmware["loader"])
+                if firmware["secure"] == 'no':
+                    xml += """<loader readonly='%s' type='%s'>%s</loader>""" % (firmware["readonly"],
+                                                                                firmware["type"],
+                                                                                firmware["loader"])
             xml += """</os>"""
 
         if caps["features"]:
@@ -201,6 +209,8 @@ class wvmCreate(wvmConnect):
                 xml += """<apic/>"""
             if 'pae' in caps["features"]:
                 xml += """<pae/>"""
+            if 'yes' == firmware["secure"]:
+                xml += """<smm state="on"/>"""
             xml += """</features>"""
 
         if vcpu_mode == "host-model":
@@ -211,8 +221,8 @@ class wvmCreate(wvmConnect):
             pass
         else:
             xml += """<cpu mode='custom' match='exact' check='none'>
-                        <model fallback='allow'>{}</model>
-                      </cpu>""".format(vcpu_mode)
+                        <model fallback='allow'>%s</model>""" % vcpu_mode
+            xml += """</cpu>"""
 
         xml += """
                   <clock offset="utc"/>
@@ -255,14 +265,16 @@ class wvmCreate(wvmConnect):
                 xml += """ <driver name='qemu' type='%s' cache='%s' %s/>""" % (volume['type'], cache_mode, OPTS.get("file", ''))
                 xml += """ <source file='%s'/>""" % volume['path']
 
-            if volume['bus'] == 'virtio':
-                xml += """<target dev='vd%s' bus='%s'/>""" % (vd_disk_letters.pop(0), volume['bus'])
-            elif volume['bus'] == 'ide':
-                xml += """<target dev='hd%s' bus='%s'/>""" % (hd_disk_letters.pop(0), volume['bus'])
-            elif volume['bus'] == 'fdc':
-                xml += """<target dev='fd%s' bus='%s'/>""" % (fd_disk_letters.pop(0), volume['bus'])
+            if volume.get('bus') == 'virtio':
+                xml += """<target dev='vd%s' bus='%s'/>""" % (vd_disk_letters.pop(0), volume.get('bus'))
+            elif volume.get('bus') == 'ide':
+                xml += """<target dev='hd%s' bus='%s'/>""" % (hd_disk_letters.pop(0), volume.get('bus'))
+            elif volume.get('bus') == 'fdc':
+                xml += """<target dev='fd%s' bus='%s'/>""" % (fd_disk_letters.pop(0), volume.get('bus'))
+            elif volume.get('bus') == 'sata' or volume.get('bus') == 'scsi':
+                xml += """<target dev='sd%s' bus='%s'/>""" % (sd_disk_letters.pop(0), volume.get('bus'))
             else:
-                xml += """<target dev='sd%s' bus='%s'/>""" % (sd_disk_letters.pop(0), volume['bus'])
+                xml += """<target dev='sd%s'/>""" % sd_disk_letters.pop(0)
             xml += """</disk>"""
         if add_cd:
             xml += """<disk type='file' device='cdrom'>
@@ -279,7 +291,7 @@ class wvmCreate(wvmConnect):
                 xml += """<target dev='vd%s' bus='%s'/>""" % (vd_disk_letters.pop(0), 'virtio')
             xml += """</disk>"""
 
-        if volume['bus'] == 'scsi':
+        if volume.get('bus') == 'scsi':
             xml += """<controller type='scsi' model='%s'/>""" % INSTANCE_VOLUME_DEFAULT_SCSI_CONTROLLER
 
         for net in networks.split(','):
@@ -299,13 +311,15 @@ class wvmCreate(wvmConnect):
             if not console_pass == "":
                 console_pass = "passwd='" + console_pass + "'"
 
-        xml += """<input type='mouse' bus='virtio'/>"""
-        xml += """<input type='tablet' bus='virtio'/>"""
+        if 'usb' in dom_caps['disk_bus']:
+            xml += """<input type='mouse' bus='{}'/>""".format('virtio' if virtio else 'usb')
+            xml += """<input type='tablet' bus='{}'/>""".format('virtio' if virtio else 'usb')
+
         xml += """
                 <graphics type='%s' port='-1' autoport='yes' %s listen='%s'/>
                 <console type='pty'/> """ % (graphics, console_pass, listen_addr)
 
-        if qemu_ga:
+        if qemu_ga and virtio:
             xml += """ <channel type='unix'>
                             <target type='virtio' name='org.qemu.guest_agent.0'/>
                        </channel>"""