diff --git a/lib/distribot/workflow.rb b/lib/distribot/workflow.rb
index <HASH>..<HASH> 100644
--- a/lib/distribot/workflow.rb
+++ b/lib/distribot/workflow.rb
@@ -104,6 +104,7 @@ module Distribot
     end
 
     def pause!
+      raise "Cannot pause unless running" unless self.running?
       self.add_transition(to: 'paused', timestamp: Time.now.utc.to_f)
     end
 
@@ -121,6 +122,7 @@ module Distribot
     end
 
     def cancel!
+      raise "Cannot cancel unless running" unless self.running?
       self.add_transition(to: 'canceled', timestamp: Time.now.utc.to_f)
     end
 
@@ -128,6 +130,10 @@ module Distribot
       self.current_phase == 'canceled'
     end
 
+    def running?
+      ! ( self.paused? || self.canceled? || self.finished? )
+    end
+
     def redis_id
       @redis_id ||= Distribot.redis_id("workflow", self.id)
     end
Disallow pause or cancel unless running.