diff --git a/curry-frontend.cabal b/curry-frontend.cabal
--- a/curry-frontend.cabal
+++ b/curry-frontend.cabal
@@ -1,5 +1,5 @@
 Name:          curry-frontend
-Version:       0.2.8
+Version:       0.2.9
 Cabal-Version: >= 1.6
 Synopsis:      Compile the functional logic language Curry to several intermediate formats
 Description:   The Curry Frontend consists of the executable program "cymake".
diff --git a/src/CurryCompilerOpts.hs b/src/CurryCompilerOpts.hs
--- a/src/CurryCompilerOpts.hs
+++ b/src/CurryCompilerOpts.hs
@@ -33,7 +33,8 @@
 	      untypedAbstract :: Bool,   -- generate untyped AbstractCurry code
 	      parseOnly :: Bool,         -- generate source representation
 	      withExtensions :: Bool,    -- enable extended functionalities
-	      dump :: [Dump]             -- dumps
+	      dump :: [Dump],            -- dumps
+              writeToSubdir :: Bool      -- should output be written to subdir?
 	    } deriving Show
 
 
@@ -53,7 +54,8 @@
 		       untypedAbstract = False,
                        parseOnly       = False,
 		       withExtensions  = False,
-		       dump            = []
+		       dump            = [],
+                       writeToSubdir   = True
 		     }
 
 
@@ -66,6 +68,7 @@
             | Abstract | UntypedAbstract | ParseOnly
 	    | WithExtensions
 	    | Dump [Dump]
+            | WriteToSubdir
    deriving Eq
 
 
@@ -117,7 +120,9 @@
 	   Option "" ["dump-case"] (NoArg (Dump [DumpCase]))
 	          "dump intermediate language after case simplification",
 	   Option "?h" ["help"] (NoArg Help)
-                  "display this help and exit"
+                  "display this help and exit",
+           Option "" ["no-hidden-subdir"] (NoArg WriteToSubdir)
+	          "write all output to hidden .curry subdirectory"
 	  ]
 
 
@@ -140,6 +145,7 @@
 selectOption ParseOnly opts       = opts{ parseOnly = True }
 selectOption WithExtensions opts  = opts{ withExtensions = True }
 selectOption (Dump ds) opts       = opts{ dump = ds ++ dump opts }
+selectOption WriteToSubdir opts   = opts{ writeToSubdir = False }
 
 
 -------------------------------------------------------------------------------
diff --git a/src/CurryHtml.hs b/src/CurryHtml.hs
--- a/src/CurryHtml.hs
+++ b/src/CurryHtml.hs
@@ -25,7 +25,7 @@
             modulname = fileName sourceprogname
         fullfname <- getCurryPath imports sourcefilename
         program <- filename2program imports (maybe sourcefilename id fullfname)
-        (if null outputfilename then writeModule output 
+        (if null outputfilename then writeModule True output 
                                 else writeFile   output)
            (program2html modulname program)
              
diff --git a/src/Modules.lhs b/src/Modules.lhs
--- a/src/Modules.lhs
+++ b/src/Modules.lhs
@@ -118,7 +118,7 @@
 >                                              id 
 >                                              (output opts)
 >                           outputMod = showModule m'
->                       writeModule outputFile outputMod
+>                       writeModule (writeToSubdir opts) outputFile outputMod
 >                       return Nothing
 >        else
 >          do -- checkModule checks types, and then transModule introduces new
@@ -246,8 +246,8 @@
 >           | uniqueId x == 0 = bindQual (x,y)
 >           | otherwise = bindTopEnv "Modules.qualifyEnv" x y
 
-> writeXML :: Maybe FilePath -> FilePath -> CurryEnv -> IL.Module -> IO ()
-> writeXML tfn sfn cEnv il = writeModule ofn (showln code)
+> writeXML :: Bool -> Maybe FilePath -> FilePath -> CurryEnv -> IL.Module -> IO ()
+> writeXML sub tfn sfn cEnv il = writeModule sub ofn (showln code)
 >   where ofn  = fromMaybe (xmlName sfn) tfn
 >         code = (xmlModule cEnv il)
 
@@ -258,23 +258,23 @@
 >                        (fromMaybe (flatName sfn) tfn)
 
 > writeFlatFile :: Options -> (Prog, [WarnMsg]) -> String -> IO Prog
-> writeFlatFile opts@Options{extendedFlat=ext} (res,msgs) fname = do
+> writeFlatFile opts@Options{extendedFlat=ext,writeToSubdir=sub} (res,msgs) fname = do
 >         unless (noWarn opts) (printMessages msgs)
->	  if ext then writeExtendedFlat fname res
->                else writeFlatCurry fname res
+>	  if ext then writeExtendedFlat sub fname res
+>                else writeFlatCurry sub fname res
 >         return res
 
 
-> writeTypedAbs :: Maybe FilePath -> FilePath -> ValueEnv -> TCEnv -> Module
+> writeTypedAbs :: Bool -> Maybe FilePath -> FilePath -> ValueEnv -> TCEnv -> Module
 >	           -> IO ()
-> writeTypedAbs tfn sfn tyEnv tcEnv mod
->    = AC.writeCurry fname (genTypedAbstract tyEnv tcEnv mod)
+> writeTypedAbs sub tfn sfn tyEnv tcEnv mod
+>    = AC.writeCurry sub fname (genTypedAbstract tyEnv tcEnv mod)
 >  where fname = fromMaybe (acyName sfn) tfn
 
-> writeUntypedAbs :: Maybe FilePath -> FilePath -> ValueEnv -> TCEnv  
+> writeUntypedAbs :: Bool -> Maybe FilePath -> FilePath -> ValueEnv -> TCEnv  
 >	             -> Module -> IO ()
-> writeUntypedAbs tfn sfn tyEnv tcEnv mod
->    = AC.writeCurry fname (genUntypedAbstract tyEnv tcEnv mod)
+> writeUntypedAbs sub tfn sfn tyEnv tcEnv mod
+>    = AC.writeCurry sub fname (genUntypedAbstract tyEnv tcEnv mod)
 >  where fname = fromMaybe (uacyName sfn) tfn
 
 > showln :: Show a => a -> String
@@ -518,7 +518,8 @@
 >                           return Nothing
 >                     else return Nothing
 >   | flatXml opts
->     = writeXML (output opts) fname cEnv il >> return Nothing
+>     = writeXML (writeToSubdir opts) (output opts) fname cEnv il >> 
+>       return Nothing
 >   | otherwise
 >     = internalError "@Modules.genFlat: illegal option"
 >  where
@@ -527,17 +528,17 @@
 >    emptyIntf = Prog "" [] [] [] []
 >    writeInterface intf msgs = do
 >          unless (noWarn opts) (printMessages msgs)
->          writeFlatCurry fintName intf
+>          writeFlatCurry (writeToSubdir opts) fintName intf
 
 
 > genAbstract :: Options -> FilePath  -> ValueEnv -> TCEnv -> Module 
 >                -> IO (Maybe FilePath)
-> genAbstract opts fname tyEnv tcEnv mod
+> genAbstract opts@Options{writeToSubdir=sub} fname tyEnv tcEnv mod
 >    | abstract opts
->      = do writeTypedAbs Nothing fname tyEnv tcEnv mod 
+>      = do writeTypedAbs sub Nothing fname tyEnv tcEnv mod 
 >           return Nothing
 >    | untypedAbstract opts
->      = do writeUntypedAbs Nothing fname tyEnv tcEnv mod
+>      = do writeUntypedAbs sub Nothing fname tyEnv tcEnv mod
 >           return Nothing
 >    | otherwise
 >      = internalError "@Modules.genAbstract: illegal option"
