diff --git a/src/Network/AWS/Wolf/Act.hs b/src/Network/AWS/Wolf/Act.hs
--- a/src/Network/AWS/Wolf/Act.hs
+++ b/src/Network/AWS/Wolf/Act.hs
@@ -14,31 +14,36 @@
 import Network.AWS.Wolf.Ctx
 import Network.AWS.Wolf.File
 import Network.AWS.Wolf.Prelude
-import Network.AWS.Wolf.S3
 import Network.AWS.Wolf.SWF
 import Network.AWS.Wolf.Types
 import System.Process
 
+-- | S3 copy call.
+--
+cp :: MonadIO m => FilePath -> FilePath -> m ()
+cp f t = liftIO $ callProcess "aws" [ "s3", "cp", "--recursive", f, t ]
+
+-- | Key to download and upload objects from.
+--
+key :: MonadAmazonStore c m => m FilePath
+key = do
+  b <- view cBucket <$> view ccConf
+  p <- view ascPrefix
+  return $ "s3:/" -/- textToString b -/- textToString p
+
 -- | Download artifacts to the store input directory.
 --
 download :: MonadAmazonStore c m => FilePath -> m ()
 download dir = do
-  ks <- listArtifacts
-  forM_ ks $ \k -> do
-    traceInfo "get-artifact" [ "key" .= k ]
-    let file = dir </> textToString k
-    touchDirectory file
-    getArtifact file k
+  traceInfo "download" [ "dir" .= dir ]
+  flip cp dir =<< key
 
 -- | Upload artifacts from the store output directory.
 --
 upload :: MonadAmazonStore c m => FilePath -> m ()
 upload dir = do
-  fs <- findRegularFiles dir
-  forM_ fs $ \f -> do
-    let k = stripPrefix' (textFromString dir) (textFromString f)
-    traceInfo "put-artifact" [ "key" .= k ]
-    traverse (putArtifact f) k
+  traceInfo "upload" [ "dir" .= dir ]
+  cp dir =<< key
 
 -- | callCommand wrapper that maybe returns an exception.
 --
diff --git a/src/Network/AWS/Wolf/S3.hs b/src/Network/AWS/Wolf/S3.hs
deleted file mode 100644
--- a/src/Network/AWS/Wolf/S3.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{-# LANGUAGE FlexibleContexts  #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
--- | S3 Calls.
---
-module Network.AWS.Wolf.S3
-  ( listArtifacts
-  , getArtifact
-  , putArtifact
-  ) where
-
-import Control.Monad.Trans.AWS
-import Data.Conduit
-import Data.Conduit.Binary
-import Data.Conduit.Combinators hiding (sinkFile, sourceFile)
-import Data.Conduit.List        hiding (map, mapMaybe)
-import Data.Text
-import Network.AWS.Data.Body
-import Network.AWS.Data.Text
-import Network.AWS.S3           hiding (cBucket)
-import Network.AWS.Wolf.Prelude
-import Network.AWS.Wolf.Types
-
--- | List keys in bucket with prefix.
---
-listArtifacts :: MonadAmazonStore c m => m [Text]
-listArtifacts = do
-  b    <- view cBucket <$> view ccConf
-  p    <- view ascPrefix
-  lors <- paginate (set loPrefix (return p) $ listObjects (BucketName b)) $$ consume
-  return $ mapMaybe (stripPrefix' p) $ toText . view oKey <$> join (view lorsContents <$> lors)
-
--- | Get object in bucket with key.
---
-getArtifact :: MonadAmazonStore c m => FilePath -> Text -> m ()
-getArtifact file key = do
-  b    <- view cBucket <$> view ccConf
-  p    <- view ascPrefix
-  gors <- send $ getObject (BucketName b) (ObjectKey (p -/- key))
-  sinkBody (gors ^. gorsBody) (sinkFile file)
-
--- | Put object in bucket with key.
---
-putArtifact :: MonadAmazonStore c m => FilePath -> Text -> m ()
-putArtifact file key = do
-  b          <- view cBucket <$> view ccConf
-  p          <- view ascPrefix
-  (sha, len) <- sourceFile file $$ getZipSink $ (,) <$> ZipSink sinkSHA256 <*> ZipSink lengthE
-  void $ send $ putObject (BucketName b) (ObjectKey (p -/- key)) $
-    Hashed $ HashedStream sha len $ sourceFile file
diff --git a/wolf.cabal b/wolf.cabal
--- a/wolf.cabal
+++ b/wolf.cabal
@@ -1,5 +1,5 @@
 name:                  wolf
-version:               0.3.14
+version:               0.3.15
 synopsis:              Amazon Simple Workflow Service Wrapper.
 description:           Wolf is a wrapper around Amazon Simple Workflow Service.
 homepage:              https://github.com/swift-nav/wolf
@@ -24,7 +24,6 @@
                      , Network.AWS.Wolf.Decide
                      , Network.AWS.Wolf.File
                      , Network.AWS.Wolf.Prelude
-                     , Network.AWS.Wolf.S3
                      , Network.AWS.Wolf.SWF
                      , Network.AWS.Wolf.Types
                      , Network.AWS.Wolf.Types.Ctx
@@ -36,7 +35,6 @@
   build-depends:       aeson
                      , amazonka
                      , amazonka-core
-                     , amazonka-s3
                      , amazonka-swf
                      , base == 4.8.*
                      , bytestring
