diff --git a/ParseSyntaxFiles.hs b/ParseSyntaxFiles.hs
--- a/ParseSyntaxFiles.hs
+++ b/ParseSyntaxFiles.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS -farrows #-}
+{-# LANGUAGE Arrows #-}
 
 {- 
 ParseSyntaxFiles.hs processes a directory containing Kate
@@ -22,7 +22,6 @@
 
 import Text.XML.HXT.Arrow
 import Text.XML.HXT.Arrow.Edit
-import Text.XML.HXT.Arrow.XmlNodeSet
 import Control.Arrow
 import Control.Arrow.ArrowList
 import Data.List
@@ -83,25 +82,32 @@
                } deriving (Read, Show)
 
 
+-- | Converts a list of files (ending in .xml) and directories containing .xml files
+-- into a list of .xml files.
+argFiles :: [String] -> IO [String]
+argFiles [] = error "Specify paths of xml files and/or directories containing xml syntax files."
+argFiles args = do
+  let isXmlFile x = isSuffixOf ".xml" x
+  let (files, dirs) = partition isXmlFile args
+  dirContents <- mapM (\dir -> getDirectoryContents dir >>= return . map (combine dir) . filter isXmlFile) dirs
+  return $ nub (files ++ concat dirContents)
+
+
 libraryPath = joinPath ["Text", "Highlighting", "Kate"]
 destDir = joinPath [libraryPath, "Syntax"]
 
 main :: IO ()
 main = do
-  argv <- getArgs
-  srcDir <- if null argv 
-               then error "Specify path of directory containing xml syntax files."
-               else return $ argv !! 0
-  let isXmlFile x = isSuffixOf ".xml" x
-  files <- getDirectoryContents srcDir >>= (return . map (combine srcDir) . filter isXmlFile)
+  files <- getArgs >>= argFiles
   destDirExists <- doesDirectoryExist destDir
   if destDirExists
      then return ()
      else createDirectory destDir 
-  mapM processOneFile files >> return ()
+  mapM_ processOneFile files
   let syntaxFile = combine libraryPath (addExtension "Syntax" "hs")
   putStrLn $ "Writing " ++ syntaxFile
-  let names = sort $ map nameFromPath files 
+  -- Get all syntax files, not only the newly generated ones.
+  names <- getDirectoryContents destDir >>= return . sort . map dropExtension . filter (isSuffixOf ".hs")
   let imports = unlines $ map (\name -> "import qualified Text.Highlighting.Kate.Syntax." ++ name ++ " as " ++ name) names 
   let cases = unlines $ map (\name -> "        " ++ show (map toLower name) ++ " -> " ++ name ++ ".highlight") names
   let languageExtensions = concat $ intersperse ", " $ map (\name -> "(" ++ show name ++ ", " ++ name ++ ".syntaxExtensions)") names
diff --git a/README b/README
--- a/README
+++ b/README
@@ -71,6 +71,7 @@
 - perl.xml:  Fixed regexes - needed backslash-escapes before ] and ^
 - haskell.xml:  Added support for module names
 - bash.xml: Changed "\\" to "\" in two Detect2Char rules in FindString
+- literate-haskell.xml:  Fixed single line comments and growing context stack
 
 NOTE:  This software is largely untested.  Known bugs are recorded in the file
 BUGS. Please send bug reports (or better, patches) to the author (jgm at
diff --git a/Text/Highlighting/Kate.hs b/Text/Highlighting/Kate.hs
--- a/Text/Highlighting/Kate.hs
+++ b/Text/Highlighting/Kate.hs
@@ -35,4 +35,4 @@
 import Text.Highlighting.Kate.Syntax ( highlightAs, languages, languagesByExtension )
 import Text.Highlighting.Kate.Definitions ( SourceLine, LabeledSource )
 
-highlightingKateVersion = "0.2.3"
+highlightingKateVersion = "0.2.4"
diff --git a/Text/Highlighting/Kate/Syntax/LiterateHaskell.hs b/Text/Highlighting/Kate/Syntax/LiterateHaskell.hs
--- a/Text/Highlighting/Kate/Syntax/LiterateHaskell.hs
+++ b/Text/Highlighting/Kate/Syntax/LiterateHaskell.hs
@@ -50,8 +50,8 @@
   context <- currentContext
   case context of
     "literate-normal" -> return ()
-    "normal" -> pushContext "literate-normal"
-    "comment_single_line" -> (popContext >> return ())
+    "normal" -> (popContext >> return ())
+    "comment_single_line" -> (popContext >> popContext >> return ())
     "comment_multi_line" -> return ()
     "string" -> return ()
     "infix" -> return ()
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,10 +1,39 @@
-highlighting-kate (0.2.1)
+highlighting-kate 0.2.4 (15 Mar 2009)
 
+  * Fixed bug in literate-haskell-xml. Also fixed now upstream.
+    (Bjorn Buckwalter)
+
+  * Modified ParseSyntaxFiles.hs to allow regeneration of individual
+    syntax files. With the change ParseSyntaxFiles accepts any number of
+    arguments. Those ending with .xml are assumed to be files while the
+    rest are assumed to be directories containing .xml files.
+    The syntaxes included in Syntax.hs are based on the contents of
+    destDir rather than the arguments, this allows regenerating a subset
+    of syntaxes but still having all syntaxes in Syntax.hs. (Bjorn Buckwalter)
+
+  * ParseSyntaxFiles.hs: Change deprecated pragma, remove obsolete import.
+    (Bjorn Buckwalter)
+
+highlighting-kate 0.2.3 (9 Jul 2008)
+
+  * Removed -O2 in Ghc-Options, as it provides very little speedup
+
+highlighting-kate 0.2.2 (9 Jul 2008)
+
+  * Added Cc-options -O0 to cabal file. This is needed to prevent
+    gcc from using enormous amounts of memory on platforms
+    that lack a native code generator and compile via C. See
+    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=469893.
+
+  * Depend on parsec < 3, because parsec 3 is much slower.
+
+  * normalizeHighlighting now strips out empty strings
+
+highlighting-kate 0.2.1 (10 Feb 2008)
+
   *  Implemented lookAhead in parsers, which fixed bugs in perl, bash,
      and other parsers.
 
-highlighting-kate 0.2
+highlighting-kate 0.2 (10 Feb 2008)
 
   *  Initial release
-  
- -- John MacFarlane <jgm@berkeley.edu> 10 Feb 2008
diff --git a/highlighting-kate.cabal b/highlighting-kate.cabal
--- a/highlighting-kate.cabal
+++ b/highlighting-kate.cabal
@@ -1,5 +1,5 @@
 Name:                highlighting-kate
-Version:             0.2.3
+Version:             0.2.4
 Cabal-Version:       >= 1.2
 Build-Type:          Simple
 Category:            Text
@@ -68,6 +68,7 @@
                      xml/latex.xml
                      xml/lex.xml
                      xml/literate-haskell.xml
+                     xml/literate-haskell.xml.bkp
                      xml/lua.xml
                      xml/makefile.xml
                      xml/matlab.xml
diff --git a/xml/literate-haskell.xml b/xml/literate-haskell.xml
--- a/xml/literate-haskell.xml
+++ b/xml/literate-haskell.xml
@@ -327,7 +327,7 @@
 		<context attribute="Comment" lineEndContext="#stay" name="literate-normal">
 			<DetectChar attribute="Special" context="normal" char="&gt;" column="0"/>
 		</context>
-		<context attribute="Normal Text" lineEndContext="literate-normal" name="normal">
+		<context attribute="Normal Text" lineEndContext="#pop" name="normal">
 			<Detect2Chars attribute="Comment" context="comment_multi_line" char="{" char1="-" />
 			<Detect2Chars attribute="Comment" context="comment_single_line" char="-" char1="-" />
 			<keyword attribute="Keyword" context="#stay" String="keywords" />
@@ -343,7 +343,7 @@
 			<Float attribute="Float" context="#stay" />
 			<Int attribute="Decimal" context="#stay" />
 		</context>
-		<context attribute="Comment" lineEndContext="#pop" name="comment_single_line" />
+		<context attribute="Comment" lineEndContext="#pop#pop" name="comment_single_line" />
 		<context attribute="Comment" lineEndContext="#stay" name="comment_multi_line">
 			<Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
 		</context>
diff --git a/xml/literate-haskell.xml.bkp b/xml/literate-haskell.xml.bkp
new file mode 100644
--- /dev/null
+++ b/xml/literate-haskell.xml.bkp
@@ -0,0 +1,386 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="Literate Haskell" version="1.04" kateversion="2.4" section="Sources" extensions="*.lhs" author="Marcel Martin (mmar@freenet.de)" license="">
+	<highlighting>
+	<list name="keywords">
+		<item> case </item>
+		<item> class </item>
+		<item> data </item>
+		<item> deriving </item>
+		<item> do </item>
+		<item> else </item>
+		<item> if </item>
+		<item> in </item>
+		<item> infixl </item>
+		<item> infixr </item>
+		<item> instance </item>
+		<item> let </item>
+		<item> module </item>
+		<item> of </item>
+		<item> primitive </item>
+		<item> then </item>
+		<item> type </item>
+		<item> where </item>
+	</list>
+        <list name="infix operators">
+		<item> quot </item>
+		<item> rem </item>
+		<item> div </item>
+		<item> mod </item>
+		<item> elem </item>
+		<item> notElem </item>
+		<item> seq </item>
+	</list>
+	<list name="functions">
+		<!--
+                These operators are not handled yet.
+		<item> !! </item>
+		<item> % </item>
+		<item> && </item>
+		<item> $! </item>
+		<item> $ </item>
+		<item> * </item>
+		<item> ** </item>
+		<item> - </item>
+		<item> . </item>
+		<item> /= </item>
+		<item> < </item>
+		<item> <= </item>
+		<item> =<< </item>
+		<item> == </item>
+		<item> > </item>
+		<item> >= </item>
+		<item> >> </item>
+		<item> >>= </item>
+		<item> ^ </item>
+		<item> ^^ </item>
+		<item> ++ </item>
+		<item> || </item>
+		//-->
+
+		<item> FilePath </item>
+		<item> IOError </item>
+		<item> abs </item>
+		<item> acos </item>
+		<item> acosh </item>
+		<item> all </item>
+		<item> and </item>
+		<item> any </item>
+		<item> appendFile </item>
+		<item> approxRational </item>
+		<item> asTypeOf </item>
+		<item> asin </item>
+		<item> asinh </item>
+		<item> atan </item>
+		<item> atan2 </item>
+		<item> atanh </item>
+		<item> basicIORun </item>
+		<item> break </item>
+		<item> catch </item>
+		<item> ceiling </item>
+		<item> chr </item>
+		<item> compare </item>
+		<item> concat </item>
+		<item> concatMap </item>
+		<item> const </item>
+		<item> cos </item>
+		<item> cosh </item>
+		<item> curry </item>
+		<item> cycle </item>
+		<item> decodeFloat </item>
+		<item> denominator </item>
+		<item> digitToInt </item>
+		<item> div </item>
+		<item> divMod </item>
+		<item> drop </item>
+		<item> dropWhile </item>
+		<item> either </item>
+		<item> elem </item>
+		<item> encodeFloat </item>
+		<item> enumFrom </item>
+		<item> enumFromThen </item>
+		<item> enumFromThenTo </item>
+		<item> enumFromTo </item>
+		<item> error </item>
+		<item> even </item>
+		<item> exp </item>
+		<item> exponent </item>
+		<item> fail </item>
+		<item> filter </item>
+		<item> flip </item>
+		<item> floatDigits </item>
+		<item> floatRadix </item>
+		<item> floatRange </item>
+		<item> floor </item>
+		<item> fmap </item>
+		<item> foldl </item>
+		<item> foldl1 </item>
+		<item> foldr </item>
+		<item> foldr1 </item>
+		<item> fromDouble </item>
+		<item> fromEnum </item>
+		<item> fromInt </item>
+		<item> fromInteger </item>
+		<item> fromIntegral </item>
+		<item> fromRational </item>
+		<item> fst </item>
+		<item> gcd </item>
+		<item> getChar </item>
+		<item> getContents </item>
+		<item> getLine </item>
+		<item> head </item>
+		<item> id </item>
+		<item> inRange </item>
+		<item> index </item>
+		<item> init </item>
+		<item> intToDigit </item>
+		<item> interact </item>
+		<item> ioError </item>
+		<item> isAlpha </item>
+		<item> isAlphaNum </item>
+		<item> isAscii </item>
+		<item> isControl </item>
+		<item> isDenormalized </item>
+		<item> isDigit </item>
+		<item> isHexDigit </item>
+		<item> isIEEE </item>
+		<item> isInfinite </item>
+		<item> isLower </item>
+		<item> isNaN </item>
+		<item> isNegativeZero </item>
+		<item> isOctDigit </item>
+		<item> isPrint </item>
+		<item> isSpace </item>
+		<item> isUpper </item>
+		<item> iterate </item>
+		<item> last </item>
+		<item> lcm </item>
+		<item> length </item>
+		<item> lex </item>
+		<item> lexDigits </item>
+		<item> lexLitChar </item>
+		<item> lines </item>
+		<item> log </item>
+		<item> logBase </item>
+		<item> lookup </item>
+		<item> map </item>
+		<item> mapM </item>
+		<item> mapM_ </item>
+		<item> max </item>
+		<item> maxBound </item>
+		<item> maximum </item>
+		<item> maybe </item>
+		<item> min </item>
+		<item> minBound </item>
+		<item> minimum </item>
+		<item> mod </item>
+		<item> negate </item>
+		<item> not </item>
+		<item> notElem </item>
+		<item> null </item>
+		<item> numerator </item>
+		<item> odd </item>
+		<item> or </item>
+		<item> ord </item>
+		<item> otherwise </item>
+		<item> pi </item>
+		<item> pred </item>
+		<item> primExitWith </item>
+		<item> print </item>
+		<item> product </item>
+		<item> properFraction </item>
+		<item> putChar </item>
+		<item> putStr </item>
+		<item> putStrLn </item>
+		<item> quot </item>
+		<item> quotRem </item>
+		<item> range </item>
+		<item> rangeSize </item>
+		<item> read </item>
+		<item> readDec </item>
+		<item> readFile </item>
+		<item> readFloat </item>
+		<item> readHex </item>
+		<item> readIO </item>
+		<item> readInt </item>
+		<item> readList </item>
+		<item> readLitChar </item>
+		<item> readLn </item>
+		<item> readOct </item>
+		<item> readParen </item>
+		<item> readSigned </item>
+		<item> reads </item>
+		<item> readsPrec </item>
+		<item> realToFrac </item>
+		<item> recip </item>
+		<item> rem </item>
+		<item> repeat </item>
+		<item> replicate </item>
+		<item> return </item>
+		<item> reverse </item>
+		<item> round </item>
+		<item> scaleFloat </item>
+		<item> scanl </item>
+		<item> scanl1 </item>
+		<item> scanr </item>
+		<item> scanr1 </item>
+		<item> seq </item>
+		<item> sequence </item>
+		<item> sequence_ </item>
+		<item> show </item>
+		<item> showChar </item>
+		<item> showInt </item>
+		<item> showList </item>
+		<item> showLitChar </item>
+		<item> showParen </item>
+		<item> showSigned </item>
+		<item> showString </item>
+		<item> shows </item>
+		<item> showsPrec </item>
+		<item> significand </item>
+		<item> signum </item>
+		<item> sin </item>
+		<item> sinh </item>
+		<item> snd </item>
+		<item> span </item>
+		<item> splitAt </item>
+		<item> sqrt </item>
+		<item> subtract </item>
+		<item> succ </item>
+		<item> sum </item>
+		<item> tail </item>
+		<item> take </item>
+		<item> takeWhile </item>
+		<item> tan </item>
+		<item> tanh </item>
+		<item> threadToIOResult </item>
+		<item> toEnum </item>
+		<item> toInt </item>
+		<item> toInteger </item>
+		<item> toLower </item>
+		<item> toRational </item>
+		<item> toUpper </item>
+		<item> truncate </item>
+		<item> uncurry </item>
+		<item> undefined </item>
+		<item> unlines </item>
+		<item> until </item>
+		<item> unwords </item>
+		<item> unzip </item>
+		<item> unzip3 </item>
+		<item> userError </item>
+		<item> words </item>
+		<item> writeFile </item>
+		<item> zip </item>
+		<item> zip3 </item>
+		<item> zipWith </item>
+		<item> zipWith3 </item>
+	</list>
+	<list name="type constructors">
+		<item> Bool </item>
+		<item> Char </item>
+                <item> Double </item>
+		<item> Either </item>
+		<item> Float </item>
+		<item> IO </item>
+		<item> Integer </item>
+		<item> Int </item>
+		<item> Maybe </item>
+		<item> Ordering </item>
+		<item> Rational </item>
+		<item> Ratio </item>
+		<item> ReadS </item>
+		<item> ShowS </item>
+		<item> String </item>
+
+	</list>
+	<list name="classes">
+		<item> Bounded </item>
+		<item> Enum </item>
+		<item> Eq </item>
+		<item> Floating </item>
+		<item> Fractional </item>
+		<item> Functor </item>
+		<item> Integral </item>
+		<item> Ix </item>
+		<item> Monad </item>
+		<item> Num </item>
+		<item> Ord </item>
+		<item> Read </item>
+		<item> RealFloat </item>
+		<item> RealFrac </item>
+		<item> Real </item>
+		<item> Show </item>
+	</list>
+	<list name="data constructors">
+		<item> EQ </item>
+		<item> False </item>
+		<item> GT </item>
+		<item> Just </item>
+		<item> LT </item>
+		<item> Left </item>
+		<item> Nothing </item>
+		<item> Right </item>
+		<item> True </item>
+	</list>
+	<contexts>
+		<context attribute="Comment" lineEndContext="#stay" name="literate-normal">
+			<DetectChar attribute="Special" context="normal" char="&gt;" column="0"/>
+		</context>
+		<context attribute="Normal Text" lineEndContext="literate-normal" name="normal">
+			<Detect2Chars attribute="Comment" context="comment_multi_line" char="{" char1="-" />
+			<Detect2Chars attribute="Comment" context="comment_single_line" char="-" char1="-" />
+			<keyword attribute="Keyword" context="#stay" String="keywords" />
+			<keyword attribute="Class" context="#stay" String="classes" />
+			<keyword attribute="Type Constructor" context="#stay" String="type constructors" />
+			<keyword attribute="Function" context="#stay" String="functions" />
+			<keyword attribute="Data Constructor" context="#stay" String="data constructors" />
+			<DetectChar attribute="String" context="string" char="&quot;" />
+			<DetectChar attribute="Infix Operator" context="infix" char="`"/>
+			<RegExpr attribute="Normal Text" context="#stay" String="\w[']+" />
+			<DetectChar attribute="Char" context="single_char" char="'" />
+			<RegExpr attribute="Function Definition" context="#stay" String="\s*[a-z_]+\w*'*\s*::" />
+			<Float attribute="Float" context="#stay" />
+			<Int attribute="Decimal" context="#stay" />
+		</context>
+		<context attribute="Comment" lineEndContext="#pop" name="comment_single_line" />
+		<context attribute="Comment" lineEndContext="#stay" name="comment_multi_line">
+			<Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+		</context>
+		<context attribute="String" lineEndContext="#stay" name="string">
+			<RegExpr attribute="String" context="#stay" String="\\." />
+			<DetectChar attribute="String" context="#pop" char="&quot;" />
+		</context>
+		<context attribute="Infix Operator" lineEndContext="#stay" name="infix">
+			<DetectChar attribute="Infix Operator" context="#pop" char="`"/>
+		</context>
+		<context attribute="Char" lineEndContext="#pop" name="single_char">
+			<RegExpr attribute="Char" context="#stay" String="\\." />
+			<DetectChar attribute="Char" context="#pop" char="'" />
+		</context>
+		<context attribute="Function Definition" lineEndContext="#pop" name="function_definition">
+			<DetectChar attribute="Function Definition" context="#pop" char=";" />
+		</context>
+	</contexts>
+	<itemDatas>
+		<itemData name="Normal Text"		defStyleNum="dsNormal"/>
+		<itemData name="Keyword" 		defStyleNum="dsKeyword"/>
+		<itemData name="Function"		defStyleNum="dsFunction"/>
+		<itemData name="Function Definition"	defStyleNum="dsFunction"/>
+		<itemData name="Class"			defStyleNum="dsKeyword"/>
+		<itemData name="Decimal"		defStyleNum="dsDecVal"/>
+		<itemData name="Float"			defStyleNum="dsFloat"/>
+		<itemData name="Char"			defStyleNum="dsChar"/>
+		<itemData name="String"			defStyleNum="dsString"/>
+		<itemData name="Constructor"		defStyleNum="dsOthers"/>
+		<itemData name="Comment"		defStyleNum="dsComment"/>
+		<itemData name="Data Constructor"	defStyleNum="dsKeyword"/>
+		<itemData name="Type Constructor"	defStyleNum="dsDataType"/>
+		<itemData name="Infix Operator"		defStyleNum="dsOthers"/>
+		<itemData name="Special"		defStyleNum="dsChar"/>
+	</itemDatas>
+	</highlighting>
+	<general>
+		<keywords casesensitive="1" />
+	</general>
+</language>
