diff --git a/circle/vm/models.py b/circle/vm/models.py
index 8fcb34a..869caa0 100644
--- a/circle/vm/models.py
+++ b/circle/vm/models.py
@@ -347,24 +347,17 @@ class Instance(VirtualMachineDescModel, TimeStampedModel):
         Can also specify parameters as keyword arguments which should override
         template settings.
         """
-        if disks is None:
-            disks = template.disks.all()
+        disks = template.disks.all() if disks is None else disks
 
         # prepare parameters
         kwargs['template'] = template
         kwargs['owner'] = owner
-        kwargs.setdefault('name', template.name)
-        kwargs.setdefault('description', template.description)
         kwargs.setdefault('pw', pwgen())
-        kwargs.setdefault('num_cores', template.num_cores)
-        kwargs.setdefault('ram_size', template.ram_size)
-        kwargs.setdefault('max_ram_size', template.max_ram_size)
-        kwargs.setdefault('arch', template.arch)
-        kwargs.setdefault('priority', template.priority)
-        kwargs.setdefault('boot_menu', template.boot_menu)
-        kwargs.setdefault('raw_data', template.raw_data)
-        kwargs.setdefault('lease', template.lease)
-        kwargs.setdefault('access_method', template.access_method)
+        ca = ['name', 'description', 'num_cores', 'ram_size', 'max_ram_size',
+              'arch', 'priority', 'boot_menu', 'raw_data', 'lease',
+              'access_method']
+        for attr in ca:
+            kwargs.setdefault(attr, getattr(template, attr))
         # create instance and do additional setup
         inst = cls(**kwargs)
         # save instance