diff --git a/circle/vm/models/instance.py b/circle/vm/models/instance.py
index 140fcad..87a00b8 100644
--- a/circle/vm/models/instance.py
+++ b/circle/vm/models/instance.py
@@ -218,6 +218,7 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel,
                                              "destruction."))
     objects = Manager()
     active = InstanceActiveManager()
+    _ops = {}  # operation factory registry
 
     class Meta:
         app_label = 'vm'
diff --git a/circle/vm/models/operation.py b/circle/vm/models/operation.py
index fed33e5..7270dbf 100644
--- a/circle/vm/models/operation.py
+++ b/circle/vm/models/operation.py
@@ -3,6 +3,7 @@ from __future__ import absolute_import, unicode_literals
 from common.models import activity_context
 from ..tasks.local_tasks import async_operation
 from .activity import InstanceActivity
+from .instance import Instance
 
 
 class Operation:
@@ -77,3 +78,12 @@ class Operation:
         """This method is called when the operation executes successfully.
         """
         pass
+
+
+def register_operation(op_cls, op_id=None):
+    """Register the specified operation with Instance.
+    """
+    if op_id is None:
+        op_id = op_cls.id
+
+    Instance._ops[op_id] = lambda inst: op_cls(inst)