diff --git a/beat/web/experiments/models/block.py b/beat/web/experiments/models/block.py
index 38b48dbb4d66b89bd8e4cc074abffe1985ee8f13..9de128ce3ebba812bf230743efd0457e5585e2eb 100755
--- a/beat/web/experiments/models/block.py
+++ b/beat/web/experiments/models/block.py
@@ -248,3 +248,36 @@ class Block(models.Model):
     def is_runnable(self):
         '''Checks if a block is runnable presently'''
         return all([ k.status == Block.DONE for k in self.dependencies.all() ])
+
+
+    def set_canceled(self, end_date=None):
+        """Update the block state to canceled
+
+        Parameters:
+            end_date (datetime): If provided sets the end_date otherwise
+            datetime.now() will be used.
+        """
+
+        self.status = Block.CANCELLED
+
+        if end_date is None:
+            end_date = datetime.now()
+
+        self.end_date = end_date
+
+        if self.start_date is None:
+            self.start_date = self.end_date
+
+        self.save()
+
+
+    def set_failed(self, end_date):
+        """Update the block state to failed
+
+        Parameters:
+            end_date (datetime): end date on failure
+        """
+
+        self.status = Block.FAILED
+        self.end_date = end_date
+        self.save()