diff --git a/README b/README
--- a/README
+++ b/README
@@ -23,7 +23,9 @@
 Thanks to Cale, quicksilver and roconnor from #haskell for
 suggestions on how to modularize this. Thanks to Dema from
 haskell@conference.jabber.ru for win32 testing. Gwern0 helped
-to adapt this to GHC 6.8.2
+to adapt this to GHC 6.8.2. Radoslav Dorcik sent in parser improvements.
+Mike Shigorin and Denis Smirnov packaged for Alt Linux and provided feedback
+on compatibility with different GHC versions. Vasyl Vaskul reported bugs.
 
 Known issues
 ============
diff --git a/Text/FlowDiagram.hs b/Text/FlowDiagram.hs
--- a/Text/FlowDiagram.hs
+++ b/Text/FlowDiagram.hs
@@ -18,6 +18,7 @@
 import Prelude hiding (readFile)
 import System.IO.UTF8 (readFile)
 #endif
+import Data.Maybe (catMaybes)
 import Data.Char (isSpace)
 import Test.QuickCheck
 import Control.Monad (liftM, liftM2, liftM3)
@@ -176,7 +177,7 @@
        -- Otherwise, swimline hase to be created
        (Nothing) -> do setSwimline sline currNode
                        -- Add heading node
-                       heading <- node [("label", mkHeader sline)]
+                       heading <- node [("label", mkHeader sline),("shape","box")]
                        addHeading heading
                        setSwimline sline heading
                        -- Retry connecting
@@ -239,17 +240,19 @@
   whitespace
   fl <- many flowLine
   eof
-  return fl
+  return $ catMaybes fl
 
-flowLine, parseMsg, parseAction :: GenParser Char st Flow
-flowLine = try parseOrder <|> try parseMsg <|> try parseAction
+flowLine, parseMsg, parseAction :: GenParser Char st (Maybe Flow)
+flowLine = try parseOrder <|> try parseMsg <|> try parseAction <|> parseComment <|> parseBlank
 parseOrder = do string "order"
                 is <- identifier `manyTill` newline
-                return $ Order is
+                return $ Just $ Order is
 parseMsg = do f <- identifier; string "->"; t <- identifier; m <- optionalMessage
-              return $ Msg f t (trim m)
+              return $ Just $ Msg f t (trim m)
 parseAction = do s <- identifier; string ":"; a <- anything
-                 return $ Action s (trim a)
+                 return $ Just $ Action s (trim a)
+parseBlank = do whitespace; newline; return Nothing
+parseComment = do whitespace; string "#"; anything; return Nothing
 
 optionalMessage = do
   m <- option "" (try (do {string ":"; anything}))
diff --git a/flow2dot.cabal b/flow2dot.cabal
--- a/flow2dot.cabal
+++ b/flow2dot.cabal
@@ -1,5 +1,5 @@
 Name:    flow2dot
-Version: 0.9.0.2
+Version: 0.9.0.3
 License: BSD3
 License-File: LICENSE
 Author: Dmitry Astapov <dastapov@gmail.com>
