diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
 # Changelog for the [`clash-ghc`](http://hackage.haskell.org/package/clash-ghc) package
 
+## 0.6.10
+* New features:
+  * hdl files can be written to a directory (set by the `-clash-hdldir` flag) other than the current working directory [#125](https://github.com/clash-lang/clash-compiler/issues/125).
+    Also respects the `-outputdir` directory, _unless_:
+      * `-clash-hdldir` is set to a different directory.
+      * `-hidir`, `-stubdir`, and `-dumbdir` are not the same directory as `-odir`
+* Fixes bugs:
+  * `caseCon` transformation does not work on non-exhaustive case-expressions [#123](https://github.com/clash-lang/clash-compiler/issues/123)
+  * VHDL: insufficient type-qualifiers for concatenation operator [#121](https://github.com/clash-lang/clash-compiler/issues/121)
+  * Primitive reductions don't look through `Signal` [#126](https://github.com/clash-lang/clash-compiler/issues/126)
+
 ## 0.6.9 *January 29th 2016*
 * New features:
   * Support for `Debug.Trace.trace`, thanks to @ggreif
diff --git a/clash-ghc.cabal b/clash-ghc.cabal
--- a/clash-ghc.cabal
+++ b/clash-ghc.cabal
@@ -1,5 +1,5 @@
 Name:                 clash-ghc
-Version:              0.6.9
+Version:              0.6.10
 Synopsis:             CAES Language for Synchronous Hardware
 Description:
   CλaSH (pronounced ‘clash’) is a functional hardware description language that
@@ -94,11 +94,11 @@
                       unbound-generics          >= 0.1 && < 0.4,
                       unordered-containers      >= 0.2.1.0,
 
-                      clash-lib                 >= 0.6.9 && < 0.7,
+                      clash-lib                 >= 0.6.10 && < 0.7,
                       clash-systemverilog       >= 0.6.5,
-                      clash-vhdl                >= 0.6.6,
+                      clash-vhdl                >= 0.6.7,
                       clash-verilog             >= 0.6.5,
-                      clash-prelude             >= 0.10.5 && < 0.11,
+                      clash-prelude             >= 0.10.6 && < 0.11,
                       ghc-typelits-extra        >= 0.1,
                       ghc-typelits-natnormalise >= 0.3
 
diff --git a/src-bin/InteractiveUI.hs b/src-bin/InteractiveUI.hs
--- a/src-bin/InteractiveUI.hs
+++ b/src-bin/InteractiveUI.hs
@@ -1578,12 +1578,21 @@
   dflags <- GHC.getSessionDynFlags
   liftIO $ do opts  <- readIORef optsRef
               let iw = opt_intWidth opts
+                  -- determine whether `-outputdir` was used
+                  outputDir = do odir <- objectDir dflags
+                                 hidir <- hiDir dflags
+                                 sdir <- stubDir dflags
+                                 ddir <- dumpDir dflags
+                                 if all (== odir) [hidir,sdir,ddir]
+                                    then Just odir
+                                    else Nothing
+                  opts' = opts {opt_hdlDir = maybe outputDir Just (opt_hdlDir opts)}
               primDir <- CLaSH.Backend.primDir (backend iw)
               primMap <- CLaSH.Primitives.Util.generatePrimMap [primDir,"."]
               forM_ srcs $ \src -> do
                 (bindingsMap,tcm,tupTcm,topEnt,testInpM,expOutM) <- generateBindings primMap src (Just dflags)
                 CLaSH.Driver.generateHDL bindingsMap (Just (backend iw)) primMap tcm
-                  tupTcm (ghcTypeToHWType iw) reduceConstant topEnt testInpM expOutM opts
+                  tupTcm (ghcTypeToHWType iw) reduceConstant topEnt testInpM expOutM opts'
 
 makeVHDL :: IORef CLaSHOpts -> [FilePath] -> InputT GHCi ()
 makeVHDL = makeHDL' (CLaSH.Backend.initBackend :: Int -> VHDLState)
diff --git a/src-bin/Main.hs b/src-bin/Main.hs
--- a/src-bin/Main.hs
+++ b/src-bin/Main.hs
@@ -124,6 +124,7 @@
                              , opt_inlineBelow = 15
                              , opt_cleanhdl    = True
                              , opt_intWidth    = WORD_SIZE_IN_BITS
+                             , opt_hdlDir      = Nothing
                              })
     (argv3, clashFlagWarnings) <- parseCLaSHFlags r argv2
 
diff --git a/src-ghc/CLaSH/GHC/CLaSHFlags.hs b/src-ghc/CLaSH/GHC/CLaSHFlags.hs
--- a/src-ghc/CLaSH/GHC/CLaSHFlags.hs
+++ b/src-ghc/CLaSH/GHC/CLaSHFlags.hs
@@ -42,6 +42,7 @@
   , defFlag "clash-debug" (SepArg (setDebugLevel r))
   , defFlag "clash-noclean" (NoArg (liftEwM (setNoClean r)))
   , defFlag "clash-intwidth" (IntSuffix (setIntWidth r))
+  , defFlag "clash-hdldir" (SepArg (setHdlDir r))
   ]
 
 setInlineLimit :: IORef CLaSHOpts
@@ -76,3 +77,8 @@
   if n == 32 || n == 64
      then liftEwM $ modifyIORef r (\c -> c {opt_intWidth = n})
      else addWarn (show n ++ " is an invalid Int/Word/Integer bit-width. Allowed widths: 32, 64.")
+
+setHdlDir :: IORef CLaSHOpts
+          -> String
+          -> EwM IO ()
+setHdlDir r s = liftEwM $ modifyIORef r (\c -> c {opt_hdlDir = Just s})
