diff --git a/circle/vm/operations.py b/circle/vm/operations.py
index 0753b65..baade23 100644
--- a/circle/vm/operations.py
+++ b/circle/vm/operations.py
@@ -8,7 +8,6 @@ from django.utils.translation import ugettext_lazy as _
 from celery.exceptions import TimeLimitExceeded
 
 from common.operations import Operation, register_operation
-from storage.models import Disk
 from .tasks.local_tasks import async_instance_operation, async_node_operation
 from .models import (
     Instance, InstanceActivity, InstanceTemplate, Node, NodeActivity,
@@ -224,20 +223,24 @@ class SaveAsTemplateOperation(InstanceOperation):
         }
         params.update(kwargs)
 
+        from storage.models import Disk
+
         def __try_save_disk(disk):
             try:
                 return disk.save_as()
             except Disk.WrongDiskTypeError:
                 return disk
 
+        with activity.sub_activity('saving_disks'):
+            disks = [__try_save_disk(disk)
+                     for disk in self.instance.disks.all()]
+
         # create template and do additional setup
         tmpl = InstanceTemplate(**params)
         tmpl.full_clean()  # Avoiding database errors.
         tmpl.save()
         try:
-            with activity.sub_activity('saving_disks'):
-                tmpl.disks.add(*[__try_save_disk(disk)
-                                 for disk in self.instance.disks.all()])
+            tmpl.disks.add(*disks)
             # create interface templates
             for i in self.instance.interface_set.all():
                 i.save_as_template(tmpl)