diff --git a/INSTALL b/INSTALL
index 960abcaf394504e25c9b2253654a641aaa25ca16..a3bc7a73cd9ee0b71a1da30d2cc7c0af91b9dede 100644
--- a/INSTALL
+++ b/INSTALL
@@ -63,7 +63,7 @@ on bigger deployments (they give you automatic instance placement,
 cluster balancing, etc.), then you need to have a Haskell compiler
 installed. More specifically:
 
-- `GHC <http://www.haskell.org/ghc/>`_ version 6.10 or higher
+- `GHC <http://www.haskell.org/ghc/>`_ version 6.12 or higher
 - or even better, `The Haskell Platform
   <http://hackage.haskell.org/platform/>`_ which gives you a simple way
   to bootstrap Haskell
diff --git a/htools/Ganeti/HTools/CLI.hs b/htools/Ganeti/HTools/CLI.hs
index fca3f47d041797da5d52c4a2231a532f81071113..d8d310a5ebe4c755921133c885cde6418c6fdad6 100644
--- a/htools/Ganeti/HTools/CLI.hs
+++ b/htools/Ganeti/HTools/CLI.hs
@@ -83,7 +83,7 @@ import qualified Data.Version
 import System.Console.GetOpt
 import System.IO
 import System.Info
-import System
+import System.Exit
 import Text.Printf (printf, hPrintf)
 
 import qualified Ganeti.HTools.Version as Version(version)
diff --git a/htools/Ganeti/HTools/ExtLoader.hs b/htools/Ganeti/HTools/ExtLoader.hs
index 669ef56e2f2ebccb1c98728514721cb1a4c8c9ee..210c888dc2a04a2137ddc58093d7f55ef43f9446 100644
--- a/htools/Ganeti/HTools/ExtLoader.hs
+++ b/htools/Ganeti/HTools/ExtLoader.hs
@@ -37,7 +37,7 @@ import Control.Monad
 import Data.Maybe (isJust, fromJust)
 import System.FilePath
 import System.IO
-import System
+import System.Exit
 import Text.Printf (hPrintf)
 
 import qualified Ganeti.HTools.Luxi as Luxi
diff --git a/htools/Ganeti/HTools/IAlloc.hs b/htools/Ganeti/HTools/IAlloc.hs
index b073cf44300e1c1659324c8b6ddaf8325061b8b1..faefa526c6655ae5d9475f333a74bcafd335c7c4 100644
--- a/htools/Ganeti/HTools/IAlloc.hs
+++ b/htools/Ganeti/HTools/IAlloc.hs
@@ -35,7 +35,7 @@ import Data.List
 import Control.Monad
 import Text.JSON (JSObject, JSValue(JSArray),
                   makeObj, encodeStrict, decodeStrict, fromJSObject, showJSON)
-import System (exitWith, ExitCode(..))
+import System.Exit
 import System.IO
 
 import qualified Ganeti.HTools.Cluster as Cluster
diff --git a/htools/Ganeti/HTools/Program/Hail.hs b/htools/Ganeti/HTools/Program/Hail.hs
index 77b6d1477e1e145046d9c99c7930816b53cecb82..143d79e0d836c19895688eb3d599a1499af94950 100644
--- a/htools/Ganeti/HTools/Program/Hail.hs
+++ b/htools/Ganeti/HTools/Program/Hail.hs
@@ -26,8 +26,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 module Ganeti.HTools.Program.Hail (main) where
 
 import Control.Monad
+import System.Environment (getArgs)
 import System.IO
-import qualified System
 
 import qualified Ganeti.HTools.Cluster as Cluster
 
@@ -51,7 +51,7 @@ options =
 -- | Main function.
 main :: IO ()
 main = do
-  cmd_args <- System.getArgs
+  cmd_args <- getArgs
   (opts, args) <- parseOpts cmd_args "hail" options
 
   let shownodes = optShowNodes opts
diff --git a/htools/Ganeti/HTools/Program/Hbal.hs b/htools/Ganeti/HTools/Program/Hbal.hs
index 9dc5ad187324b5ae497718fc30edbd6abd93b51a..c2cdd1a5f0fe4a0a23ca9a9950f5c08c6e6ae4c5 100644
--- a/htools/Ganeti/HTools/Program/Hbal.hs
+++ b/htools/Ganeti/HTools/Program/Hbal.hs
@@ -31,11 +31,11 @@ import Control.Monad
 import Data.List
 import Data.Maybe (isJust, isNothing, fromJust)
 import Data.IORef
-import System (exitWith, ExitCode(..))
+import System.Environment (getArgs)
+import System.Exit
 import System.IO
 import System.Posix.Process
 import System.Posix.Signals
-import qualified System
 
 import Text.Printf (printf, hPrintf)
 
@@ -340,7 +340,7 @@ checkNeedRebalance opts ini_cv = do
 -- | Main function.
 main :: IO ()
 main = do
-  cmd_args <- System.getArgs
+  cmd_args <- getArgs
   (opts, args) <- parseOpts cmd_args "hbal" options
 
   unless (null args) $ do
diff --git a/htools/Ganeti/HTools/Program/Hscan.hs b/htools/Ganeti/HTools/Program/Hscan.hs
index 62a51d8dd120186a26a02709480e4e7108813bf8..acdf7e82af67783d36a7d1fdcac796992d404aea 100644
--- a/htools/Ganeti/HTools/Program/Hscan.hs
+++ b/htools/Ganeti/HTools/Program/Hscan.hs
@@ -27,10 +27,10 @@ module Ganeti.HTools.Program.Hscan (main) where
 
 import Control.Monad
 import Data.Maybe (isJust, fromJust, fromMaybe)
-import System (exitWith, ExitCode(..))
+import System.Environment (getArgs)
+import System.Exit
 import System.IO
 import System.FilePath
-import qualified System
 
 import Text.Printf (printf)
 
@@ -127,7 +127,7 @@ writeDataInner nlen name opts cdata fixdata = do
 -- | Main function.
 main :: IO ()
 main = do
-  cmd_args <- System.getArgs
+  cmd_args <- getArgs
   (opts, clusters) <- parseOpts cmd_args "hscan" options
   let local = "LOCAL"
 
diff --git a/htools/Ganeti/HTools/Program/Hspace.hs b/htools/Ganeti/HTools/Program/Hspace.hs
index 43ec2d1e4ac1a87dece69368d3305bfab8ba0f1f..61f736c318034e125f9821cfce66484ed7323e7f 100644
--- a/htools/Ganeti/HTools/Program/Hspace.hs
+++ b/htools/Ganeti/HTools/Program/Hspace.hs
@@ -30,9 +30,9 @@ import Data.Char (toUpper, isAlphaNum, toLower)
 import Data.Function (on)
 import Data.List
 import Data.Ord (comparing)
-import System (exitWith, ExitCode(..))
+import System.Exit
 import System.IO
-import qualified System
+import System.Environment (getArgs)
 
 import Text.Printf (printf, hPrintf)
 
@@ -383,7 +383,7 @@ runAllocation cdata stop_allocation actual_result spec mode opts = do
 -- | Main function.
 main :: IO ()
 main = do
-  cmd_args <- System.getArgs
+  cmd_args <- getArgs
   (opts, args) <- parseOpts cmd_args "hspace" options
 
   unless (null args) $ do
diff --git a/htools/htools.hs b/htools/htools.hs
index 382a2fd9f8112b50dedc6d78b485b8014f931947..cf2e4a264c49055dbb3e8f895ff927d5af901f09 100644
--- a/htools/htools.hs
+++ b/htools/htools.hs
@@ -26,7 +26,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 module Main (main) where
 
 import Data.Char (toLower)
-import System
+import System.Environment
+import System.Exit
 import System.IO
 
 import Ganeti.HTools.Utils
diff --git a/htools/test.hs b/htools/test.hs
index 0e51db5f1dfbc473bb93f53971eafdf5713aefb8..7af9e8fbbfe8e6d5671816cf15b295275546afa8 100644
--- a/htools/test.hs
+++ b/htools/test.hs
@@ -28,11 +28,11 @@ module Main(main) where
 import Data.Char
 import Data.IORef
 import Data.List
-import Test.QuickCheck
 import System.Console.GetOpt ()
-import System.IO
+import System.Environment (getArgs)
 import System.Exit
-import System (getArgs)
+import System.IO
+import Test.QuickCheck
 import Text.Printf
 
 import Ganeti.HTools.QC
@@ -147,7 +147,7 @@ main :: IO ()
 main = do
   errs <- newIORef 0
   let wrap = map (wrapTest errs)
-  cmd_args <- System.getArgs
+  cmd_args <- getArgs
   (opts, args) <- parseOpts cmd_args "test" options
   tests <- (if null args
               then return allTests