diff --git a/amazonka-redshift.cabal b/amazonka-redshift.cabal
--- a/amazonka-redshift.cabal
+++ b/amazonka-redshift.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-redshift
-version:               0.0.7
+version:               0.0.8
 synopsis:              Amazon Redshift SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -95,9 +95,10 @@
         , Network.AWS.Redshift.RevokeSnapshotAccess
         , Network.AWS.Redshift.RotateEncryptionKey
         , Network.AWS.Redshift.Types
+        , Network.AWS.Redshift.Waiters
 
     other-modules:
 
     build-depends:
-          amazonka-core == 0.0.7.*
+          amazonka-core == 0.0.8.*
         , base          >= 4.7     && < 5
diff --git a/gen/Network/AWS/Redshift.hs b/gen/Network/AWS/Redshift.hs
--- a/gen/Network/AWS/Redshift.hs
+++ b/gen/Network/AWS/Redshift.hs
@@ -74,6 +74,7 @@
     , module Network.AWS.Redshift.RevokeSnapshotAccess
     , module Network.AWS.Redshift.RotateEncryptionKey
     , module Network.AWS.Redshift.Types
+    , module Network.AWS.Redshift.Waiters
     ) where
 
 import Network.AWS.Redshift.AuthorizeClusterSecurityGroupIngress
@@ -133,3 +134,4 @@
 import Network.AWS.Redshift.RevokeSnapshotAccess
 import Network.AWS.Redshift.RotateEncryptionKey
 import Network.AWS.Redshift.Types
+import Network.AWS.Redshift.Waiters
diff --git a/gen/Network/AWS/Redshift/Types.hs b/gen/Network/AWS/Redshift/Types.hs
--- a/gen/Network/AWS/Redshift/Types.hs
+++ b/gen/Network/AWS/Redshift/Types.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE OverloadedStrings           #-}
 {-# LANGUAGE RecordWildCards             #-}
 {-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE ViewPatterns                #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
@@ -384,7 +385,6 @@
     , pSource
     ) where
 
-import Network.AWS.Error
 import Network.AWS.Prelude
 import Network.AWS.Signing
 import qualified GHC.Exts
@@ -396,18 +396,44 @@
     type Sg Redshift = V4
     type Er Redshift = RESTError
 
-    service = Service
-        { _svcAbbrev       = "Redshift"
-        , _svcPrefix       = "redshift"
-        , _svcVersion      = "2012-12-01"
-        , _svcTargetPrefix = Nothing
-        , _svcJSONVersion  = Nothing
-        }
+    service = service'
+      where
+        service' :: Service Redshift
+        service' = Service
+            { _svcAbbrev       = "Redshift"
+            , _svcPrefix       = "redshift"
+            , _svcVersion      = "2012-12-01"
+            , _svcTargetPrefix = Nothing
+            , _svcJSONVersion  = Nothing
+            , _svcHandle       = handle
+            , _svcRetry        = retry
+            }
 
-    handle = restError statusSuccess
+        handle :: Status
+               -> Maybe (LazyByteString -> ServiceError RESTError)
+        handle = restError statusSuccess service'
 
+        retry :: Retry Redshift
+        retry = Exponential
+            { _retryBase     = 0.05
+            , _retryGrowth   = 2
+            , _retryAttempts = 5
+            , _retryCheck    = check
+            }
+
+        check :: Status
+              -> RESTError
+              -> Bool
+        check (statusCode -> s) (awsErrorCode -> e)
+            | s == 400 && "Throttling" == e = True -- Throttling
+            | s == 500  = True -- General Server Error
+            | s == 509  = True -- Limit Exceeded
+            | s == 503  = True -- Service Unavailable
+            | otherwise = False
+
 ns :: Text
 ns = "http://redshift.amazonaws.com/doc/2012-12-01/"
+{-# INLINE ns #-}
 
 data Snapshot = Snapshot
     { _sAccountsWithRestoreAccess              :: List "member" AccountWithRestoreAccess
diff --git a/gen/Network/AWS/Redshift/Waiters.hs b/gen/Network/AWS/Redshift/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Redshift/Waiters.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Module      : Network.AWS.Redshift.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.Redshift.Waiters where
+
+import Network.AWS.Redshift.DescribeClusterSnapshots
+import Network.AWS.Redshift.DescribeClusters
+import Network.AWS.Redshift.Types
+import Network.AWS.Waiters
+
+clusterAvailable :: Wait DescribeClusters
+clusterAvailable = Wait
+    { _waitName      = "ClusterAvailable"
+    , _waitAttempts  = 30
+    , _waitDelay     = 60
+    , _waitAcceptors =
+        [ matchAll "available" AcceptSuccess
+            (folding (concatOf dcrClusters) . cClusterStatus . _Just)
+        , matchAny "deleting" AcceptFailure
+            (folding (concatOf dcrClusters) . cClusterStatus . _Just)
+        , matchError "ClusterNotFound" AcceptRetry
+        ]
+    }
+
+clusterDeleted :: Wait DescribeClusters
+clusterDeleted = Wait
+    { _waitName      = "ClusterDeleted"
+    , _waitAttempts  = 30
+    , _waitDelay     = 60
+    , _waitAcceptors =
+        [ matchError "ClusterNotFound" AcceptSuccess
+        , matchAny "creating" AcceptFailure
+            (folding (concatOf dcrClusters) . cClusterStatus . _Just)
+        , matchAny "rebooting" AcceptFailure
+            (folding (concatOf dcrClusters) . cClusterStatus . _Just)
+        ]
+    }
+
+snapshotAvailable :: Wait DescribeClusterSnapshots
+snapshotAvailable = Wait
+    { _waitName      = "SnapshotAvailable"
+    , _waitAttempts  = 20
+    , _waitDelay     = 15
+    , _waitAcceptors =
+        [ matchAll "available" AcceptSuccess
+            (folding (concatOf dcsrSnapshots) . sStatus . _Just)
+        , matchAny "failed" AcceptFailure
+            (folding (concatOf dcsrSnapshots) . sStatus . _Just)
+        , matchAny "deleted" AcceptFailure
+            (folding (concatOf dcsrSnapshots) . sStatus . _Just)
+        ]
+    }
