diff --git a/README.org b/README.org
--- a/README.org
+++ b/README.org
@@ -51,7 +51,7 @@
           exchange'   = "myExchange"
           routingKey  = "myKey"
 
-      _ <- runAmqp $ \_ chan -> do
+      _ <- runAmqp $ \chan -> do
           _ <- declareQueue chan newQueue {queueName = serverQueue}
 
           declareExchange chan newExchange { exchangeName = exchange'
diff --git a/snaplet-amqp.cabal b/snaplet-amqp.cabal
--- a/snaplet-amqp.cabal
+++ b/snaplet-amqp.cabal
@@ -1,5 +1,5 @@
 Name:                snaplet-amqp
-Version:             1.0.1.2
+Version:             1.1.0.0
 Synopsis:            Snap framework snaplet for the AMQP library
 Homepage:            https://github.com/ixmatus/snaplet-amqp
 License:             BSD3
@@ -12,8 +12,8 @@
 Stability:           stable
 Bug-reports:         https://github.com/ixmatus/snaplet-amqp/issues
 Package-url:         http://hackage.haskell.org/package/snaplet-amqp
-Tested-with:         GHC == 7.6.3
-Cabal-version:       >=1.14.0
+Tested-with:         GHC == 7.6.3, GHC == 7.8.3
+Cabal-version:       >=1.10
 
 description:
 
diff --git a/src/Snap/Snaplet/AMQP.hs b/src/Snap/Snaplet/AMQP.hs
--- a/src/Snap/Snaplet/AMQP.hs
+++ b/src/Snap/Snaplet/AMQP.hs
@@ -24,7 +24,7 @@
 import           Snap.Snaplet
 
 -------------------------------------------------------------------------------
-type AmqpPool = Pool Connection
+type AmqpPool = Pool Channel
 
 newtype AmqpState = AmqpState { amqpPool :: AmqpPool }
 
@@ -41,9 +41,11 @@
 -- | Initialize the AMQP Snaplet.
 initAMQP :: SnapletInit b AmqpState
 initAMQP = makeSnaplet "amqp" description datadir $ do
-    p <- mkSnapletAmqpPool
+    (p, c) <- mkSnapletAmqpPool
 
+    -- Cleanup
     onUnload (destroyAllResources p)
+    onUnload (closeConnection c)
 
     return $ AmqpState p
 
@@ -53,14 +55,14 @@
 
 -------------------------------------------------------------------------------
 -- | Constructs a connection in a snaplet context.
-mkSnapletAmqpPool :: (MonadIO (m b v), MonadSnaplet m) => m b v AmqpPool
+mkSnapletAmqpPool :: (MonadIO (m b v), MonadSnaplet m) => m b v (AmqpPool, Connection)
 mkSnapletAmqpPool = do
   conf <- getSnapletUserConfig
   mkAmqpPool conf
 
 -------------------------------------------------------------------------------
 -- | Constructs a connect from Config.
-mkAmqpPool :: MonadIO m => Config -> m AmqpPool
+mkAmqpPool :: MonadIO m => Config -> m (AmqpPool, Connection)
 mkAmqpPool conf = do
   host  <- liftIO $ require conf "host"
   port  <- liftIO $ require conf "port"
@@ -73,13 +75,16 @@
                    , coVHost   = vhost
                    , coAuth    = [plain login pass]
                    }
-  return =<< liftIO $ createPool (openConnection'' connOpts) closeConnection 1 30 10
 
+  conn <- liftIO $ openConnection'' connOpts
+  chp  <- liftIO $ createPool (openChannel conn) closeChannel 1 30 10
+
+  return (chp, conn)
+
 -------------------------------------------------------------------------------
 -- | Runs an AMQP action in any monad with a HasAmqpPoolonn instance.
-runAmqp :: (HasAmqpPool m) => (Connection -> Channel -> IO ()) -> m ()
+runAmqp :: (HasAmqpPool m) => (Channel -> IO ()) -> m ()
 runAmqp action = do
     pool <- getAmqpPool
-    liftIO $ withResource pool $! \conn -> do
-        chan <- liftIO $ openChannel conn
-        liftIO $! action conn chan
+    liftIO $ withResource pool $! \chan -> do
+        liftIO $! action chan
