diff --git a/src/Network/AWS/Flow.hs b/src/Network/AWS/Flow.hs
--- a/src/Network/AWS/Flow.hs
+++ b/src/Network/AWS/Flow.hs
@@ -77,15 +77,6 @@
   logInfo' $ sformat ("event=execute uid=" % stext) uid
   startWorkflowExecutionAction uid tskName tskVersion tskQueue input
 
-serializeError :: MonadFlow m => Error -> m ()
-serializeError = \case
-  e@(SerializeError s) ->
-    unless check $ throwM e where
-      check =
-        s ^. serializeStatus  == ok200 &&
-        s ^. serializeAbbrev  == "SWF"
-  e -> throwM e
-
 exitCode :: RE Char Int
 exitCode =
   many anySym *> string "exit status: " *> num <* many anySym where
@@ -99,31 +90,29 @@
       respondActivityTaskFailedAction token
 
 act :: MonadFlow m => Queue -> (Uid -> Metadata -> [Blob] -> m (Metadata, [Artifact], Maybe SomeException)) -> m ()
-act queue action =
-  handle serializeError $ do
-    logInfo' "event=act"
-    (token', uid', input) <- pollForActivityTaskAction queue
-    token <- maybeThrow (userError "No Token") token'
-    uid <- maybeThrow (userError "No Uid") uid'
-    logInfo' $ sformat ("event=act-begin uid=" % stext) uid
-    maybe_ input $ logDebug' . sformat ("event=act-input " % stext)
-    keys <- listObjectsAction uid
-    unless (null keys) $ logInfo' $ sformat ("event=list-blobs uid=" % stext) uid
-    blobs <- forM keys $ getObjectAction uid
-    unless (null blobs) $ logInfo' $ sformat ("event=blobs uid=" % stext) uid
-    (output, artifacts, e) <- action uid input blobs
-    maybe_ output $ logDebug' . sformat ("event=act-output " % stext)
-    logInfo' $ sformat ("event=act-finish uid=" % stext) uid
-    forM_ artifacts $ putObjectAction uid
-    unless (null artifacts) $ logInfo' $ sformat ("event=artifacts uid=" % stext) uid
-    maybe (respondActivityTaskCompletedAction token output) (actException token) e
+act queue action = do
+  logInfo' "event=act"
+  (token', uid', input) <- pollForActivityTaskAction queue
+  maybe_ token' $ \token ->
+    maybe_ uid' $ \uid -> do
+      logInfo' $ sformat ("event=act-begin uid=" % stext) uid
+      maybe_ input $ logDebug' . sformat ("event=act-input " % stext)
+      keys <- listObjectsAction uid
+      unless (null keys) $ logInfo' $ sformat ("event=list-blobs uid=" % stext) uid
+      blobs <- forM keys $ getObjectAction uid
+      unless (null blobs) $ logInfo' $ sformat ("event=blobs uid=" % stext) uid
+      (output, artifacts, e) <- action uid input blobs
+      maybe_ output $ logDebug' . sformat ("event=act-output " % stext)
+      logInfo' $ sformat ("event=act-finish uid=" % stext) uid
+      forM_ artifacts $ putObjectAction uid
+      unless (null artifacts) $ logInfo' $ sformat ("event=artifacts uid=" % stext) uid
+      maybe (respondActivityTaskCompletedAction token output) (actException token) e
 
 decide :: MonadFlow m => Plan -> m ()
-decide plan@Plan{..} =
-  handle serializeError $ do
-    logInfo' "event=decide"
-    (token', events) <- pollForDecisionTaskAction (tskQueue $ strtTask plnStart)
-    token <- maybeThrow (userError "No Token") token'
+decide plan@Plan{..} = do
+  logInfo' "event=decide"
+  (token', events) <- pollForDecisionTaskAction (tskQueue $ strtTask plnStart)
+  maybe_ token' $ \token -> do
     logger <- asks feLogger
     decisions <- runDecide logger plan events select
     respondDecisionTaskCompletedAction token decisions
diff --git a/wolf.cabal b/wolf.cabal
--- a/wolf.cabal
+++ b/wolf.cabal
@@ -1,5 +1,5 @@
 name:                wolf
-version:             0.2.11
+version:             0.2.12
 synopsis:            Amazon Simple Workflow Service Wrapper.
 homepage:            https://github.com/swift-nav/wolf
 license:             MIT
