diff --git a/CHANGES b/CHANGES
new file mode 100644
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,10 @@
+-*- mode: outline -*-
+
+* 1.1 (21 Mar 2008)
+Parser allows clauses to be split over multiple lines.
+
+* 1.0.1
+Cabal description fix
+
+* 1.0
+Initial release
diff --git a/Language/CNF/Parse/ParseDIMACS.hs b/Language/CNF/Parse/ParseDIMACS.hs
--- a/Language/CNF/Parse/ParseDIMACS.hs
+++ b/Language/CNF/Parse/ParseDIMACS.hs
@@ -17,13 +17,14 @@
 
 -- | A simple Parsec module for parsing CNF files in DIMACS format.
 module Language.CNF.Parse.ParseDIMACS
-    (parseCNF, CNF(..)) where
+    ( parseCNF, CNF(..) ) where
 
 import Text.ParserCombinators.Parsec
 
 data CNF = CNF {numVars :: Int
                ,numClauses :: Int
                ,clauses :: [[Int]]}
+           deriving Show
 
 parseCNF :: String              -- ^ The filename.  Used to report errors.
          -> String              -- ^ The contents of the CNF file.
@@ -33,30 +34,37 @@
       Left parseError -> error $ "Parse error: " ++ show parseError
       Right cs -> cs
 
+-- A DIMACS CNF file contains a header of the form "p cnf <numVars>
+-- <numClauses>" and then a bunch of 0-terminated clauses.
 cnf :: Parser CNF
 cnf =
-   do skipComments
-      char 'p'
-      spaces
-      string "cnf"
-      spaces
-      numVars <- many1 digit
-      spaces
+   do many comment
+      char 'p' ; spaces
+      string "cnf" ; spaces
+      numVars <- many1 digit ; spaces
       numClauses <- many1 digit
-      manyTill space (try newline)
-      actualClauses <- manyClause
-      return $ CNF (read numVars) (read numClauses) (actualClauses)
+      space `manyTill` newline
+      actualClauses <- many1 clause
+      return $ CNF (read numVars) (read numClauses) actualClauses
 
-skipComments :: Parser ()
-skipComments =
-    do try (do char 'c'
-               _ <- manyTill anyChar (try (char '\n'))
-               skipComments)
-       <|> return ()
+comment :: Parser String
+comment = do char 'c' ; manyTill anyChar (try newline)
 
+clause :: Parser [Int]
+clause = do many (space <|> newline)
+            lits <- between (string "") (char '0') (many1 intSpaces)
+            many (space <|> newline)
+            return lits
+
+-- Consume all whitespace after the int so the `between' in `clause' matches
+-- on "0" at the end.
+intSpaces = do i <- int 
+               many1 (space <|> newline)
+               return i
+
 int :: Parser Int
 int = do parity <- option '+' $ choice $ map char "+-"
-         first <- nonZeroDigit
+         first <- posDigit
          rest <- many digit
          return . read $
            case parity of
@@ -64,20 +72,6 @@
              '-' -> '-' : first : rest
              _  -> error $ "unknown parity syntax: " ++ [parity]
 
-nonZeroDigit :: Parser Char
-nonZeroDigit = oneOf ['1'..'9']
-
-intSpaces = do i <- int
-               spaces
-               return i
-
-clause :: Parser [Int]
-clause =
-    do spaces
-       lits <- between (string "") (char '0') (many1 intSpaces)
-       newline
-       return $ lits
-
-manyClause :: Parser [[Int]]
-manyClause = many1 clause
+posDigit :: Parser Char
+posDigit = oneOf ['1'..'9']
 
diff --git a/parse-dimacs.cabal b/parse-dimacs.cabal
--- a/parse-dimacs.cabal
+++ b/parse-dimacs.cabal
@@ -1,15 +1,17 @@
 Name:                parse-dimacs
-Version:             1.0.1
+Version:             1.1
 Synopsis:            DIMACS CNF parser library
 Description:         A DIMACS CNF parser library, implemented with Parsec.
 Category:            Parsing
 License:             LGPL
 License-file:        COPYING
 Author:              Denis Bueno
-Maintainer:          <dbueno@gmail.com>
+Maintainer:          Denis Bueno <dbueno@gmail.com>
 Stability:           provisional
 Build-Depends:       base, parsec
 Build-type:          Simple
+Tested-with:         GHC==6.8.2
+Extra-source-files:  CHANGES
 
 Exposed-modules:     Language.CNF.Parse.ParseDIMACS
 Ghc-options:         -W
