diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 # Upcoming...
 
+# v0.0.1.6
+
+- Fix a bug where batched metrics would send an empty list to the server. This
+  causes the service to respond with an error.
+
 # v0.0.1.5
 
 - Batch metric requests to Cloudwatch, resulting in cheaper operations.
diff --git a/ekg-cloudwatch.cabal b/ekg-cloudwatch.cabal
--- a/ekg-cloudwatch.cabal
+++ b/ekg-cloudwatch.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:                ekg-cloudwatch
-version:             0.0.1.5
+version:             0.0.1.6
 synopsis:            An ekg backend for Amazon Cloudwatch
 description:         Push ekg metrics to Amazon Cloudwatch
 homepage:            https://github.com/sellerlabs/ekg-cloudwatch#readme
@@ -32,41 +32,15 @@
       base >=4.7 && <5
     , ekg-core >= 0.1 && < 1.0
     , amazonka >= 1.0.0
-    , amazonka-core >= 1.0.0
     , amazonka-cloudwatch >= 1.0.0
-    , aeson
-    , semigroups
+    , amazonka-core >= 1.0.0
     , bytestring
     , lens
     , resourcet
+    , semigroups
     , text
     , time
     , unordered-containers
   exposed-modules:
       System.Remote.Monitoring.CloudWatch
-  default-language: Haskell2010
-
-test-suite ekg-cloudwatch-test
-  type: exitcode-stdio-1.0
-  hs-source-dirs:
-      test
-  main-is: Spec.hs
-  build-depends:
-      base >=4.7 && <5
-    , ekg-core >= 0.1 && < 1.0
-    , amazonka >= 1.0.0
-    , amazonka-core >= 1.0.0
-    , amazonka-cloudwatch >= 1.0.0
-    , aeson
-    , semigroups
-    , bytestring
-    , lens
-    , resourcet
-    , text
-    , time
-    , unordered-containers
-    , base
-    , ekg-cloudwatch
-    , hspec
-  ghc-options: -threaded -rtsopts -with-rtsopts=-N
   default-language: Haskell2010
diff --git a/src/System/Remote/Monitoring/CloudWatch.hs b/src/System/Remote/Monitoring/CloudWatch.hs
--- a/src/System/Remote/Monitoring/CloudWatch.hs
+++ b/src/System/Remote/Monitoring/CloudWatch.hs
@@ -19,17 +19,17 @@
 
 import           Control.Concurrent                   (ThreadId, forkFinally,
                                                        myThreadId, threadDelay)
-import           Control.Exception
-import           Control.Lens
-import           Control.Monad                        (forM_, guard, void)
-import           Data.Aeson
+import           Control.Exception                    (Exception, throwTo,
+                                                       toException)
+import           Control.Lens                         ((&), (.~), (?~))
+import           Control.Monad                        (forM_, guard, unless,
+                                                       void)
 import qualified Data.ByteString                      as BS
 import qualified Data.HashMap.Strict                  as Map
 import           Data.Int                             (Int64)
 import           Data.List                            (foldl')
 import           Data.List.NonEmpty                   (NonEmpty (..))
 import           Data.Maybe                           (mapMaybe)
-import           Data.Monoid
 import           Data.Text                            (Text)
 import qualified Data.Text                            as Text
 import qualified Data.Text.IO                         as Text
@@ -38,8 +38,8 @@
 import           Data.Traversable                     (for)
 import           Network.AWS                          as AWS
 import           Network.AWS.CloudWatch               as AWS
-import           Network.AWS.Data.ByteString
-import           Network.AWS.Data.Query
+import           Network.AWS.Data.ByteString          (toBS)
+import           Network.AWS.Data.Query               (toQueryList)
 import           System.IO                            (stderr)
 import qualified System.Metrics                       as Metrics
 import qualified System.Metrics.Distribution.Internal as Distribution
@@ -199,11 +199,10 @@
   where
     sendMetric :: [MetricDatum] -> IO ()
     sendMetric metrics = do
-      -- TODO: This call is limited to 40KB in size. Any larger and it will
-      -- whine.
       e <- trying _Error . void . runResourceT . runAWS cweAwsEnv .
         forM_ (splitAt40KB metrics) $ \metrics ->
-          send (putMetricData cweNamespace & pmdMetricData .~ metrics)
+          unless (null metrics) $
+            void (send (putMetricData cweNamespace & pmdMetricData .~ metrics))
       case e of
         Left err -> cweOnError err
         Right _  -> pure ()
diff --git a/test/Spec.hs b/test/Spec.hs
deleted file mode 100644
--- a/test/Spec.hs
+++ /dev/null
@@ -1,1 +0,0 @@
-{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
