diff --git a/circle/vm/models/operation.py b/circle/vm/models/operation.py
index ab76add..c8d05b9 100644
--- a/circle/vm/models/operation.py
+++ b/circle/vm/models/operation.py
@@ -90,7 +90,8 @@ class Operation(object):
         return self._exec_op(activity=activity, **kwargs)
 
     def check_precond(self):
-        pass
+        if self.instance.destroyed_at:
+            raise self.instance.InstanceDestroyedError(self.instance)
 
     def check_auth(self, user):
         if not self.instance.has_level(user, self.acl_level):
@@ -147,9 +148,6 @@ class DeployOperation(Operation):
         activity.resultant_state = 'RUNNING'
 
     def _operation(self, activity, user, system):
-        if self.instance.destroyed_at:
-            raise self.instance.InstanceDestroyedError(self.instance)
-
         self.instance._schedule_vm(activity)
 
         # Deploy virtual images
@@ -188,10 +186,6 @@ class DestroyOperation(Operation):
         :type task_uuid: str
         """)
 
-    def check_precond(self):
-        if self.instance.destroyed_at:
-            raise self.instance.InstanceDestroyedError(self.instance)
-
     def on_commit(self, activity):
         activity.resultant_state = 'DESTROYED'
 
@@ -423,6 +417,7 @@ class SleepOperation(Operation):
     description = _("""Suspend virtual machine with memory dump.""")
 
     def check_precond(self):
+        super(SleepOperation, self).check_precond()
         if self.instance.status not in ['RUNNING']:
             raise self.instance.WrongStateError(self.instance)
 
@@ -464,6 +459,7 @@ class WakeUpOperation(Operation):
         """)
 
     def check_precond(self):
+        super(WakeUpOperation, self).check_precond()
         if self.instance.status not in ['SUSPENDED']:
             raise self.instance.WrongStateError(self.instance)