diff --git a/Text/FlowDiagram.hs b/Text/FlowDiagram.hs
--- a/Text/FlowDiagram.hs
+++ b/Text/FlowDiagram.hs
@@ -142,7 +142,8 @@
 mkLabel :: String -> Diagram String
 mkLabel lbl = do
   t <- gets numTier
-  return $ show t ++ ": " ++ reflow lbl
+  return $ if null lbl then show t
+                       else (show t ++ ": " ++ reflow lbl)
 
 invisNode :: Diagram D.NodeId
 invisNode = node [("style","invis"),("shape","point")]
@@ -245,10 +246,15 @@
 parseOrder = do string "order"
                 is <- identifier `manyTill` newline
                 return $ Order is
-parseMsg = do f <- identifier; string "->"; t <- identifier; string ":"; m <- anything
+parseMsg = do f <- identifier; string "->"; t <- identifier; m <- optionalMessage
               return $ Msg f t (trim m)
 parseAction = do s <- identifier; string ":"; a <- anything
                  return $ Action s (trim a)
+
+optionalMessage = do
+  m <- option "" (try (do {string ":"; anything}))
+  optional newline
+  return m
 
 identifier, whitespace, anything :: GenParser Char st String
 identifier = do whitespace; i <- many1 (alphaNum <|> oneOf "_"); whitespace
diff --git a/flow2dot.cabal b/flow2dot.cabal
--- a/flow2dot.cabal
+++ b/flow2dot.cabal
@@ -1,5 +1,5 @@
 Name:    flow2dot
-Version: 0.8
+Version: 0.9
 License: BSD3
 License-File: LICENSE
 Author: Dmitry Astapov <dastapov@gmail.com>
@@ -15,7 +15,7 @@
 
 Tested-With:        GHC >=6.10.4
 Build-Type:         Simple
-Extra-Source-Files: README ChangeLog
+Extra-Source-Files: README ChangeLog sample.flow
 
 Library
   hs-source-dirs: .
diff --git a/sample.flow b/sample.flow
new file mode 100644
--- /dev/null
+++ b/sample.flow
@@ -0,0 +1,9 @@
+order a b c d
+a -> b: let's play "catch a ball"!
+b -> c: i'll pass it along
+c: what to do next?
+c -> a
+a: "hello d!"
+a -> c: d wants to play too!
+c -> d: ok, here you go: catch!
+d: oops..
