diff --git a/Atom.hs b/Atom.hs
--- a/Atom.hs
+++ b/Atom.hs
@@ -16,7 +16,7 @@
 import Data.Generics
 import Data.Monoid
 import Foreign
-import List(sort)
+import Data.List(sort)
 import qualified Data.HashTable as HT
 import Data.Binary
 
diff --git a/Boolean/Algebra.hs b/Boolean/Algebra.hs
--- a/Boolean/Algebra.hs
+++ b/Boolean/Algebra.hs
@@ -19,7 +19,7 @@
 ) where
 
 import Prelude hiding((&&),(||),not,and,or,any,all)
-import Monad
+import Control.Monad
 
 infixr 3 &&
 infixr 2 ||
diff --git a/Boolean/Boolean.hs b/Boolean/Boolean.hs
--- a/Boolean/Boolean.hs
+++ b/Boolean/Boolean.hs
@@ -18,8 +18,8 @@
 import Boolean.Algebra
 import Prelude hiding((&&),(||),not,and,or,any,all)
 import qualified Prelude
-import Monad
-import List hiding(and,or)
+import Control.Monad
+import Data.List hiding(and,or)
 import Text.ParserCombinators.Parsec
 
 
diff --git a/CacheIO.hs b/CacheIO.hs
--- a/CacheIO.hs
+++ b/CacheIO.hs
@@ -25,7 +25,7 @@
 
 import Control.Monad.Trans
 import Control.Concurrent
-import Monad
+import Control.Monad
 import System.Mem.StableName
 import Control.Exception
 import System.IO.Unsafe(unsafePerformIO)
diff --git a/Charset.hs b/Charset.hs
--- a/Charset.hs
+++ b/Charset.hs
@@ -1,11 +1,11 @@
 module Charset(stringToBytes, bytesToString, charsetSetup, csHPutStr) where
 
 import qualified Codec.Binary.UTF8.String as U
-import System
-import Char
-import Word(Word8)
+import System.Environment
+import Data.Char
+import Data.Word(Word8)
 import System.IO.Unsafe
-import List
+import Data.List
 import EIO
 import ErrorLog
 import Data.IORef
diff --git a/ConfigFile.hs b/ConfigFile.hs
--- a/ConfigFile.hs
+++ b/ConfigFile.hs
@@ -19,8 +19,8 @@
 
     ) where
 
-import Char
-import System
+import Data.Char
+import System.Environment
 import System.IO.Unsafe
 
 import CacheIO
diff --git a/Curses.hsc b/Curses.hsc
--- a/Curses.hsc
+++ b/Curses.hsc
@@ -114,21 +114,22 @@
     where
 
 import Prelude hiding (pi)
-import Monad
-import Char           (chr, ord, isPrint, isSpace, toLower)
-import Ix             (Ix)
+import Control.Monad
+import Data.Char           (chr, ord, isPrint, isSpace, toLower)
+import Data.Ix             (Ix)
 
 import Control.Concurrent
-import Foreign
+import Foreign hiding (void, unsafePerformIO)
 import Foreign.C
+import System.IO.Unsafe
 
 import Control.Exception hiding(block)
 
 import GenUtil(foldl')
 import System.Posix.Signals
-import List
+import Data.List
 import Doc.Chars hiding(elem)
-import Maybe
+import Data.Maybe
 import Data.IORef
 
 
@@ -139,7 +140,7 @@
 
 fi = fromIntegral
 
-throwIfErr :: Num a => String -> IO a -> IO a
+throwIfErr :: (Num a, Eq a, Show a) => String -> IO a -> IO a
 --throwIfErr name act = do
 --    res <- act
 --    if res == (#const ERR)
@@ -147,7 +148,7 @@
 --        else return res
 throwIfErr s = throwIf (== (#const ERR)) (\a -> "Curses[" ++ show a ++ "]:"  ++ s)
 
-throwIfErr_ :: Num a => String -> IO a -> IO ()
+throwIfErr_ :: (Num a, Eq a, Show a) => String -> IO a -> IO ()
 throwIfErr_ name act = void $ throwIfErr name act
 
 ------------------------------------------------------------------------
diff --git a/Doc/Chars.hs b/Doc/Chars.hs
--- a/Doc/Chars.hs
+++ b/Doc/Chars.hs
@@ -2,7 +2,7 @@
 
 module Doc.Chars where
 
-import Char(chr)
+import Data.Char(chr)
 import Doc.DocLike
 
 ulCorner, llCorner, urCorner, lrCorner, rTee, lTee, bTee, tTee, hLine,
diff --git a/Doc/DocLike.hs b/Doc/DocLike.hs
--- a/Doc/DocLike.hs
+++ b/Doc/DocLike.hs
@@ -1,9 +1,9 @@
 {-# LANGUAGE UndecidableInstances, OverlappingInstances, TypeSynonymInstances, FlexibleInstances #-}
 module Doc.DocLike where
 
-import Data.Monoid
+import Data.Monoid hiding ((<>))
 import Control.Monad.Reader()
-import List
+import Data.List
 import qualified Text.PrettyPrint.HughesPJ as P
 
 infixr 5 <$> -- ,<//>,<$>,<$$>
@@ -152,11 +152,6 @@
     empty = P.empty
     text = P.text
     char = P.char
-
-instance Monoid P.Doc where
-    mappend = (P.<>)
-    mempty = P.empty
-    mconcat = P.hcat
 
 instance DocLike P.Doc where
     (<>) = (P.<>)
diff --git a/EIO.hs b/EIO.hs
--- a/EIO.hs
+++ b/EIO.hs
@@ -1,15 +1,15 @@
 module EIO(readRawFile,writeRawFile,  putRaw, readRaw,atomicWriteFile, getUniqueName, atomicWrite, getTempFileName, memoIO, withTempfile, hPutRawContents) where
 
-import Char
+import Data.Char
 import Control.Monad
 import Control.Exception as E
 import Data.Array.IO
 import Data.Unique
-import Directory(removeFile)
+import System.Directory(removeFile)
 import System.IO.Unsafe
 import Data.IORef
 import System.Posix
-import Word
+import Data.Word
 import System.IO
 
 bufSize = 4096
diff --git a/ErrorLog.hs b/ErrorLog.hs
--- a/ErrorLog.hs
+++ b/ErrorLog.hs
@@ -48,13 +48,13 @@
     indent
     ) where
 
-import Exception as E
-import IO hiding(bracket, try, catch)
+import Control.OldException as E
+import System.IO
 import System.IO.Unsafe
-import Monad
+import Control.Monad
 import Control.Concurrent
-import Time(getClockTime)
-import List(delete)
+import System.Time(getClockTime)
+import Data.List(delete)
 
 ------------
 -- Error log
diff --git a/Filter.hs b/Filter.hs
--- a/Filter.hs
+++ b/Filter.hs
@@ -10,7 +10,7 @@
 import Atom
 import Boolean.Algebra
 import Boolean.Boolean
-import Char
+import Data.Char
 import PackedString
 import Prelude hiding((&&),(||),not,and,or,any,all)
 import Gale.Puff
diff --git a/Format.hs b/Format.hs
--- a/Format.hs
+++ b/Format.hs
@@ -62,8 +62,8 @@
     testFormat
     ) where
 
-import Char(isDigit,ord)
-import List(intersperse)
+import Data.Char(isDigit,ord)
+import Data.List(intersperse)
 
 -- | the type of patterns
 data Pattern = Pattern {
@@ -201,7 +201,7 @@
 
 integralChars = "xboiu"
 
-formatIntegral :: Integral n => n -> Pattern -> String
+formatIntegral :: (Integral n, Show n) => n -> Pattern -> String
 formatIntegral v p@(Pattern {patternChar = 'x'}) = integralFmt p v 16
 formatIntegral v p@(Pattern {patternChar = 'b'}) = integralFmt p v 2
 formatIntegral v p@(Pattern {patternChar = 'o'}) = integralFmt p v 8
diff --git a/Gale/Gale.hs b/Gale/Gale.hs
--- a/Gale/Gale.hs
+++ b/Gale/Gale.hs
@@ -16,10 +16,10 @@
     getGaleDir) where
 
 
-import Char(chr,ord)
-import IO hiding(bracket, bracket_)
-import List
-import Maybe
+import Data.Char(chr,ord)
+import System.IO
+import Data.List
+import Data.Maybe
 import System.Time
 
 import Control.Concurrent
diff --git a/Gale/KeyCache.hs b/Gale/KeyCache.hs
--- a/Gale/KeyCache.hs
+++ b/Gale/KeyCache.hs
@@ -17,21 +17,21 @@
     ) where
 
 import Atom
-import Bits
-import Char
+import Data.Bits
+import Data.Char
 import Control.Concurrent
-import Directory
+import System.Directory
 import EIO
 import ErrorLog
 import Gale.Proto(decodeTime, decodeFrags, xdrReadUInt, getGaleDir, decodeFragments)
 import GenUtil
-import List
-import Monad
+import Data.List
+import Control.Monad
 import PackedString
 import Gale.Puff
 import RSA
 import System.Mem.Weak
-import Word
+import Data.Word
 import qualified Data.Map as Map
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Lazy as LBS
diff --git a/Gale/Proto.hs b/Gale/Proto.hs
--- a/Gale/Proto.hs
+++ b/Gale/Proto.hs
@@ -1,18 +1,18 @@
 module Gale.Proto where
 
 import Atom
-import Bits
-import Char
+import Data.Bits
+import Data.Char
 import GenUtil
 import PackedString
 import Gale.Puff
 import SimpleParser
-import System
+import System.Environment
 import System.Time
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Lazy as LBS
 import Data.Binary.Get
-import Word
+import Data.Word
 
 
 pubkey_magic3 :: [Word8]
diff --git a/Gale/Puff.hs b/Gale/Puff.hs
--- a/Gale/Puff.hs
+++ b/Gale/Puff.hs
@@ -50,9 +50,9 @@
 import EIO
 import ErrorLog
 import GenUtil
-import Int(Int32)
-import List
-import Maybe(isJust)
+import Data.Int(Int32)
+import Data.List
+import Data.Maybe(isJust)
 import PackedString
 import System.IO
 import System.Time
diff --git a/GenUtil.hs b/GenUtil.hs
--- a/GenUtil.hs
+++ b/GenUtil.hs
@@ -115,14 +115,16 @@
     UniqueProducer(..)
     ) where
 
-import Char(isAlphaNum, isSpace, toLower, ord, chr)
-import List
-import Monad
-import qualified IO
-import qualified System
-import Random(StdGen, newStdGen, Random(randomR))
-import Time
-import CPUTime
+import Data.Char(isAlphaNum, isSpace, toLower, ord, chr)
+import Data.List
+import Control.Monad
+import qualified System.IO as IO
+import qualified System.IO.Error as IO
+import qualified System.Exit as System 
+import qualified System.Environment as System 
+import System.Random(StdGen, newStdGen, Random(randomR))
+import System.Time
+import System.CPUTime
 
 {-# SPECIALIZE snub :: [String] -> [String] #-}
 {-# SPECIALIZE snub :: [Int] -> [Int] #-}
@@ -341,19 +343,6 @@
 repeatM_ :: Monad m => m a -> m ()
 repeatM_ x = sequence_ $ repeat x
 
-{-# RULES "replicateM/0" replicateM 0 = const (return []) #-}
-{-# RULES "replicateM_/0" replicateM_ 0 = const (return ()) #-}
-
-{-# INLINE replicateM #-}
-{-# SPECIALIZE replicateM :: Int -> IO a -> IO [a] #-}
-replicateM :: Monad m => Int -> m a -> m [a]
-replicateM n x = sequence $ replicate n x
-
-{-# INLINE replicateM_ #-}
-{-# SPECIALIZE replicateM_ :: Int -> IO a -> IO () #-}
-replicateM_ :: Monad m => Int -> m a -> m ()
-replicateM_ n x = sequence_ $ replicate n x
-
 {-# SPECIALIZE maybeToMonad :: Maybe a -> IO a #-}
 -- | convert a maybe to an arbitrary failable monad
 maybeToMonad :: Monad m => Maybe a -> m a
@@ -594,12 +583,6 @@
     f (x,y) = x ++ replicate (bs - length x) ' ' ++ replicate 4 ' ' ++ y
     bs = maximum (map (length . fst) ps)
 
-{-# INLINE foldl' #-}
--- | strict version of 'foldl'
-foldl' :: (a -> b -> a) -> a -> [b] -> a
-foldl' _ a []     = a
-foldl' f a (x:xs) = (foldl' f $! f a x) xs
-
 -- | count elements of list that have a given property
 count :: (a -> Bool) -> [a] -> Int
 count f xs = g 0 xs where
@@ -658,7 +641,7 @@
 _ `overlaps` _ = True
 
 -- | translate a number of seconds to a string representing the duration expressed.
-showDuration :: Integral a => a -> String
+showDuration :: (Integral a, Show a) => a -> String
 showDuration x = st "d" dayI ++ st "h" hourI ++ st "m" minI ++ show secI ++ "s" where
         (dayI, hourI) = divMod hourI' 24
         (hourI', minI) = divMod minI' 60
diff --git a/GinsuConfig.hs b/GinsuConfig.hs
--- a/GinsuConfig.hs
+++ b/GinsuConfig.hs
@@ -13,14 +13,14 @@
 import ConfigFile
 import Exception
 import Data.Monoid
-import Directory
+import System.Directory
 import ErrorLog
 import ExampleConf
 import Gale.Gale
 import Gale.Puff
 import GenUtil
-import Monad
-import System
+import Control.Monad
+import System.Environment
 import System.Posix as Posix hiding (getEnv)
 
 checkConfigIsGood = do
diff --git a/KeyName.hs b/KeyName.hs
--- a/KeyName.hs
+++ b/KeyName.hs
@@ -8,11 +8,11 @@
     getKeyHelpTable
     ) where
 
-import Char
+import Data.Char
 import ConfigFile
 import GenUtil
 import KeyHelpTable
-import List
+import Data.List
 import Screen(Key(..))
 
 stringToKeys :: String -> [Key]
diff --git a/Main.hs b/Main.hs
--- a/Main.hs
+++ b/Main.hs
@@ -1,13 +1,13 @@
 {-# LANGUAGE OverlappingInstances, PatternGuards #-}
 module Main(main) where
 
-import Char
-import Directory
-import List hiding(or,and,any,all)
-import Maybe
+import Data.Char
+import System.Directory
+import Data.List hiding(or,and,any,all)
+import Data.Maybe
 import System.Cmd
 import System.Time
-import Random
+import System.Random
 
 import Control.Concurrent
 import Exception as Control.Exception
diff --git a/Options.hs b/Options.hs
--- a/Options.hs
+++ b/Options.hs
@@ -11,7 +11,7 @@
 import Help
 import Gale.KeyCache
 import KeyName
-import System
+import System.Environment
 import System.Console.GetOpt
 import Version
 
diff --git a/RSA.hsc b/RSA.hsc
--- a/RSA.hsc
+++ b/RSA.hsc
@@ -12,7 +12,7 @@
 
 #include "my_rsa.h"
 
-import CForeign
+import Foreign.C
 import Control.Exception as E
 import ErrorLog
 import Foreign
diff --git a/Regex.hs b/Regex.hs
--- a/Regex.hs
+++ b/Regex.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE PatternGuards #-}
 module Regex where
 
-import Char
+import Data.Char
 import ConfigFile
 import Exception
 import GenUtil
-import Maybe
-import Monad
+import Data.Maybe
+import Control.Monad
 import PackedString
 import System.IO.Unsafe
 import Text.Regex.Posix
diff --git a/Screen.hs b/Screen.hs
--- a/Screen.hs
+++ b/Screen.hs
@@ -31,7 +31,7 @@
 import Control.Concurrent
 import Exception as E
 import Data.Bits
-import Monad
+import Control.Monad
 
 import CacheIO
 import Curses
diff --git a/SimpleParser.hs b/SimpleParser.hs
--- a/SimpleParser.hs
+++ b/SimpleParser.hs
@@ -21,9 +21,9 @@
 
 module SimpleParser where
 
-import Char
-import Monad
-import List
+import Data.Char
+import Control.Monad
+import Data.List
 
 infixr 1 <|>
 
diff --git a/Status.hs b/Status.hs
--- a/Status.hs
+++ b/Status.hs
@@ -13,13 +13,13 @@
     ) where
 
 
-import Char(chr)
+import Data.Char(chr)
 import CircularBuffer as CB
 import Data.IORef
 import Data.Tree
 import Doc.Chars
 import GenUtil
-import List(intersperse,groupBy)
+import Data.List(intersperse,groupBy)
 import qualified Data.Map as Map
 import System.IO.Unsafe
 
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -1,11 +1,9 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for ginsu 0.8.0.
+# Generated by GNU Autoconf 2.69 for ginsu 0.8.0.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -134,6 +132,31 @@
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -167,7 +190,8 @@
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -212,21 +236,25 @@
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -328,6 +356,14 @@
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -449,6 +485,10 @@
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -483,16 +523,16 @@
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -504,28 +544,8 @@
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -1120,8 +1140,6 @@
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1355,9 +1373,9 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 ginsu configure 0.8.0
-generated by GNU Autoconf 2.68
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1433,7 +1451,7 @@
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1720,7 +1738,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by ginsu $as_me 0.8.0, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2104,7 +2122,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2144,7 +2162,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2197,7 +2215,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2238,7 +2256,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -2296,7 +2314,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2340,7 +2358,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2786,8 +2804,7 @@
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3155,7 +3172,7 @@
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -3221,7 +3238,7 @@
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -3843,16 +3860,16 @@
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -3912,29 +3929,17 @@
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
 
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 
@@ -3955,7 +3960,7 @@
 # values after options handling.
 ac_log="
 This file was extended by ginsu $as_me 0.8.0, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -4017,10 +4022,10 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 ginsu config.status 0.8.0
-configured by $0, generated by GNU Autoconf 2.68,
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -4108,7 +4113,7 @@
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
diff --git a/ginsu.cabal b/ginsu.cabal
--- a/ginsu.cabal
+++ b/ginsu.cabal
@@ -1,5 +1,6 @@
+-- vim:et
 Name:		ginsu
-Version:	0.8.0.1
+Version:	0.8.0.2
 Copyright:	2002-2009 John Meacham <john@repetae.net>
 		2011 Dylan Simon <dylan@dylex.net>
 Author:		John Meacham <john@foo.net>
@@ -13,7 +14,7 @@
 Category:	Network,Console
 Build-Type:	Custom
 Cabal-Version:	>= 1.6
-tested-with:    GHC == 6.12.3, GHC == 7.0.2
+tested-with:    GHC == 6.12.3, GHC == 7.0.2, GHC == 7.4.1
 extra-source-files: 
                 configure
                 ginsu.buildinfo.in
@@ -33,7 +34,7 @@
 
 Source-Repository head
     Type:	darcs
-    Location:	https://dylex.net:9947/src/ginsu
+    Location:	http://dylex.net/src/ginsu
 
 Executable ginsu
     Main-is:	Main.hs
@@ -83,14 +84,15 @@
                 bytestring,
                 old-locale,
                 containers,
-                haskell98,
+                random,
+                directory,
                 pretty,
                 mtl,
                 array,
                 unix,
                 regex-posix,
                 utf8-string >= 0.3.1,
-                ghc-binary,
+                binary,
                 old-time,
                 syb,
                 network,
