diff --git a/Network/Connection.hs b/Network/Connection.hs
--- a/Network/Connection.hs
+++ b/Network/Connection.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 -- |
 -- Module      : Network.Connection
 -- License     : BSD-style
@@ -16,7 +17,8 @@
     , connectionID
     , ConnectionParams(..)
     , TLSSettings(..)
-    , SockSettings(..)
+    , ProxySettings(..)
+    , SockSettings
 
     -- * Exceptions
     , LineTooLong(..)
@@ -65,6 +67,7 @@
 
 import qualified Crypto.Random.AESCtr as RNG
 
+import System.Environment
 import System.IO
 import qualified Data.Map as M
 
@@ -139,12 +142,34 @@
           -> ConnectionParams  -- ^ The parameters for this connection (where to connect, and such).
           -> IO Connection     -- ^ The new established connection on success.
 connectTo cg cParams = do
-        h <- conFct (connectionHostname cParams) (N.PortNumber $ connectionPort cParams)
-        connectFromHandle cg h cParams
-    where
-        conFct = case connectionUseSocks cParams of
-                      Nothing                       -> N.connectTo
-                      Just (SockSettingsSimple h p) -> socksConnectTo h (N.PortNumber p)
+    conFct <- getConFct (connectionUseSocks cParams)
+    h      <- conFct (connectionHostname cParams) (N.PortNumber $ connectionPort cParams)
+    connectFromHandle cg h cParams
+  where
+        getConFct Nothing                            = return N.connectTo
+        getConFct (Just (OtherProxy h p))            = return $ \_ _ -> N.connectTo h (N.PortNumber p)
+        getConFct (Just (SockSettingsSimple h p))    = return $ socksConnectTo h (N.PortNumber p)
+        getConFct (Just (SockSettingsEnvironment v)) = do
+            -- if we can't get the environment variable or that the variable cannot be parsed
+            -- we connect directly.
+            let name = maybe "SOCKS_SERVER" id v
+            evar <- E.try (getEnv name)
+            case evar of
+                Left (_ :: E.IOException) -> return N.connectTo
+                Right var                 ->
+                    case parseSocks var of
+                        Nothing             -> return N.connectTo
+                        Just (sHost, sPort) -> return $ socksConnectTo sHost (N.PortNumber $ fromIntegral (sPort :: Int))
+
+        -- Try to parse "host:port" or "host"
+        parseSocks s =
+            case break (== ':') s of
+                (sHost, "")        -> Just (sHost, 1080)
+                (sHost, ':':portS) ->
+                    case reads portS of
+                        [(sPort,"")] -> Just (sHost, sPort)
+                        _            -> Nothing
+                _                  -> Nothing
 
 -- | Put a block of data in the connection.
 connectionPut :: Connection -> ByteString -> IO ()
diff --git a/Network/Connection/Types.hs b/Network/Connection/Types.hs
--- a/Network/Connection/Types.hs
+++ b/Network/Connection/Types.hs
@@ -39,16 +39,23 @@
     { connectionHostname   :: HostName           -- ^ host name to connect to.
     , connectionPort       :: PortNumber         -- ^ port number to connect to.
     , connectionUseSecure  :: Maybe TLSSettings  -- ^ optional TLS parameters.
-    , connectionUseSocks   :: Maybe SockSettings -- ^ optional Socks configuration.
+    , connectionUseSocks   :: Maybe ProxySettings -- ^ optional Proxy/Socks configuration.
     }
 
--- | Socks settings for the connection.
+-- | Proxy settings for the connection.
 --
--- The simple settings is just the hostname and portnumber of the proxy server.
+-- OtherProxy handles specific application-level proxies like HTTP proxies.
 --
+-- The simple SOCKS settings is just the hostname and portnumber of the SOCKS proxy server.
+--
 -- That's for now the only settings in the SOCKS package,
 -- socks password, or any sort of other authentications is not yet implemented.
-data SockSettings = SockSettingsSimple HostName PortNumber
+data ProxySettings =
+      SockSettingsSimple HostName PortNumber
+    | SockSettingsEnvironment (Maybe String)
+    | OtherProxy HostName PortNumber
+
+type SockSettings = ProxySettings
 
 -- | TLS Settings that can be either expressed as simple settings,
 -- or as full blown TLS.Params settings.
diff --git a/connection.cabal b/connection.cabal
--- a/connection.cabal
+++ b/connection.cabal
@@ -1,5 +1,5 @@
 Name:                connection
-Version:             0.2.1
+Version:             0.2.2
 Description:
     Simple network library for all your connection need.
     .
