diff --git a/creatur.cabal b/creatur.cabal
--- a/creatur.cabal
+++ b/creatur.cabal
@@ -1,5 +1,5 @@
 Name:              creatur
-Version:           5.9.7
+Version:           5.9.8
 Stability:         experimental
 Synopsis:          Framework for artificial life experiments.
 Description:       A software framework for automating experiments
@@ -36,7 +36,7 @@
 source-repository this
   type:     git
   location: https://github.com/mhwombat/creatur.git
-  tag:      5.9.7
+  tag:      5.9.8
 
 library
   GHC-Options:      -Wall -fno-warn-orphans
@@ -75,6 +75,7 @@
                     cond ==0.4.*,
                     cereal ==0.4.*,
                     directory ==1.2.*,
+                    exceptions ==0.8.*,
                     filepath ==1.4.*,
                     gray-extended ==1.*,
                     hdaemonize ==0.5.*,
diff --git a/src/ALife/Creatur/Task.hs b/src/ALife/Creatur/Task.hs
--- a/src/ALife/Creatur/Task.hs
+++ b/src/ALife/Creatur/Task.hs
@@ -9,7 +9,7 @@
 --
 -- Provides tasks that you can use with a daemon. These tasks handle
 -- reading and writing agents, and various other housekeeping chores,
--- which reduces the amount of code you need to write. 
+-- which reduces the amount of code you need to write.
 --
 -- It’s also easy to write your own tasks, using these as a guide.)
 --
@@ -41,6 +41,7 @@
 import Control.Conditional (whenM)
 import Control.Exception (SomeException)
 import Control.Monad (when)
+import qualified Control.Monad.Catch as C
 import Control.Monad.State (StateT, execStateT, evalStateT)
 import Control.Monad.Trans.Class (lift)
 import Data.Serialize (Serialize)
@@ -79,9 +80,10 @@
   as <- lineup
   when (not . null $ as) $ do
     let a = head as
+    C.onException
+      (withAgent agentProgram a)
+      (writeToLog "Continuing after exception")
     markDone a
-    -- do that first in case the next line triggers an exception
-    withAgent agentProgram a
     atEndOfRound endRoundProgram
 
 --   The input parameter is a list of agents. The first agent in the
@@ -101,9 +103,10 @@
     endRoundProgram = do
   atStartOfRound startRoundProgram
   as <- lineup
+  C.onException
+    (withAgents agentsProgram as)
+    (writeToLog "Continuing after exception")
   markDone (head as)
-  -- do that first in case the next line triggers an exception
-  withAgents agentsProgram as
   atEndOfRound endRoundProgram
 
 checkPopSize :: Universe u => (Int, Int) -> StateT u IO ()
