diff --git a/keyword-args.cabal b/keyword-args.cabal
--- a/keyword-args.cabal
+++ b/keyword-args.cabal
@@ -1,5 +1,5 @@
 name:                keyword-args
-version:             0.1.0.5
+version:             0.2.0.1
 synopsis:            Extract data from a keyword-args config file format
 
 description: Extracts data from a configuration file with keywords
diff --git a/src/Data/KeywordArgs/Parse.hs b/src/Data/KeywordArgs/Parse.hs
--- a/src/Data/KeywordArgs/Parse.hs
+++ b/src/Data/KeywordArgs/Parse.hs
@@ -2,10 +2,13 @@
 
 import Data.Maybe (catMaybes)
 
-import Text.Parsec ((<|>), many, try, manyTill, char, anyChar, many1)
+import Text.Parsec
+  ((<|>), many, try, lookAhead, manyTill, char, anyChar, many1)
+
 import Text.Parsec.String (Parser)
 
 import Text.ParserCombinators.Parsec.Prim (GenParser)
+
 import Text.ParserCombinators.Parsec.Char (space, newline, oneOf, noneOf)
 
 import Control.Monad (liftM2)
@@ -14,40 +17,44 @@
 
 import Control.Applicative ((<*), (*>), (<$>))
 
--- | Returns a parser for input of a keyword, followed by a space,
--- followed by one or more arguments. Any comments (text preceeded
--- by a '#') will be ignored until the end of the line.
-configParser :: Parser [(String, String)]
-configParser = catMaybes <$> many line
+configParser :: Parser [(String, [String])]
+configParser = catMaybes <$> many lineWithArguments
 
-line :: Parser (Maybe (String, String))
-line = comment *> return Nothing <|> Just <$> configurationOption
+lineWithArguments :: Parser (Maybe (String, [String]))
+lineWithArguments =
+  comment *> return Nothing
+  <|> newline *> return Nothing
+  <|> many1 (oneOf "\t ") *> return Nothing
+  <|> Just <$> configurationOptionWithArguments
 
-configurationOption :: Parser (String, String)
-configurationOption = do
+configurationOptionWithArguments :: Parser (String, [String])
+configurationOptionWithArguments = do
   _ <- many space
 
-  keyword <- manyTill1 anyChar keywordArgSeparator
-  val     <- value
+  keyword   <- manyTill1 (noneOf "\n") keywordArgSeparator
 
-  return (keyword, val)
+  arguments <- argumentParser
 
-value :: Parser String
-value =
-  unquotedValue <|> quotedValue
+  return (keyword, arguments)
 
-  where
-    endOfOption   = endOfLineOrInput <|> comment
+argumentParser :: Parser [String]
+argumentParser =
+  manyTill1 (try quotedArgument <|> try unquotedArgument)
+  (try endOfLineOrInput <|> try comment)
 
-    quotedValue   = quote
-                    *> manyTill1 argumentChar quote
-                    <* endOfOption
+quotedArgument :: Parser String
+quotedArgument =
+  many (oneOf " \t") *> quote *> manyTill1 (noneOf "#") quote
 
-    unquotedValue = manyTill1 argumentChar endOfOption
+unquotedArgument :: Parser String
+unquotedArgument =
+  many (oneOf " \t") *> many1 (noneOf "\" \t\n#") <*
+  (try comment <|> try (oneOf " \t") *> return () <|>
+   lookAhead (try endOfLineOrInput))
 
 comment :: Parser ()
 comment =
-  try (many space *> char '#')
+  try (many (oneOf " \t") *> char '#')
   *> manyTill anyChar endOfLineOrInput
   *> return ()
 
@@ -56,9 +63,6 @@
 
 manyTill1 :: GenParser tok st a -> GenParser tok st end -> GenParser tok st [a]
 manyTill1 p end = liftM2 (:) p (manyTill p end)
-
-argumentChar :: Parser Char
-argumentChar =  noneOf "#\""
 
 keywordArgSeparator :: Parser ()
 keywordArgSeparator = many1 (oneOf "\t ") *> return ()
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -62,9 +62,12 @@
     (_, _, errs) ->
       ioError (userError (concat errs ++ usageInfo (headerMessage name) options))
 
-parseConfig :: String -> Either ParseError [(String, String)]
+parseConfig :: String -> Either ParseError [(String, [String])]
 parseConfig = parse configParser "(unknown)"
 
+configToList :: [(String, [String])] -> [[String]]
+configToList cfg = map (\line -> fst line : snd line) cfg
+
 runCheck :: IO ()
 runCheck = do
   f <- getContents
@@ -72,7 +75,8 @@
   case parseConfig f of
     Left e -> ioError $ userError $ "Parse error: " ++ show e
 
-    Right config -> putStr $ unpack $ encode config
+    Right config ->
+      putStr $ unpack $ encode $ configToList config
 
 main :: IO ()
 main = do
