diff --git a/Changelog b/Changelog
--- a/Changelog
+++ b/Changelog
@@ -1,6 +1,12 @@
+Changed in version 0.7.4.0:
+   * Properly process Unicode key events on Windows.
+   * Add an instance MonadExcept IdentityT.
+   * Remove custom Setup logic to support Cabal 2.0.
+
 Changed in version 0.7.3.1:
    * Properly disable echoing in getPassword when running in MinTTY.
    * Use `cast` from Data.Typeable instead of Data.Dynamic.
+
 Changed in version 0.7.3.0:
    * Require ghc version of at least 7.4.1, and clean up obsolete code
    * Add thread-safe (in terminal-style interaction) external print function
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,30 +1,2 @@
-import Distribution.System
-import Distribution.PackageDescription
 import Distribution.Simple
-import Distribution.Simple.Setup
-
-import Control.Monad(when)
-
-main :: IO ()
-main = defaultMainWithHooks myHooks
-
-myHooks :: UserHooks
-myHooks
-    | buildOS == Windows    = simpleUserHooks
-    | otherwise = simpleUserHooks {
-            confHook = \genericDescript flags -> do
-                        warnIfNotTerminfo flags
-                        confHook simpleUserHooks genericDescript flags
-            }
-
-warnIfNotTerminfo flags = when (not (hasFlagSet flags (FlagName "terminfo")))
-    $ mapM_ putStrLn
-    [ "*** Warning: running on POSIX but not building the terminfo backend. ***"
-    , "You may need to install the terminfo package manually, e.g. with"
-    , "\"cabal install terminfo\"; or, use \"-fterminfo\" when configuring or"
-    , "installing this package."
-    ,""
-    ]
-
-hasFlagSet :: ConfigFlags -> FlagName -> Bool
-hasFlagSet cflags flag = Just True == lookup flag (configConfigurationsFlags cflags)
+main = defaultMain
diff --git a/System/Console/Haskeline/Backend/Win32.hsc b/System/Console/Haskeline/Backend/Win32.hsc
--- a/System/Console/Haskeline/Backend/Win32.hsc
+++ b/System/Console/Haskeline/Backend/Win32.hsc
@@ -73,8 +73,12 @@
 
 
 processEvent :: InputEvent -> Maybe Event
-processEvent KeyEvent {keyDown = True, unicodeChar = c, virtualKeyCode = vc,
+processEvent KeyEvent {keyDown = kd, unicodeChar = c, virtualKeyCode = vc,
                     controlKeyState = cstate}
+    | kd || ((testMod (#const LEFT_ALT_PRESSED) || vc == (#const VK_MENU))
+             && c /= '\NUL')
+      -- Make sure not to ignore Unicode key events! The Unicode character might
+      -- only be emitted on a keyup event. See also GH issue #54.
     = fmap (\e -> KeyInput [Key modifier' e]) $ keyFromCode vc `mplus` simpleKeyChar
   where
     simpleKeyChar = guard (c /= '\NUL') >> return (KeyChar c)
@@ -226,7 +230,8 @@
 foreign import WINDOWS_CCONV "windows.h MessageBeep" c_messageBeep :: UINT -> IO Bool
 
 messageBeep :: IO ()
-messageBeep = c_messageBeep (-1) >> return ()-- intentionally ignore failures.
+messageBeep = c_messageBeep simpleBeep >> return ()-- intentionally ignore failures.
+  where simpleBeep = 0xffffffff
 
 
 ----------
diff --git a/System/Console/Haskeline/MonadException.hs b/System/Console/Haskeline/MonadException.hs
--- a/System/Console/Haskeline/MonadException.hs
+++ b/System/Console/Haskeline/MonadException.hs
@@ -33,6 +33,7 @@
 #endif
 import Control.Monad(liftM, join)
 import Control.Monad.IO.Class
+import Control.Monad.Trans.Identity
 import Control.Monad.Trans.Reader
 import Control.Monad.Trans.State.Strict
 import Control.Monad.Trans.Error
@@ -179,4 +180,4 @@
                                     . run . (\m -> runRWST m r s))
                     in fmap (\m -> runRWST m r s) $ f run'
 
-
+deriving instance MonadException m => MonadException (IdentityT m)
diff --git a/haskeline.cabal b/haskeline.cabal
--- a/haskeline.cabal
+++ b/haskeline.cabal
@@ -1,6 +1,6 @@
 Name:           haskeline
 Cabal-Version:  >=1.10
-Version:        0.7.3.1
+Version:        0.7.4.0
 Category:       User Interfaces
 License:        BSD3
 License-File:   LICENSE
@@ -19,7 +19,7 @@
 Homepage:       http://trac.haskell.org/haskeline
 Bug-Reports:    https://github.com/judah/haskeline/issues
 Stability:      Stable
-Build-Type:     Custom
+Build-Type:     Simple
 extra-source-files: examples/Test.hs Changelog includes/*.h
 
 source-repository head
@@ -37,6 +37,7 @@
 flag terminfo
     Description: Use the terminfo package for POSIX consoles.
     Default: True
+    Manual: True
 
 Library
     -- We require ghc>=7.4.1 (base>=4.5) to use the base library encodings, even
@@ -45,13 +46,14 @@
     Build-depends: base >=4.5 && < 4.11, containers>=0.4 && < 0.6,
                    directory>=1.1 && < 1.4, bytestring>=0.9 && < 0.11,
                    filepath >= 1.2 && < 1.5, transformers >= 0.2 && < 0.6,
-                   process >= 1.0 && < 1.5
+                   process >= 1.0 && < 1.7
     Default-Language: Haskell98
     Default-Extensions:
                 ForeignFunctionInterface, Rank2Types, FlexibleInstances,
                 TypeSynonymInstances
                 FlexibleContexts, ExistentialQuantification
                 ScopedTypeVariables, GeneralizedNewtypeDeriving
+                StandaloneDeriving
                 MultiParamTypeClasses, OverlappingInstances
                 UndecidableInstances
                 ScopedTypeVariables, CPP, DeriveDataTypeable,
