diff --git a/GUI/SummaryView.hs b/GUI/SummaryView.hs
--- a/GUI/SummaryView.hs
+++ b/GUI/SummaryView.hs
@@ -687,6 +687,10 @@
   , gcMaxPause = 0
   }
 
+-- Fail only when assertions are turned on.
+errorAs :: String -> a -> a
+errorAs msg a = assert (error msg) a
+
 accumEvent :: StatsAccum -> CapEvent -> StatsAccum
 accumEvent !statsAccum (CapEvent mcap ev) =
   let -- For events that contain a counter with a running sum.
@@ -769,15 +773,16 @@
                         }
                   -- Cap is not in the GC. Mark it as idle to complete
                   -- the identification of caps that take part
-                  -- in the current GC. Without overwritin the mode,
+                  -- in the current GC. Without overwriting the mode,
                   -- the cap could be processed later on as if
                   -- it took part in the GC, giving wrong results.
                   ModeEnd  -> dGC { gcMode = ModeIdle }
                   ModeIdle -> dGC
                   -- Impossible.
-                  ModeInit   -> error "scanEvents: GlobalSyncGC ModeInit"
-                  ModeSync{} -> error "scanEvents: GlobalSyncGC ModeSync"
-                  ModeGHC{}  -> error "scanEvents: GlobalSyncGC ModeGHC"
+                  ModeInit   -> errorAs "scanEvents: GlobalSyncGC ModeInit" dGC
+                  ModeSync{} -> errorAs "scanEvents: GlobalSyncGC ModeSync" dGC
+                  ModeGHC{}  -> -- error "scanEvents: GlobalSyncGC ModeGHC"
+                                dGC  -- workaround for #46
           GCStatsGHC{..} ->
             -- All caps must be stopped. Those that take part in the GC
             -- are in ModeInit or ModeSync, those that do not
@@ -837,8 +842,9 @@
                   -- Cap not in the current GC, leave it alone.
                   ModeIdle -> dGC
                   -- Impossible.
-                  ModeInit  -> error "scanEvents: GCStatsGHC ModeInit"
-                  ModeGHC{} -> error "scanEvents: GCStatsGHC ModeGHC"
+                  ModeInit  -> errorAs "scanEvents: GCStatsGHC ModeInit" dGC
+                  ModeGHC{} -> -- error "scanEvents: GCStatsGHC ModeGHC"
+                               dGC  -- workaround for #46
                   -- The last two cases are copied from case @GlobalSyncGC@
                   -- to work around low-resolution timestamps (#35).
                   -- Normally, these states would be impossible here, because
@@ -915,8 +921,9 @@
                    in sd { dGCTable = IM.insert cap newTime dGCTable
                          , dGCMain = Just newMain
                          }
-                 ModeEnd   -> error "scanEvents: EndGC ModeEnd"
-                 ModeIdle  -> error "scanEvents: EndGC ModeIdle"
+                 ModeEnd   -> errorAs "scanEvents: EndGC ModeEnd" sd
+                 ModeIdle  -> errorAs "scanEvents: EndGC ModeIdle"
+                              $ sd { dGCTable = IM.insert cap endedGC dGCTable }
           SparkCounters crt dud ovf cnv fiz gcd _rem ->
             -- We are guranteed the first spark counters event has all zeroes,
             -- do we don't need to rig the counters for maximal interval.
diff --git a/threadscope.cabal b/threadscope.cabal
--- a/threadscope.cabal
+++ b/threadscope.cabal
@@ -1,5 +1,5 @@
 Name:                threadscope
-Version:             0.2.6
+Version:             0.2.7
 Category:            Development, Profiling, Trace
 Synopsis:            A graphical tool for profiling parallel Haskell programs.
 Description:         ThreadScope is a graphical viewer for thread profile
