diff --git a/Data/Time/LocalTime/TimeZone/Olson/Parse.hs b/Data/Time/LocalTime/TimeZone/Olson/Parse.hs
--- a/Data/Time/LocalTime/TimeZone/Olson/Parse.hs
+++ b/Data/Time/LocalTime/TimeZone/Olson/Parse.hs
@@ -107,13 +107,16 @@
 getOlson limits = do
     (version, part1) <- getOlsonPart True limits get32bitInteger
     -- There is one part for Version 1 format data, and two parts and a POSIX
-    -- TZ string for Version 2 format data
-    case version of
-      0  -> return part1
-      50 -> do (_, part2) <- getOlsonPart False limits get64bitInteger
-               posixTZ <- getPosixTZ
-               return $ part1 `mappend` part2 `mappend` posixTZ
-      _  -> verify (const False) "invalid version number" undefined
+    -- TZ string for Version 2 or 3 format data
+    case () of
+      _ | version == 0 -> return part1
+        | version == 50 || version == 51 -> do
+            (_, part2) <- getOlsonPart False limits get64bitInteger
+            posixTZ <- getPosixTZ
+            return $ part1 `mappend` part2 `mappend` posixTZ
+        | otherwise -> do
+            let msg = "getOlson: invalid tzfile version " ++ toASCII [version]
+            verify (const False) msg undefined
 
 -- Parse the part of an Olson file that contains timezone data
 getOlsonPart :: Integral a => Bool -> SizeLimits -> Get a ->
diff --git a/timezone-olson.cabal b/timezone-olson.cabal
--- a/timezone-olson.cabal
+++ b/timezone-olson.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.1.3
+Version:             0.1.4
 
 -- A short (one-line) description of the package.
 Synopsis:            A pure Haskell parser and renderer for binary Olson timezone files
