diff --git a/amazonka-elasticache.cabal b/amazonka-elasticache.cabal
--- a/amazonka-elasticache.cabal
+++ b/amazonka-elasticache.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-elasticache
-version:               0.2.2
+version:               0.2.3
 synopsis:              Amazon ElastiCache SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -77,9 +77,10 @@
         , Network.AWS.ElastiCache.ResetCacheParameterGroup
         , Network.AWS.ElastiCache.RevokeCacheSecurityGroupIngress
         , Network.AWS.ElastiCache.Types
+        , Network.AWS.ElastiCache.Waiters
 
     other-modules:
 
     build-depends:
-          amazonka-core == 0.2.2.*
+          amazonka-core == 0.2.3.*
         , base          >= 4.7     && < 5
diff --git a/gen/Network/AWS/ElastiCache.hs b/gen/Network/AWS/ElastiCache.hs
--- a/gen/Network/AWS/ElastiCache.hs
+++ b/gen/Network/AWS/ElastiCache.hs
@@ -56,6 +56,7 @@
     , module Network.AWS.ElastiCache.ResetCacheParameterGroup
     , module Network.AWS.ElastiCache.RevokeCacheSecurityGroupIngress
     , module Network.AWS.ElastiCache.Types
+    , module Network.AWS.ElastiCache.Waiters
     ) where
 
 import Network.AWS.ElastiCache.AuthorizeCacheSecurityGroupIngress
@@ -93,3 +94,4 @@
 import Network.AWS.ElastiCache.ResetCacheParameterGroup
 import Network.AWS.ElastiCache.RevokeCacheSecurityGroupIngress
 import Network.AWS.ElastiCache.Types
+import Network.AWS.ElastiCache.Waiters
diff --git a/gen/Network/AWS/ElastiCache/DescribeCacheClusters.hs b/gen/Network/AWS/ElastiCache/DescribeCacheClusters.hs
--- a/gen/Network/AWS/ElastiCache/DescribeCacheClusters.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeCacheClusters.hs
@@ -185,6 +185,6 @@
 
 instance AWSPager DescribeCacheClusters where
     page rq rs
-        | stop (rq ^. dcc1Marker) = Nothing
+        | stop (rs ^. dccrMarker) = Nothing
         | otherwise = (\x -> rq & dcc1Marker ?~ x)
             <$> (rs ^. dccrMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeCacheEngineVersions.hs b/gen/Network/AWS/ElastiCache/DescribeCacheEngineVersions.hs
--- a/gen/Network/AWS/ElastiCache/DescribeCacheEngineVersions.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeCacheEngineVersions.hs
@@ -193,6 +193,6 @@
 
 instance AWSPager DescribeCacheEngineVersions where
     page rq rs
-        | stop (rq ^. dcevMarker) = Nothing
+        | stop (rs ^. dcevrMarker) = Nothing
         | otherwise = (\x -> rq & dcevMarker ?~ x)
             <$> (rs ^. dcevrMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeCacheParameterGroups.hs b/gen/Network/AWS/ElastiCache/DescribeCacheParameterGroups.hs
--- a/gen/Network/AWS/ElastiCache/DescribeCacheParameterGroups.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeCacheParameterGroups.hs
@@ -155,6 +155,6 @@
 
 instance AWSPager DescribeCacheParameterGroups where
     page rq rs
-        | stop (rq ^. dcpgMarker) = Nothing
+        | stop (rs ^. dcpgrMarker) = Nothing
         | otherwise = (\x -> rq & dcpgMarker ?~ x)
             <$> (rs ^. dcpgrMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeCacheParameters.hs b/gen/Network/AWS/ElastiCache/DescribeCacheParameters.hs
--- a/gen/Network/AWS/ElastiCache/DescribeCacheParameters.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeCacheParameters.hs
@@ -177,6 +177,6 @@
 
 instance AWSPager DescribeCacheParameters where
     page rq rs
-        | stop (rq ^. dcpMarker) = Nothing
+        | stop (rs ^. dcprMarker) = Nothing
         | otherwise = (\x -> rq & dcpMarker ?~ x)
             <$> (rs ^. dcprMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeCacheSecurityGroups.hs b/gen/Network/AWS/ElastiCache/DescribeCacheSecurityGroups.hs
--- a/gen/Network/AWS/ElastiCache/DescribeCacheSecurityGroups.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeCacheSecurityGroups.hs
@@ -155,6 +155,6 @@
 
 instance AWSPager DescribeCacheSecurityGroups where
     page rq rs
-        | stop (rq ^. dcsg1Marker) = Nothing
+        | stop (rs ^. dcsgr1Marker) = Nothing
         | otherwise = (\x -> rq & dcsg1Marker ?~ x)
             <$> (rs ^. dcsgr1Marker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeCacheSubnetGroups.hs b/gen/Network/AWS/ElastiCache/DescribeCacheSubnetGroups.hs
--- a/gen/Network/AWS/ElastiCache/DescribeCacheSubnetGroups.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeCacheSubnetGroups.hs
@@ -154,6 +154,6 @@
 
 instance AWSPager DescribeCacheSubnetGroups where
     page rq rs
-        | stop (rq ^. dcsgMarker) = Nothing
+        | stop (rs ^. dcsgrMarker) = Nothing
         | otherwise = (\x -> rq & dcsgMarker ?~ x)
             <$> (rs ^. dcsgrMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeEngineDefaultParameters.hs b/gen/Network/AWS/ElastiCache/DescribeEngineDefaultParameters.hs
--- a/gen/Network/AWS/ElastiCache/DescribeEngineDefaultParameters.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeEngineDefaultParameters.hs
@@ -143,6 +143,6 @@
 
 instance AWSPager DescribeEngineDefaultParameters where
     page rq rs
-        | stop (rq ^. dedpMarker) = Nothing
+        | stop (rs ^. dedprEngineDefaults . edMarker) = Nothing
         | otherwise = (\x -> rq & dedpMarker ?~ x)
             <$> (rs ^. dedprEngineDefaults . edMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeEvents.hs b/gen/Network/AWS/ElastiCache/DescribeEvents.hs
--- a/gen/Network/AWS/ElastiCache/DescribeEvents.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeEvents.hs
@@ -201,6 +201,6 @@
 
 instance AWSPager DescribeEvents where
     page rq rs
-        | stop (rq ^. deMarker) = Nothing
+        | stop (rs ^. derMarker) = Nothing
         | otherwise = (\x -> rq & deMarker ?~ x)
             <$> (rs ^. derMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeReplicationGroups.hs b/gen/Network/AWS/ElastiCache/DescribeReplicationGroups.hs
--- a/gen/Network/AWS/ElastiCache/DescribeReplicationGroups.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeReplicationGroups.hs
@@ -156,6 +156,6 @@
 
 instance AWSPager DescribeReplicationGroups where
     page rq rs
-        | stop (rq ^. drg1Marker) = Nothing
+        | stop (rs ^. drgrMarker) = Nothing
         | otherwise = (\x -> rq & drg1Marker ?~ x)
             <$> (rs ^. drgrMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeReservedCacheNodes.hs b/gen/Network/AWS/ElastiCache/DescribeReservedCacheNodes.hs
--- a/gen/Network/AWS/ElastiCache/DescribeReservedCacheNodes.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeReservedCacheNodes.hs
@@ -216,6 +216,6 @@
 
 instance AWSPager DescribeReservedCacheNodes where
     page rq rs
-        | stop (rq ^. drcnMarker) = Nothing
+        | stop (rs ^. drcnrMarker) = Nothing
         | otherwise = (\x -> rq & drcnMarker ?~ x)
             <$> (rs ^. drcnrMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeReservedCacheNodesOfferings.hs b/gen/Network/AWS/ElastiCache/DescribeReservedCacheNodesOfferings.hs
--- a/gen/Network/AWS/ElastiCache/DescribeReservedCacheNodesOfferings.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeReservedCacheNodesOfferings.hs
@@ -208,6 +208,6 @@
 
 instance AWSPager DescribeReservedCacheNodesOfferings where
     page rq rs
-        | stop (rq ^. drcnoMarker) = Nothing
+        | stop (rs ^. drcnorMarker) = Nothing
         | otherwise = (\x -> rq & drcnoMarker ?~ x)
             <$> (rs ^. drcnorMarker)
diff --git a/gen/Network/AWS/ElastiCache/DescribeSnapshots.hs b/gen/Network/AWS/ElastiCache/DescribeSnapshots.hs
--- a/gen/Network/AWS/ElastiCache/DescribeSnapshots.hs
+++ b/gen/Network/AWS/ElastiCache/DescribeSnapshots.hs
@@ -179,6 +179,6 @@
 
 instance AWSPager DescribeSnapshots where
     page rq rs
-        | stop (rq ^. dsMarker) = Nothing
+        | stop (rs ^. dsrMarker) = Nothing
         | otherwise = (\x -> rq & dsMarker ?~ x)
             <$> (rs ^. dsrMarker)
diff --git a/gen/Network/AWS/ElastiCache/Waiters.hs b/gen/Network/AWS/ElastiCache/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/ElastiCache/Waiters.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Module      : Network.AWS.ElastiCache.Waiters
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+module Network.AWS.ElastiCache.Waiters where
+
+import Network.AWS.ElastiCache.DescribeCacheClusters
+import Network.AWS.ElastiCache.DescribeReplicationGroups
+import Network.AWS.ElastiCache.Types
+import Network.AWS.Waiters
+
+cacheClusterAvailable :: Wait DescribeCacheClusters
+cacheClusterAvailable = Wait
+    { _waitName      = "CacheClusterAvailable"
+    , _waitAttempts  = 60
+    , _waitDelay     = 30
+    , _waitAcceptors =
+        [ matchAll "available" AcceptSuccess
+            (folding (concatOf dccrCacheClusters) . ccCacheClusterStatus . _Just)
+        , matchAny "deleted" AcceptFailure
+            (folding (concatOf dccrCacheClusters) . ccCacheClusterStatus . _Just)
+        , matchAny "deleting" AcceptFailure
+            (folding (concatOf dccrCacheClusters) . ccCacheClusterStatus . _Just)
+        , matchAny "incompatible-network" AcceptFailure
+            (folding (concatOf dccrCacheClusters) . ccCacheClusterStatus . _Just)
+        , matchAny "restore-failed" AcceptFailure
+            (folding (concatOf dccrCacheClusters) . ccCacheClusterStatus . _Just)
+        ]
+    }
+
+cacheClusterDeleted :: Wait DescribeCacheClusters
+cacheClusterDeleted = Wait
+    { _waitName      = "CacheClusterDeleted"
+    , _waitAttempts  = 60
+    , _waitDelay     = 30
+    , _waitAcceptors =
+        [ matchError "CacheClusterNotFound" AcceptSuccess
+        , matchAny "creating" AcceptFailure
+            (folding (concatOf dccrCacheClusters) . ccCacheClusterStatus . _Just)
+        , matchAny "modifying" AcceptFailure
+            (folding (concatOf dccrCacheClusters) . ccCacheClusterStatus . _Just)
+        , matchAny "rebooting" AcceptFailure
+            (folding (concatOf dccrCacheClusters) . ccCacheClusterStatus . _Just)
+        ]
+    }
+
+replicationGroupAvailable :: Wait DescribeReplicationGroups
+replicationGroupAvailable = Wait
+    { _waitName      = "ReplicationGroupAvailable"
+    , _waitAttempts  = 60
+    , _waitDelay     = 30
+    , _waitAcceptors =
+        [ matchAll "available" AcceptSuccess
+            (folding (concatOf drgrReplicationGroups) . rgStatus . _Just)
+        , matchAny "deleted" AcceptFailure
+            (folding (concatOf drgrReplicationGroups) . rgStatus . _Just)
+        , matchAny "deleting" AcceptFailure
+            (folding (concatOf drgrReplicationGroups) . rgStatus . _Just)
+        , matchAny "incompatible-network" AcceptFailure
+            (folding (concatOf drgrReplicationGroups) . rgStatus . _Just)
+        , matchAny "restore-failed" AcceptFailure
+            (folding (concatOf drgrReplicationGroups) . rgStatus . _Just)
+        ]
+    }
+
+replicationGroupDeleted :: Wait DescribeReplicationGroups
+replicationGroupDeleted = Wait
+    { _waitName      = "ReplicationGroupDeleted"
+    , _waitAttempts  = 60
+    , _waitDelay     = 30
+    , _waitAcceptors =
+        [ matchError "ReplicationGroupNotFoundFault" AcceptSuccess
+        , matchAny "creating" AcceptFailure
+            (folding (concatOf drgrReplicationGroups) . rgStatus . _Just)
+        , matchAny "modifying" AcceptFailure
+            (folding (concatOf drgrReplicationGroups) . rgStatus . _Just)
+        , matchAny "rebooting" AcceptFailure
+            (folding (concatOf drgrReplicationGroups) . rgStatus . _Just)
+        ]
+    }
