diff --git a/Network/Wai/Handler/CGI.hs b/Network/Wai/Handler/CGI.hs
--- a/Network/Wai/Handler/CGI.hs
+++ b/Network/Wai/Handler/CGI.hs
@@ -13,7 +13,6 @@
 import Network.Wai
 import Network.Wai.Internal
 import Network.Socket (getAddrInfo, addrAddress)
-import System.Environment (getEnvironment)
 import Data.Maybe (fromMaybe)
 import Control.Exception (mask)
 import qualified Data.ByteString.Char8 as B
@@ -34,6 +33,15 @@
 import qualified Data.CaseInsensitive as CI
 import Data.Monoid (mappend)
 import Data.Conduit
+
+#if WINDOWS
+import System.Environment (getEnvironment)
+#else
+import qualified System.Posix.Env.ByteString as Env
+
+getEnvironment :: IO [(String, String)]
+getEnvironment = map (B.unpack *** B.unpack) `fmap` Env.getEnvironment
+#endif
 
 safeRead :: Read a => a -> String -> a
 safeRead d s =
diff --git a/wai-extra.cabal b/wai-extra.cabal
--- a/wai-extra.cabal
+++ b/wai-extra.cabal
@@ -1,5 +1,5 @@
 Name:                wai-extra
-Version:             2.1.0
+Version:             2.1.0.1
 Synopsis:            Provides some basic WAI handlers and middleware.
 Description:         The goal here is to provide common features without many dependencies.
 License:             MIT
@@ -46,6 +46,11 @@
                    , base64-bytestring
                    , word8
                    , lifted-base               >= 0.1.2
+
+  if os(windows)
+      cpp-options:   -DWINDOWS
+  else
+      build-depends: unix
 
   Exposed-modules:   Network.Wai.Handler.CGI
                      Network.Wai.Middleware.AcceptOverride
