diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+0.2.4
+
+  * Fix bug in timeline rendering when using --tick-every
+    (2016-10-04 Edsko de Vries <edsko@well-typed.com>)
+  * Backwards compatibility with older ghc
+
 0.2.3
 
   * Add new command line options: `--tick-every`, `--bucket-width`,
diff --git a/ghc-events-analyze.cabal b/ghc-events-analyze.cabal
--- a/ghc-events-analyze.cabal
+++ b/ghc-events-analyze.cabal
@@ -1,5 +1,5 @@
 name:                ghc-events-analyze
-version:             0.2.3
+version:             0.2.4
 synopsis:            Analyze and visualize event logs
 description:         ghc-events-analyze is a simple Haskell profiling tool that
                      uses GHC's eventlog system. It helps with some profiling
diff --git a/src/GHC/RTS/Events/Analyze.hs b/src/GHC/RTS/Events/Analyze.hs
--- a/src/GHC/RTS/Events/Analyze.hs
+++ b/src/GHC/RTS/Events/Analyze.hs
@@ -2,6 +2,7 @@
 module Main where
 
 import Control.Monad (when, forM_)
+import Data.Maybe (isNothing)
 import System.FilePath (replaceExtension, takeFileName)
 import Text.Parsec.String (parseFromFile)
 
@@ -40,8 +41,8 @@
 
         prefixAnalysisNumber :: Int -> String -> String
         prefixAnalysisNumber i filename
-          | null optionsWindowEvent = filename
-          | otherwise               = show i ++ "." ++ filename
+          | isNothing optionsWindowEvent = filename
+          | otherwise                    = show i ++ "." ++ filename
 
     forM_ (zip [0..] analyses) $ \ (i,analysis) -> do
 
diff --git a/src/GHC/RTS/Events/Analyze/Analysis.hs b/src/GHC/RTS/Events/Analyze/Analysis.hs
--- a/src/GHC/RTS/Events/Analyze/Analysis.hs
+++ b/src/GHC/RTS/Events/Analyze/Analysis.hs
@@ -16,8 +16,7 @@
 import Control.Applicative ((<|>))
 import Control.Lens ((%=), (.=), at, use)
 import Control.Monad (forM_, when, void)
-import Data.Char (isSpace, isDigit)
-import Data.Maybe (fromMaybe)
+import Data.Maybe (fromMaybe, isNothing)
 import Data.Map.Strict (Map)
 import GHC.RTS.Events hiding (events)
 import qualified Data.Map.Strict as Map
@@ -244,7 +243,7 @@
   , eventStarts       = error "eventStarts computed at the end"
   , _startup          = Nothing
   , _shutdown         = Nothing
-  , _inWindow         = null (optionsWindowEvent opts)
+  , _inWindow         = isNothing (optionsWindowEvent opts)
   }
 
 computeTotals :: [(EventId, Timestamp, Timestamp)] -> Map EventId Timestamp
diff --git a/src/GHC/RTS/Events/Analyze/Reports/Timed/SVG.hs b/src/GHC/RTS/Events/Analyze/Reports/Timed/SVG.hs
--- a/src/GHC/RTS/Events/Analyze/Reports/Timed/SVG.hs
+++ b/src/GHC/RTS/Events/Analyze/Reports/Timed/SVG.hs
@@ -160,7 +160,7 @@
 
 timeline :: Options -> Int -> Timestamp -> D
 timeline Options{..} numBuckets bucketSize =
-    mconcat [ timelineBlock b # D.translateX (fromIntegral tb * timelineBlockWidth)
+    mconcat [ timelineBlock tb # D.translateX (fromIntegral tb * timelineBlockWidth)
             | -- bucket number
               b <- [0 .. numBuckets - 1]
               -- timeline block number, index within this timeline block @(0 .. optionsTickEvery - 1)@
