diff --git a/antiope-sqs.cabal b/antiope-sqs.cabal
--- a/antiope-sqs.cabal
+++ b/antiope-sqs.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: b55dc8e9a043c5df30c6232c86d8ec02c368e68348eb16ab5682893826456042
+-- hash: 0f6f3d2eecda5e123fe534587a05489e19cbdc7b7bf00a03996401b70989f8f2
 
 name:           antiope-sqs
-version:        4.0.1
+version:        5.0.0
 description:    Please see the README on Github at <https://github.com/arbor/antiope#readme>
 category:       Services
 homepage:       https://github.com/arbor/antiope#readme
@@ -47,7 +47,6 @@
     , unliftio-core
   exposed-modules:
       Antiope.SQS
-      Antiope.SQS.Classy
       Antiope.SQS.Types
   other-modules:
       Paths_antiope_sqs
diff --git a/src/Antiope/SQS.hs b/src/Antiope/SQS.hs
--- a/src/Antiope/SQS.hs
+++ b/src/Antiope/SQS.hs
@@ -10,52 +10,47 @@
 , messageToS3Uri'
 ) where
 
-import Antiope.S3              (S3Uri (..))
-import Antiope.SQS.Types       (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError))
+import Antiope.S3          (S3Uri (..))
+import Antiope.SQS.Types   (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError))
 import Control.Lens
-import Control.Monad           (join)
-import Control.Monad.IO.Unlift (MonadUnliftIO)
-import Control.Monad.Loops     (unfoldWhileM)
+import Control.Monad       (join)
+import Control.Monad.Loops (unfoldWhileM)
 import Data.Aeson.Lens
-import Data.Maybe              (catMaybes)
-import Data.Text               (Text, pack, unpack)
-import Network.AWS             (HasEnv)
-import Network.AWS.S3          (BucketName (..), ObjectKey (..))
+import Data.Maybe          (catMaybes)
+import Data.Text           (Text, pack, unpack)
+import Network.AWS         (MonadAWS)
+import Network.AWS.S3      (BucketName (BucketName), ObjectKey (ObjectKey))
 import Network.AWS.SQS
 
 import qualified Network.AWS as AWS
 import qualified Network.URI as URI
 
 -- | Reads the specified SQS queue once returning a bath of messages
-readQueue :: (HasEnv e, MonadUnliftIO m)
-  => e
-  -> QueueUrl
+readQueue :: MonadAWS m
+  => QueueUrl
   -> m [Message]
-readQueue e (QueueUrl queueUrl) = AWS.runResourceT . AWS.runAWS e $ do
+readQueue (QueueUrl queueUrl) = do
   -- max wait time allowed by aws is 20sec, max number messages to recieve is 10
   resp <- AWS.send $ receiveMessage queueUrl & rmWaitTimeSeconds ?~ 10 & rmMaxNumberOfMessages ?~ 10
   return $ resp ^. rmrsMessages
 
 -- | Reads the specified SQS queue until it is empty and returns a list of messages
-drainQueue :: (HasEnv e, MonadUnliftIO m)
-  => e
-  -> QueueUrl
+drainQueue :: MonadAWS m
+  => QueueUrl
   -> m [Message]
-drainQueue e queueUrl = join <$> unfoldWhileM (not . null) (readQueue e queueUrl)
+drainQueue queueUrl = join <$> unfoldWhileM (not . null) (readQueue queueUrl)
 
-ackMessage :: (HasEnv e, MonadUnliftIO m)
-  => e
-  -> QueueUrl
+ackMessage :: MonadAWS m
+  => QueueUrl
   -> Message
   -> m (Either SQSError ())
-ackMessage e q msg = ackMessages e q [msg]
+ackMessage q msg = ackMessages q [msg]
 
-ackMessages :: (HasEnv e, MonadUnliftIO m)
-  => e
-  -> QueueUrl
+ackMessages :: MonadAWS m
+  => QueueUrl
   -> [Message]
   -> m (Either SQSError ())
-ackMessages e (QueueUrl queueUrl) msgs = AWS.runResourceT . AWS.runAWS e $ do
+ackMessages (QueueUrl queueUrl) msgs = do
   let receipts = catMaybes $ msgs ^.. each . mReceiptHandle
   -- each dmbr needs an ID. just use the list index.
   let dmbres = (\(r, i) -> deleteMessageBatchRequestEntry (pack (show i)) r) <$> zip receipts ([0..] :: [Int])
diff --git a/src/Antiope/SQS/Classy.hs b/src/Antiope/SQS/Classy.hs
deleted file mode 100644
--- a/src/Antiope/SQS/Classy.hs
+++ /dev/null
@@ -1,80 +0,0 @@
-module Antiope.SQS.Classy
-( QueueUrl(..)
-, SQSError(..)
-, readQueue
-, drainQueue
-, ackMessage
-, ackMessages
-, messageInBody
-, messageToS3Uri
-, messageToS3Uri'
-) where
-
-import Antiope.S3          (S3Uri (..))
-import Antiope.SQS.Types   (QueueUrl (QueueUrl), SQSError (DeleteMessageBatchError))
-import Control.Lens
-import Control.Monad       (join)
-import Control.Monad.Loops (unfoldWhileM)
-import Data.Aeson.Lens
-import Data.Maybe          (catMaybes)
-import Data.Text           (Text, pack, unpack)
-import Network.AWS         (MonadAWS)
-import Network.AWS.S3      (BucketName (BucketName), ObjectKey (ObjectKey))
-import Network.AWS.SQS
-
-import qualified Network.AWS as AWS
-import qualified Network.URI as URI
-
--- | Reads the specified SQS queue once returning a bath of messages
-readQueue :: MonadAWS m
-  => QueueUrl
-  -> m [Message]
-readQueue (QueueUrl queueUrl) = do
-  -- max wait time allowed by aws is 20sec, max number messages to recieve is 10
-  resp <- AWS.send $ receiveMessage queueUrl & rmWaitTimeSeconds ?~ 10 & rmMaxNumberOfMessages ?~ 10
-  return $ resp ^. rmrsMessages
-
--- | Reads the specified SQS queue until it is empty and returns a list of messages
-drainQueue :: MonadAWS m
-  => QueueUrl
-  -> m [Message]
-drainQueue queueUrl = join <$> unfoldWhileM (not . null) (readQueue queueUrl)
-
-ackMessage :: MonadAWS m
-  => QueueUrl
-  -> Message
-  -> m (Either SQSError ())
-ackMessage q msg = ackMessages q [msg]
-
-ackMessages :: MonadAWS m
-  => QueueUrl
-  -> [Message]
-  -> m (Either SQSError ())
-ackMessages (QueueUrl queueUrl) msgs = do
-  let receipts = catMaybes $ msgs ^.. each . mReceiptHandle
-  -- each dmbr needs an ID. just use the list index.
-  let dmbres = (\(r, i) -> deleteMessageBatchRequestEntry (pack (show i)) r) <$> zip receipts ([0..] :: [Int])
-  resp <- AWS.send $ deleteMessageBatch queueUrl & dmbEntries .~ dmbres
-  -- only acceptable if no errors.
-  if resp ^. dmbrsResponseStatus == 200
-    then case resp ^. dmbrsFailed of
-        [] -> return $ Right ()
-        _  -> return $ Left DeleteMessageBatchError
-    else return $ Left DeleteMessageBatchError
-
--- Extract the "Message" content in the body if have
-messageInBody :: Text -> Maybe Text
-messageInBody body = body ^? key "Message" . _String
-
-messageToS3Uri :: Message -> Maybe S3Uri
-messageToS3Uri msg = join $ messageToS3Uri' <$> msg ^. mBody
-
-messageToS3Uri' :: Text -> Maybe S3Uri
-messageToS3Uri' msg = do
-  s3m <- messageInBody msg ^? _Just . key "Records" . nth 0 . key "s3"
-  b   <- s3m ^? key "bucket" . key "name" . _String
-  k   <- s3m ^? key "object" . key "key" . _String
-  pure $ S3Uri (BucketName b) (ObjectKey $ uriDecode k)
-
-uriDecode :: Text -> Text
-uriDecode = pack . URI.unEscapeString . unpack
