diff --git a/Win32-services-wrapper.cabal b/Win32-services-wrapper.cabal
--- a/Win32-services-wrapper.cabal
+++ b/Win32-services-wrapper.cabal
@@ -1,5 +1,5 @@
 name:                Win32-services-wrapper
-version:             0.1.2.0
+version:             0.1.3.0
 synopsis:            Wrapper code for making a Win32 service
 description:         Builds on the Win32-services package, providing a simple
                      wrapper for turning a long-running process into a
@@ -18,20 +18,22 @@
   location: http://hub.darcs.net/ganesh/Win32-services-wrapper
 
 flag warn-as-error
+  manual:      True
   default:     False
   description: Build with warnings-as-errors
 
 library
-  build-tools:         ghc >= 7.4 && < 7.10
+  build-tools:         ghc >= 7.4 && < 7.12
   hs-source-dirs:      src
   exposed-modules:     System.Win32.SystemServices.Wrapper
   other-modules:
   build-depends:       
-                       Win32-services >= 0.2.1 && < 0.3,
+                       Win32-services >= 0.3 && < 0.4,
                        Win32 >= 2.2 && < 2.4,
-                       filepath ==1.3.*,
+                       Win32-errors >= 0.2 && < 0.3,
+                       filepath > 1.3 && < 1.5,
                        directory >= 1.1 && < 1.3,
-                       base >= 4.5 && < 4.8
+                       base >= 4.5 && < 4.9
 
   if flag(warn-as-error)
     ghc-options:      -Werror
diff --git a/src/System/Win32/SystemServices/Wrapper.hs b/src/System/Win32/SystemServices/Wrapper.hs
--- a/src/System/Win32/SystemServices/Wrapper.hs
+++ b/src/System/Win32/SystemServices/Wrapper.hs
@@ -1,11 +1,16 @@
-{-# LANGUAGE ForeignFunctionInterface, ScopedTypeVariables
+{-# LANGUAGE CPP, ForeignFunctionInterface, ScopedTypeVariables
  #-}
 module System.Win32.SystemServices.Wrapper
     ( Service(..)
     , defineService
     ) where
 
+-- The 'catch' function from Control.Exception was included in the Prelude
+-- until version 4.6
+#if MIN_VERSION_base(4,6,0)
+#else
 import Prelude hiding ( catch )
+#endif
 
 import Control.Concurrent ( MVar, newEmptyMVar, putMVar, takeMVar )
 import Control.Exception ( catch, throwIO, SomeException )
@@ -16,12 +21,12 @@
     , openFile, IOMode(WriteMode)
     , Handle, hPutStrLn
     )
-import System.Win32.SystemServices.Services
-    ( SERVICE_STATUS(..), SERVICE_STATE(..)
-    , SERVICE_CONTROL(..), SERVICE_ACCEPT(..), SERVICE_TYPE(..)
+import System.Win32.Services
+    ( ServiceStatus(..), ServiceState(..)
+    , ServiceControl(..), ServiceAccept(..), ServiceType(..)
     , setServiceStatus, startServiceCtrlDispatcher
-    , nO_ERROR
     )
+import System.Win32.Error ( ErrCode(..))
 import System.Win32.Types ( HANDLE, DWORD )
 
 data Service serviceState =
@@ -31,20 +36,20 @@
         , serviceStop :: serviceState -> IO ()
     }
 
-handler :: MVar () -> HANDLE -> SERVICE_CONTROL -> IO Bool
-handler stopSignal hStatus STOP = do
+handler :: MVar () -> HANDLE -> ServiceControl -> IO Bool
+handler stopSignal hStatus Stop = do
     setServiceStatus hStatus stopPending
     putMVar stopSignal ()
     return True
-handler _ _ INTERROGATE = return True
+handler _ _ Interrogate = return True
 handler _ _ _           = return False
 
-running, stopPending, stopped :: SERVICE_STATUS
-running = SERVICE_STATUS WIN32_OWN_PROCESS RUNNING [ACCEPT_STOP] nO_ERROR 0 0 0
-stopPending = running { currentState = STOP_PENDING
+running, stopPending, stopped :: ServiceStatus
+running = ServiceStatus Win32OwnProcess Running [AcceptStop] Success 0 0 0
+stopPending = running { currentState = StopPending
                       , controlsAccepted = []
                       , waitHint = 3000 }
-stopped = running { currentState = STOPPED
+stopped = running { currentState = Stopped
                   , controlsAccepted = []
                   , waitHint = 3000 }
 
