diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.5`
+`1.5.0`
 
 
 ## Description
diff --git a/amazonka-polly.cabal b/amazonka-polly.cabal
--- a/amazonka-polly.cabal
+++ b/amazonka-polly.cabal
@@ -1,13 +1,13 @@
 name:                  amazonka-polly
-version:               1.4.5
+version:               1.5.0
 synopsis:              Amazon Polly SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               OtherLicense
+license:               MPL-2.0
 license-file:          LICENSE
 author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2016 Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+copyright:             Copyright (c) 2013-2017 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -29,14 +29,19 @@
     to get started.
 
 source-repository head
-    type:     git
-    location: git://github.com/brendanhay/amazonka.git
+    type:              git
+    location:          git://github.com/brendanhay/amazonka.git
+    subdir:            amazonka-polly
 
 library
     default-language:  Haskell2010
     hs-source-dirs:    src gen
 
-    ghc-options:       -Wall
+    ghc-options:
+        -Wall
+        -fwarn-incomplete-uni-patterns
+        -fwarn-incomplete-record-updates
+        -funbox-strict-fields
 
     exposed-modules:
           Network.AWS.Polly
@@ -54,7 +59,7 @@
         , Network.AWS.Polly.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.5.*
+          amazonka-core == 1.5.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-polly-test
@@ -74,9 +79,9 @@
         , Test.AWS.Polly.Internal
 
     build-depends:
-          amazonka-core == 1.4.5.*
-        , amazonka-test == 1.4.5.*
-        , amazonka-polly == 1.4.5.*
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-polly
         , base
         , bytestring
         , tasty
diff --git a/gen/Network/AWS/Polly.hs b/gen/Network/AWS/Polly.hs
--- a/gen/Network/AWS/Polly.hs
+++ b/gen/Network/AWS/Polly.hs
@@ -5,9 +5,9 @@
 
 -- |
 -- Module      : Network.AWS.Polly
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -54,6 +54,12 @@
     -- ** InvalidNextTokenException
     , _InvalidNextTokenException
 
+    -- ** MarksNotSupportedForFormatException
+    , _MarksNotSupportedForFormatException
+
+    -- ** SsmlMarksNotSupportedForTextTypeException
+    , _SsmlMarksNotSupportedForTextTypeException
+
     -- ** LexiconSizeExceededException
     , _LexiconSizeExceededException
 
@@ -95,6 +101,9 @@
     -- ** OutputFormat
     , OutputFormat (..)
 
+    -- ** SpeechMarkType
+    , SpeechMarkType (..)
+
     -- ** TextType
     , TextType (..)
 
@@ -133,14 +142,14 @@
     , vId
     ) where
 
-import           Network.AWS.Polly.DeleteLexicon
-import           Network.AWS.Polly.DescribeVoices
-import           Network.AWS.Polly.GetLexicon
-import           Network.AWS.Polly.ListLexicons
-import           Network.AWS.Polly.PutLexicon
-import           Network.AWS.Polly.SynthesizeSpeech
-import           Network.AWS.Polly.Types
-import           Network.AWS.Polly.Waiters
+import Network.AWS.Polly.DeleteLexicon
+import Network.AWS.Polly.DescribeVoices
+import Network.AWS.Polly.GetLexicon
+import Network.AWS.Polly.ListLexicons
+import Network.AWS.Polly.PutLexicon
+import Network.AWS.Polly.SynthesizeSpeech
+import Network.AWS.Polly.Types
+import Network.AWS.Polly.Waiters
 
 {- $errors
 Error matchers are designed for use with the functions provided by
diff --git a/gen/Network/AWS/Polly/DeleteLexicon.hs b/gen/Network/AWS/Polly/DeleteLexicon.hs
--- a/gen/Network/AWS/Polly/DeleteLexicon.hs
+++ b/gen/Network/AWS/Polly/DeleteLexicon.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Polly.DeleteLexicon
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,18 +38,19 @@
     , dlrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types
-import           Network.AWS.Polly.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Polly.Types
+import Network.AWS.Polly.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'deleteLexicon' smart constructor.
 newtype DeleteLexicon = DeleteLexicon'
-    { _dlName :: Sensitive Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlName :: Sensitive Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteLexicon' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,11 +59,9 @@
 deleteLexicon
     :: Text -- ^ 'dlName'
     -> DeleteLexicon
-deleteLexicon pName_ =
-    DeleteLexicon'
-    { _dlName = _Sensitive # pName_
-    }
+deleteLexicon pName_ = DeleteLexicon' {_dlName = _Sensitive # pName_}
 
+
 -- | The name of the lexicon to delete. Must be an existing lexicon in the region.
 dlName :: Lens' DeleteLexicon Text
 dlName = lens _dlName (\ s a -> s{_dlName = a}) . _Sensitive;
@@ -75,9 +74,9 @@
               (\ s h x ->
                  DeleteLexiconResponse' <$> (pure (fromEnum s)))
 
-instance Hashable DeleteLexicon
+instance Hashable DeleteLexicon where
 
-instance NFData DeleteLexicon
+instance NFData DeleteLexicon where
 
 instance ToHeaders DeleteLexicon where
         toHeaders = const mempty
@@ -91,9 +90,10 @@
 
 -- | /See:/ 'deleteLexiconResponse' smart constructor.
 newtype DeleteLexiconResponse = DeleteLexiconResponse'
-    { _dlrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dlrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteLexiconResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -103,12 +103,11 @@
     :: Int -- ^ 'dlrsResponseStatus'
     -> DeleteLexiconResponse
 deleteLexiconResponse pResponseStatus_ =
-    DeleteLexiconResponse'
-    { _dlrsResponseStatus = pResponseStatus_
-    }
+  DeleteLexiconResponse' {_dlrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 dlrsResponseStatus :: Lens' DeleteLexiconResponse Int
 dlrsResponseStatus = lens _dlrsResponseStatus (\ s a -> s{_dlrsResponseStatus = a});
 
-instance NFData DeleteLexiconResponse
+instance NFData DeleteLexiconResponse where
diff --git a/gen/Network/AWS/Polly/DescribeVoices.hs b/gen/Network/AWS/Polly/DescribeVoices.hs
--- a/gen/Network/AWS/Polly/DescribeVoices.hs
+++ b/gen/Network/AWS/Polly/DescribeVoices.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Polly.DescribeVoices
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -47,19 +47,20 @@
     , dvrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types
-import           Network.AWS.Polly.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Polly.Types
+import Network.AWS.Polly.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'describeVoices' smart constructor.
 data DescribeVoices = DescribeVoices'
-    { _dvLanguageCode :: !(Maybe LanguageCode)
-    , _dvNextToken    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dvLanguageCode :: !(Maybe LanguageCode)
+  , _dvNextToken    :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeVoices' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -70,11 +71,9 @@
 describeVoices
     :: DescribeVoices
 describeVoices =
-    DescribeVoices'
-    { _dvLanguageCode = Nothing
-    , _dvNextToken = Nothing
-    }
+  DescribeVoices' {_dvLanguageCode = Nothing, _dvNextToken = Nothing}
 
+
 -- | The language identification tag (ISO 639 code for the language name-ISO 3166 country code) for filtering the list of voices returned. If you don't specify this optional parameter, all available voices are returned.
 dvLanguageCode :: Lens' DescribeVoices (Maybe LanguageCode)
 dvLanguageCode = lens _dvLanguageCode (\ s a -> s{_dvLanguageCode = a});
@@ -93,9 +92,9 @@
                    (x .?> "NextToken") <*> (x .?> "Voices" .!@ mempty)
                      <*> (pure (fromEnum s)))
 
-instance Hashable DescribeVoices
+instance Hashable DescribeVoices where
 
-instance NFData DescribeVoices
+instance NFData DescribeVoices where
 
 instance ToHeaders DescribeVoices where
         toHeaders = const mempty
@@ -111,11 +110,12 @@
 
 -- | /See:/ 'describeVoicesResponse' smart constructor.
 data DescribeVoicesResponse = DescribeVoicesResponse'
-    { _dvrsNextToken      :: !(Maybe Text)
-    , _dvrsVoices         :: !(Maybe [Voice])
-    , _dvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dvrsNextToken      :: !(Maybe Text)
+  , _dvrsVoices         :: !(Maybe [Voice])
+  , _dvrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DescribeVoicesResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -129,12 +129,13 @@
     :: Int -- ^ 'dvrsResponseStatus'
     -> DescribeVoicesResponse
 describeVoicesResponse pResponseStatus_ =
-    DescribeVoicesResponse'
-    { _dvrsNextToken = Nothing
-    , _dvrsVoices = Nothing
-    , _dvrsResponseStatus = pResponseStatus_
-    }
+  DescribeVoicesResponse'
+  { _dvrsNextToken = Nothing
+  , _dvrsVoices = Nothing
+  , _dvrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The pagination token to use in the next request to continue the listing of voices. @NextToken@ is returned only if the response is truncated.
 dvrsNextToken :: Lens' DescribeVoicesResponse (Maybe Text)
 dvrsNextToken = lens _dvrsNextToken (\ s a -> s{_dvrsNextToken = a});
@@ -147,4 +148,4 @@
 dvrsResponseStatus :: Lens' DescribeVoicesResponse Int
 dvrsResponseStatus = lens _dvrsResponseStatus (\ s a -> s{_dvrsResponseStatus = a});
 
-instance NFData DescribeVoicesResponse
+instance NFData DescribeVoicesResponse where
diff --git a/gen/Network/AWS/Polly/GetLexicon.hs b/gen/Network/AWS/Polly/GetLexicon.hs
--- a/gen/Network/AWS/Polly/GetLexicon.hs
+++ b/gen/Network/AWS/Polly/GetLexicon.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Polly.GetLexicon
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,18 +38,19 @@
     , glrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types
-import           Network.AWS.Polly.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Polly.Types
+import Network.AWS.Polly.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'getLexicon' smart constructor.
 newtype GetLexicon = GetLexicon'
-    { _glName :: Sensitive Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _glName :: Sensitive Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetLexicon' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,11 +59,9 @@
 getLexicon
     :: Text -- ^ 'glName'
     -> GetLexicon
-getLexicon pName_ =
-    GetLexicon'
-    { _glName = _Sensitive # pName_
-    }
+getLexicon pName_ = GetLexicon' {_glName = _Sensitive # pName_}
 
+
 -- | Name of the lexicon.
 glName :: Lens' GetLexicon Text
 glName = lens _glName (\ s a -> s{_glName = a}) . _Sensitive;
@@ -77,9 +76,9 @@
                    (x .?> "LexiconAttributes") <*> (x .?> "Lexicon") <*>
                      (pure (fromEnum s)))
 
-instance Hashable GetLexicon
+instance Hashable GetLexicon where
 
-instance NFData GetLexicon
+instance NFData GetLexicon where
 
 instance ToHeaders GetLexicon where
         toHeaders = const mempty
@@ -93,11 +92,12 @@
 
 -- | /See:/ 'getLexiconResponse' smart constructor.
 data GetLexiconResponse = GetLexiconResponse'
-    { _glrsLexiconAttributes :: !(Maybe LexiconAttributes)
-    , _glrsLexicon           :: !(Maybe Lexicon)
-    , _glrsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _glrsLexiconAttributes :: !(Maybe LexiconAttributes)
+  , _glrsLexicon           :: !(Maybe Lexicon)
+  , _glrsResponseStatus    :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetLexiconResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -111,12 +111,13 @@
     :: Int -- ^ 'glrsResponseStatus'
     -> GetLexiconResponse
 getLexiconResponse pResponseStatus_ =
-    GetLexiconResponse'
-    { _glrsLexiconAttributes = Nothing
-    , _glrsLexicon = Nothing
-    , _glrsResponseStatus = pResponseStatus_
-    }
+  GetLexiconResponse'
+  { _glrsLexiconAttributes = Nothing
+  , _glrsLexicon = Nothing
+  , _glrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Metadata of the lexicon, including phonetic alphabetic used, language code, lexicon ARN, number of lexemes defined in the lexicon, and size of lexicon in bytes.
 glrsLexiconAttributes :: Lens' GetLexiconResponse (Maybe LexiconAttributes)
 glrsLexiconAttributes = lens _glrsLexiconAttributes (\ s a -> s{_glrsLexiconAttributes = a});
@@ -129,4 +130,4 @@
 glrsResponseStatus :: Lens' GetLexiconResponse Int
 glrsResponseStatus = lens _glrsResponseStatus (\ s a -> s{_glrsResponseStatus = a});
 
-instance NFData GetLexiconResponse
+instance NFData GetLexiconResponse where
diff --git a/gen/Network/AWS/Polly/ListLexicons.hs b/gen/Network/AWS/Polly/ListLexicons.hs
--- a/gen/Network/AWS/Polly/ListLexicons.hs
+++ b/gen/Network/AWS/Polly/ListLexicons.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Polly.ListLexicons
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,18 +38,19 @@
     , llrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types
-import           Network.AWS.Polly.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Polly.Types
+import Network.AWS.Polly.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'listLexicons' smart constructor.
 newtype ListLexicons = ListLexicons'
-    { _llNextToken :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _llNextToken :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListLexicons' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,9 @@
 -- * 'llNextToken' - An opaque pagination token returned from previous @ListLexicons@ operation. If present, indicates where to continue the list of lexicons.
 listLexicons
     :: ListLexicons
-listLexicons =
-    ListLexicons'
-    { _llNextToken = Nothing
-    }
+listLexicons = ListLexicons' {_llNextToken = Nothing}
 
+
 -- | An opaque pagination token returned from previous @ListLexicons@ operation. If present, indicates where to continue the list of lexicons.
 llNextToken :: Lens' ListLexicons (Maybe Text)
 llNextToken = lens _llNextToken (\ s a -> s{_llNextToken = a});
@@ -76,9 +75,9 @@
                    (x .?> "Lexicons" .!@ mempty) <*> (x .?> "NextToken")
                      <*> (pure (fromEnum s)))
 
-instance Hashable ListLexicons
+instance Hashable ListLexicons where
 
-instance NFData ListLexicons
+instance NFData ListLexicons where
 
 instance ToHeaders ListLexicons where
         toHeaders = const mempty
@@ -92,11 +91,12 @@
 
 -- | /See:/ 'listLexiconsResponse' smart constructor.
 data ListLexiconsResponse = ListLexiconsResponse'
-    { _llrsLexicons       :: !(Maybe [LexiconDescription])
-    , _llrsNextToken      :: !(Maybe Text)
-    , _llrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _llrsLexicons       :: !(Maybe [LexiconDescription])
+  , _llrsNextToken      :: !(Maybe Text)
+  , _llrsResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListLexiconsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -110,12 +110,13 @@
     :: Int -- ^ 'llrsResponseStatus'
     -> ListLexiconsResponse
 listLexiconsResponse pResponseStatus_ =
-    ListLexiconsResponse'
-    { _llrsLexicons = Nothing
-    , _llrsNextToken = Nothing
-    , _llrsResponseStatus = pResponseStatus_
-    }
+  ListLexiconsResponse'
+  { _llrsLexicons = Nothing
+  , _llrsNextToken = Nothing
+  , _llrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A list of lexicon names and attributes.
 llrsLexicons :: Lens' ListLexiconsResponse [LexiconDescription]
 llrsLexicons = lens _llrsLexicons (\ s a -> s{_llrsLexicons = a}) . _Default . _Coerce;
@@ -128,4 +129,4 @@
 llrsResponseStatus :: Lens' ListLexiconsResponse Int
 llrsResponseStatus = lens _llrsResponseStatus (\ s a -> s{_llrsResponseStatus = a});
 
-instance NFData ListLexiconsResponse
+instance NFData ListLexiconsResponse where
diff --git a/gen/Network/AWS/Polly/PutLexicon.hs b/gen/Network/AWS/Polly/PutLexicon.hs
--- a/gen/Network/AWS/Polly/PutLexicon.hs
+++ b/gen/Network/AWS/Polly/PutLexicon.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Polly.PutLexicon
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,19 +39,20 @@
     , plrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types
-import           Network.AWS.Polly.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Polly.Types
+import Network.AWS.Polly.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'putLexicon' smart constructor.
 data PutLexicon = PutLexicon'
-    { _plName    :: !(Sensitive Text)
-    , _plContent :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _plName    :: !(Sensitive Text)
+  , _plContent :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutLexicon' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -64,11 +65,9 @@
     -> Text -- ^ 'plContent'
     -> PutLexicon
 putLexicon pName_ pContent_ =
-    PutLexicon'
-    { _plName = _Sensitive # pName_
-    , _plContent = pContent_
-    }
+  PutLexicon' {_plName = _Sensitive # pName_, _plContent = pContent_}
 
+
 -- | Name of the lexicon. The name must follow the regular express format [0-9A-Za-z]{1,20}. That is, the name is a case-sensitive alphanumeric string up to 20 characters long.
 plName :: Lens' PutLexicon Text
 plName = lens _plName (\ s a -> s{_plName = a}) . _Sensitive;
@@ -85,9 +84,9 @@
               (\ s h x ->
                  PutLexiconResponse' <$> (pure (fromEnum s)))
 
-instance Hashable PutLexicon
+instance Hashable PutLexicon where
 
-instance NFData PutLexicon
+instance NFData PutLexicon where
 
 instance ToHeaders PutLexicon where
         toHeaders = const mempty
@@ -105,9 +104,10 @@
 
 -- | /See:/ 'putLexiconResponse' smart constructor.
 newtype PutLexiconResponse = PutLexiconResponse'
-    { _plrsResponseStatus :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _plrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutLexiconResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -117,12 +117,11 @@
     :: Int -- ^ 'plrsResponseStatus'
     -> PutLexiconResponse
 putLexiconResponse pResponseStatus_ =
-    PutLexiconResponse'
-    { _plrsResponseStatus = pResponseStatus_
-    }
+  PutLexiconResponse' {_plrsResponseStatus = pResponseStatus_}
 
+
 -- | -- | The response status code.
 plrsResponseStatus :: Lens' PutLexiconResponse Int
 plrsResponseStatus = lens _plrsResponseStatus (\ s a -> s{_plrsResponseStatus = a});
 
-instance NFData PutLexiconResponse
+instance NFData PutLexiconResponse where
diff --git a/gen/Network/AWS/Polly/SynthesizeSpeech.hs b/gen/Network/AWS/Polly/SynthesizeSpeech.hs
--- a/gen/Network/AWS/Polly/SynthesizeSpeech.hs
+++ b/gen/Network/AWS/Polly/SynthesizeSpeech.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.Polly.SynthesizeSpeech
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -27,6 +27,7 @@
       synthesizeSpeech
     , SynthesizeSpeech
     -- * Request Lenses
+    , ssSpeechMarkTypes
     , ssSampleRate
     , ssTextType
     , ssLexiconNames
@@ -44,34 +45,38 @@
     , ssrsAudioStream
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types
-import           Network.AWS.Polly.Types.Product
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
+import Network.AWS.Lens
+import Network.AWS.Polly.Types
+import Network.AWS.Polly.Types.Product
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
 
 -- | /See:/ 'synthesizeSpeech' smart constructor.
 data SynthesizeSpeech = SynthesizeSpeech'
-    { _ssSampleRate   :: !(Maybe Text)
-    , _ssTextType     :: !(Maybe TextType)
-    , _ssLexiconNames :: !(Maybe [Sensitive Text])
-    , _ssOutputFormat :: !OutputFormat
-    , _ssText         :: !Text
-    , _ssVoiceId      :: !VoiceId
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ssSpeechMarkTypes :: !(Maybe [SpeechMarkType])
+  , _ssSampleRate      :: !(Maybe Text)
+  , _ssTextType        :: !(Maybe TextType)
+  , _ssLexiconNames    :: !(Maybe [Sensitive Text])
+  , _ssOutputFormat    :: !OutputFormat
+  , _ssText            :: !Text
+  , _ssVoiceId         :: !VoiceId
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'SynthesizeSpeech' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'ssSpeechMarkTypes' - The type of speech marks returned for the input text.
+--
 -- * 'ssSampleRate' - The audio frequency specified in Hz.  The valid values for @mp3@ and @ogg_vorbis@ are "8000", "16000", and "22050". The default value is "22050".  Valid values for @pcm@ are "8000" and "16000" The default value is "16000".
 --
 -- * 'ssTextType' - Specifies whether the input text is plain text or SSML. The default value is plain text. For more information, see <http://docs.aws.amazon.com/polly/latest/dg/ssml.html Using SSML> .
 --
 -- * 'ssLexiconNames' - List of one or more pronunciation lexicon names you want the service to apply during synthesis. Lexicons are applied only if the language of the lexicon is the same as the language of the voice. For information about storing lexicons, see <http://docs.aws.amazon.com/polly/latest/dg/API_PutLexicon.html PutLexicon> .
 --
--- * 'ssOutputFormat' - The audio format in which the resulting stream will be encoded.
+-- * 'ssOutputFormat' - The format in which the returned output will be encoded. For audio stream, this will be mp3, ogg_vorbis, or pcm. For speech marks, this will be json.
 --
 -- * 'ssText' - Input text to synthesize. If you specify @ssml@ as the @TextType@ , follow the SSML format for the input text.
 --
@@ -82,15 +87,21 @@
     -> VoiceId -- ^ 'ssVoiceId'
     -> SynthesizeSpeech
 synthesizeSpeech pOutputFormat_ pText_ pVoiceId_ =
-    SynthesizeSpeech'
-    { _ssSampleRate = Nothing
-    , _ssTextType = Nothing
-    , _ssLexiconNames = Nothing
-    , _ssOutputFormat = pOutputFormat_
-    , _ssText = pText_
-    , _ssVoiceId = pVoiceId_
-    }
+  SynthesizeSpeech'
+  { _ssSpeechMarkTypes = Nothing
+  , _ssSampleRate = Nothing
+  , _ssTextType = Nothing
+  , _ssLexiconNames = Nothing
+  , _ssOutputFormat = pOutputFormat_
+  , _ssText = pText_
+  , _ssVoiceId = pVoiceId_
+  }
 
+
+-- | The type of speech marks returned for the input text.
+ssSpeechMarkTypes :: Lens' SynthesizeSpeech [SpeechMarkType]
+ssSpeechMarkTypes = lens _ssSpeechMarkTypes (\ s a -> s{_ssSpeechMarkTypes = a}) . _Default . _Coerce;
+
 -- | The audio frequency specified in Hz.  The valid values for @mp3@ and @ogg_vorbis@ are "8000", "16000", and "22050". The default value is "22050".  Valid values for @pcm@ are "8000" and "16000" The default value is "16000".
 ssSampleRate :: Lens' SynthesizeSpeech (Maybe Text)
 ssSampleRate = lens _ssSampleRate (\ s a -> s{_ssSampleRate = a});
@@ -103,7 +114,7 @@
 ssLexiconNames :: Lens' SynthesizeSpeech [Text]
 ssLexiconNames = lens _ssLexiconNames (\ s a -> s{_ssLexiconNames = a}) . _Default . _Coerce;
 
--- | The audio format in which the resulting stream will be encoded.
+-- | The format in which the returned output will be encoded. For audio stream, this will be mp3, ogg_vorbis, or pcm. For speech marks, this will be json.
 ssOutputFormat :: Lens' SynthesizeSpeech OutputFormat
 ssOutputFormat = lens _ssOutputFormat (\ s a -> s{_ssOutputFormat = a});
 
@@ -127,9 +138,9 @@
                      <*> (pure (fromEnum s))
                      <*> (pure x))
 
-instance Hashable SynthesizeSpeech
+instance Hashable SynthesizeSpeech where
 
-instance NFData SynthesizeSpeech
+instance NFData SynthesizeSpeech where
 
 instance ToHeaders SynthesizeSpeech where
         toHeaders = const mempty
@@ -138,7 +149,8 @@
         toJSON SynthesizeSpeech'{..}
           = object
               (catMaybes
-                 [("SampleRate" .=) <$> _ssSampleRate,
+                 [("SpeechMarkTypes" .=) <$> _ssSpeechMarkTypes,
+                  ("SampleRate" .=) <$> _ssSampleRate,
                   ("TextType" .=) <$> _ssTextType,
                   ("LexiconNames" .=) <$> _ssLexiconNames,
                   Just ("OutputFormat" .= _ssOutputFormat),
@@ -153,19 +165,20 @@
 
 -- | /See:/ 'synthesizeSpeechResponse' smart constructor.
 data SynthesizeSpeechResponse = SynthesizeSpeechResponse'
-    { _ssrsRequestCharacters :: !(Maybe Int)
-    , _ssrsContentType       :: !(Maybe Text)
-    , _ssrsResponseStatus    :: !Int
-    , _ssrsAudioStream       :: !RsBody
-    } deriving (Show,Generic)
+  { _ssrsRequestCharacters :: !(Maybe Int)
+  , _ssrsContentType       :: !(Maybe Text)
+  , _ssrsResponseStatus    :: !Int
+  , _ssrsAudioStream       :: !RsBody
+  } deriving (Show, Generic)
 
+
 -- | Creates a value of 'SynthesizeSpeechResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
 -- * 'ssrsRequestCharacters' - Number of characters synthesized.
 --
--- * 'ssrsContentType' - Specifies the type audio stream. This should reflect the @OutputFormat@ parameter in your request.      * If you request @mp3@ as the @OutputFormat@ , the @ContentType@ returned is audio/mpeg.      * If you request @ogg_vorbis@ as the @OutputFormat@ , the @ContentType@ returned is audio/ogg.      * If you request @pcm@ as the @OutputFormat@ , the @ContentType@ returned is audio/pcm.
+-- * 'ssrsContentType' - Specifies the type audio stream. This should reflect the @OutputFormat@ parameter in your request.      * If you request @mp3@ as the @OutputFormat@ , the @ContentType@ returned is audio/mpeg.      * If you request @ogg_vorbis@ as the @OutputFormat@ , the @ContentType@ returned is audio/ogg.      * If you request @pcm@ as the @OutputFormat@ , the @ContentType@ returned is audio/pcm in a signed 16-bit, 1 channel (mono), little-endian format.      * If you request @json@ as the @OutputFormat@ , the @ContentType@ returned is audio/json.
 --
 -- * 'ssrsResponseStatus' - -- | The response status code.
 --
@@ -175,18 +188,19 @@
     -> RsBody -- ^ 'ssrsAudioStream'
     -> SynthesizeSpeechResponse
 synthesizeSpeechResponse pResponseStatus_ pAudioStream_ =
-    SynthesizeSpeechResponse'
-    { _ssrsRequestCharacters = Nothing
-    , _ssrsContentType = Nothing
-    , _ssrsResponseStatus = pResponseStatus_
-    , _ssrsAudioStream = pAudioStream_
-    }
+  SynthesizeSpeechResponse'
+  { _ssrsRequestCharacters = Nothing
+  , _ssrsContentType = Nothing
+  , _ssrsResponseStatus = pResponseStatus_
+  , _ssrsAudioStream = pAudioStream_
+  }
 
+
 -- | Number of characters synthesized.
 ssrsRequestCharacters :: Lens' SynthesizeSpeechResponse (Maybe Int)
 ssrsRequestCharacters = lens _ssrsRequestCharacters (\ s a -> s{_ssrsRequestCharacters = a});
 
--- | Specifies the type audio stream. This should reflect the @OutputFormat@ parameter in your request.      * If you request @mp3@ as the @OutputFormat@ , the @ContentType@ returned is audio/mpeg.      * If you request @ogg_vorbis@ as the @OutputFormat@ , the @ContentType@ returned is audio/ogg.      * If you request @pcm@ as the @OutputFormat@ , the @ContentType@ returned is audio/pcm.
+-- | Specifies the type audio stream. This should reflect the @OutputFormat@ parameter in your request.      * If you request @mp3@ as the @OutputFormat@ , the @ContentType@ returned is audio/mpeg.      * If you request @ogg_vorbis@ as the @OutputFormat@ , the @ContentType@ returned is audio/ogg.      * If you request @pcm@ as the @OutputFormat@ , the @ContentType@ returned is audio/pcm in a signed 16-bit, 1 channel (mono), little-endian format.      * If you request @json@ as the @OutputFormat@ , the @ContentType@ returned is audio/json.
 ssrsContentType :: Lens' SynthesizeSpeechResponse (Maybe Text)
 ssrsContentType = lens _ssrsContentType (\ s a -> s{_ssrsContentType = a});
 
diff --git a/gen/Network/AWS/Polly/Types.hs b/gen/Network/AWS/Polly/Types.hs
--- a/gen/Network/AWS/Polly/Types.hs
+++ b/gen/Network/AWS/Polly/Types.hs
@@ -4,9 +4,9 @@
 
 -- |
 -- Module      : Network.AWS.Polly.Types
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -26,6 +26,8 @@
     , _ServiceFailureException
     , _UnsupportedPlsAlphabetException
     , _InvalidNextTokenException
+    , _MarksNotSupportedForFormatException
+    , _SsmlMarksNotSupportedForTextTypeException
     , _LexiconSizeExceededException
     , _LexiconNotFoundException
 
@@ -38,6 +40,9 @@
     -- * OutputFormat
     , OutputFormat (..)
 
+    -- * SpeechMarkType
+    , SpeechMarkType (..)
+
     -- * TextType
     , TextType (..)
 
@@ -76,38 +81,40 @@
     , vId
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types.Product
-import           Network.AWS.Polly.Types.Sum
-import           Network.AWS.Prelude
-import           Network.AWS.Sign.V4
+import Network.AWS.Lens
+import Network.AWS.Polly.Types.Product
+import Network.AWS.Polly.Types.Sum
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
 
 -- | API version @2016-06-10@ of the Amazon Polly SDK configuration.
 polly :: Service
 polly =
-    Service
-    { _svcAbbrev = "Polly"
-    , _svcSigner = v4
-    , _svcPrefix = "polly"
-    , _svcVersion = "2016-06-10"
-    , _svcEndpoint = defaultEndpoint polly
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "Polly"
-    , _svcRetry = retry
-    }
+  Service
+  { _svcAbbrev = "Polly"
+  , _svcSigner = v4
+  , _svcPrefix = "polly"
+  , _svcVersion = "2016-06-10"
+  , _svcEndpoint = defaultEndpoint polly
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseJSONError "Polly"
+  , _svcRetry = retry
+  }
   where
     retry =
-        Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
+      Exponential
+      { _retryBase = 5.0e-2
+      , _retryGrowth = 2
+      , _retryAttempts = 5
+      , _retryCheck = check
+      }
     check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
       | has (hasStatus 429) e = Just "too_many_requests"
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
-          Just "throttling_exception"
+        Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
       | has (hasStatus 504) e = Just "gateway_timeout"
       | has (hasStatus 502) e = Just "bad_gateway"
@@ -116,84 +123,112 @@
       | has (hasStatus 509) e = Just "limit_exceeded"
       | otherwise = Nothing
 
+
 -- | The language specified in the lexicon is unsupported. For a list of supported languages, see <http://docs.aws.amazon.com/polly/latest/dg/API_LexiconAttributes.html Lexicon Attributes> .
 --
 --
 _UnsupportedPlsLanguageException :: AsError a => Getting (First ServiceError) a ServiceError
 _UnsupportedPlsLanguageException =
-    _ServiceError . hasStatus 400 . hasCode "UnsupportedPlsLanguageException"
+  _MatchServiceError polly "UnsupportedPlsLanguageException" . hasStatus 400
 
+
 -- | The SSML you provided is invalid. Verify the SSML syntax, spelling of tags and values, and then try again.
 --
 --
 _InvalidSsmlException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidSsmlException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidSsmlException"
+  _MatchServiceError polly "InvalidSsmlException" . hasStatus 400
 
+
 -- | The specified sample rate is not valid.
 --
 --
 _InvalidSampleRateException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidSampleRateException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidSampleRateException"
+  _MatchServiceError polly "InvalidSampleRateException" . hasStatus 400
 
+
 -- | The maximum number of lexicons would be exceeded by this operation.
 --
 --
 _MaxLexiconsNumberExceededException :: AsError a => Getting (First ServiceError) a ServiceError
 _MaxLexiconsNumberExceededException =
-    _ServiceError .
-    hasStatus 400 . hasCode "MaxLexiconsNumberExceededException"
+  _MatchServiceError polly "MaxLexiconsNumberExceededException" . hasStatus 400
 
+
 -- | The value of the "Text" parameter is longer than the accepted limits. The limit for input text is a maximum of 3000 characters total, of which no more than 1500 can be billed characters. SSML tags are not counted as billed characters.
 --
 --
 _TextLengthExceededException :: AsError a => Getting (First ServiceError) a ServiceError
 _TextLengthExceededException =
-    _ServiceError . hasStatus 400 . hasCode "TextLengthExceededException"
+  _MatchServiceError polly "TextLengthExceededException" . hasStatus 400
 
+
 -- | The maximum size of the lexeme would be exceeded by this operation.
 --
 --
 _MaxLexemeLengthExceededException :: AsError a => Getting (First ServiceError) a ServiceError
 _MaxLexemeLengthExceededException =
-    _ServiceError . hasStatus 400 . hasCode "MaxLexemeLengthExceededException"
+  _MatchServiceError polly "MaxLexemeLengthExceededException" . hasStatus 400
 
+
 -- | Amazon Polly can't find the specified lexicon. Verify that the lexicon's name is spelled correctly, and then try again.
 --
 --
 _InvalidLexiconException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidLexiconException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidLexiconException"
+  _MatchServiceError polly "InvalidLexiconException" . hasStatus 400
 
+
 -- | An unknown condition has caused a service failure.
 --
 --
 _ServiceFailureException :: AsError a => Getting (First ServiceError) a ServiceError
 _ServiceFailureException =
-    _ServiceError . hasStatus 500 . hasCode "ServiceFailureException"
+  _MatchServiceError polly "ServiceFailureException" . hasStatus 500
 
+
 -- | The alphabet specified by the lexicon is not a supported alphabet. Valid values are @x-sampa@ and @ipa@ .
 --
 --
 _UnsupportedPlsAlphabetException :: AsError a => Getting (First ServiceError) a ServiceError
 _UnsupportedPlsAlphabetException =
-    _ServiceError . hasStatus 400 . hasCode "UnsupportedPlsAlphabetException"
+  _MatchServiceError polly "UnsupportedPlsAlphabetException" . hasStatus 400
 
+
 -- | The NextToken is invalid. Verify that it's spelled correctly, and then try again.
 --
 --
 _InvalidNextTokenException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidNextTokenException =
-    _ServiceError . hasStatus 400 . hasCode "InvalidNextTokenException"
+  _MatchServiceError polly "InvalidNextTokenException" . hasStatus 400
 
+
+-- | Speech marks are not supported for the @OutputFormat@ selected. Speech marks are only available for content in @json@ format.
+--
+--
+_MarksNotSupportedForFormatException :: AsError a => Getting (First ServiceError) a ServiceError
+_MarksNotSupportedForFormatException =
+  _MatchServiceError polly "MarksNotSupportedForFormatException" . hasStatus 400
+
+
+-- | SSML speech marks are not supported for plain text-type input.
+--
+--
+_SsmlMarksNotSupportedForTextTypeException :: AsError a => Getting (First ServiceError) a ServiceError
+_SsmlMarksNotSupportedForTextTypeException =
+  _MatchServiceError polly "SsmlMarksNotSupportedForTextTypeException" .
+  hasStatus 400
+
+
 -- | The maximum size of the specified lexicon would be exceeded by this operation.
 --
 --
 _LexiconSizeExceededException :: AsError a => Getting (First ServiceError) a ServiceError
 _LexiconSizeExceededException =
-    _ServiceError . hasStatus 400 . hasCode "LexiconSizeExceededException"
+  _MatchServiceError polly "LexiconSizeExceededException" . hasStatus 400
 
+
 -- | Amazon Polly can't find the specified lexicon. This could be caused by a lexicon that is missing, its name is misspelled or specifying a lexicon that is in a different region.
 --
 --
@@ -201,4 +236,5 @@
 --
 _LexiconNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _LexiconNotFoundException =
-    _ServiceError . hasStatus 404 . hasCode "LexiconNotFoundException"
+  _MatchServiceError polly "LexiconNotFoundException" . hasStatus 404
+
diff --git a/gen/Network/AWS/Polly/Types/Product.hs b/gen/Network/AWS/Polly/Types/Product.hs
--- a/gen/Network/AWS/Polly/Types/Product.hs
+++ b/gen/Network/AWS/Polly/Types/Product.hs
@@ -9,17 +9,17 @@
 
 -- |
 -- Module      : Network.AWS.Polly.Types.Product
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.Polly.Types.Product where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types.Sum
-import           Network.AWS.Prelude
+import Network.AWS.Lens
+import Network.AWS.Polly.Types.Sum
+import Network.AWS.Prelude
 
 -- | Provides lexicon name and lexicon content in string format. For more information, see <https://www.w3.org/TR/pronunciation-lexicon/ Pronunciation Lexicon Specification (PLS) Version 1.0> .
 --
@@ -27,10 +27,11 @@
 --
 -- /See:/ 'lexicon' smart constructor.
 data Lexicon = Lexicon'
-    { _lContent :: !(Maybe Text)
-    , _lName    :: !(Maybe (Sensitive Text))
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lContent :: !(Maybe Text)
+  , _lName    :: !(Maybe (Sensitive Text))
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Lexicon' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -40,12 +41,9 @@
 -- * 'lName' - Name of the lexicon.
 lexicon
     :: Lexicon
-lexicon =
-    Lexicon'
-    { _lContent = Nothing
-    , _lName = Nothing
-    }
+lexicon = Lexicon' {_lContent = Nothing, _lName = Nothing}
 
+
 -- | Lexicon content in string format. The content of a lexicon must be in PLS format.
 lContent :: Lens' Lexicon (Maybe Text)
 lContent = lens _lContent (\ s a -> s{_lContent = a});
@@ -60,9 +58,9 @@
               (\ x ->
                  Lexicon' <$> (x .:? "Content") <*> (x .:? "Name"))
 
-instance Hashable Lexicon
+instance Hashable Lexicon where
 
-instance NFData Lexicon
+instance NFData Lexicon where
 
 -- | Contains metadata describing the lexicon such as the number of lexemes, language code, and so on. For more information, see <http://docs.aws.amazon.com/polly/latest/dg/managing-lexicons.html Managing Lexicons> .
 --
@@ -70,14 +68,15 @@
 --
 -- /See:/ 'lexiconAttributes' smart constructor.
 data LexiconAttributes = LexiconAttributes'
-    { _laLanguageCode :: !(Maybe LanguageCode)
-    , _laSize         :: !(Maybe Int)
-    , _laLexemesCount :: !(Maybe Int)
-    , _laLexiconARN   :: !(Maybe Text)
-    , _laAlphabet     :: !(Maybe Text)
-    , _laLastModified :: !(Maybe POSIX)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _laLanguageCode :: !(Maybe LanguageCode)
+  , _laSize         :: !(Maybe Int)
+  , _laLexemesCount :: !(Maybe Int)
+  , _laLexiconARN   :: !(Maybe Text)
+  , _laAlphabet     :: !(Maybe Text)
+  , _laLastModified :: !(Maybe POSIX)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'LexiconAttributes' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -96,15 +95,16 @@
 lexiconAttributes
     :: LexiconAttributes
 lexiconAttributes =
-    LexiconAttributes'
-    { _laLanguageCode = Nothing
-    , _laSize = Nothing
-    , _laLexemesCount = Nothing
-    , _laLexiconARN = Nothing
-    , _laAlphabet = Nothing
-    , _laLastModified = Nothing
-    }
+  LexiconAttributes'
+  { _laLanguageCode = Nothing
+  , _laSize = Nothing
+  , _laLexemesCount = Nothing
+  , _laLexiconARN = Nothing
+  , _laAlphabet = Nothing
+  , _laLastModified = Nothing
+  }
 
+
 -- | Language code that the lexicon applies to. A lexicon with a language code such as "en" would be applied to all English languages (en-GB, en-US, en-AUS, en-WLS, and so on.
 laLanguageCode :: Lens' LexiconAttributes (Maybe LanguageCode)
 laLanguageCode = lens _laLanguageCode (\ s a -> s{_laLanguageCode = a});
@@ -140,9 +140,9 @@
                      <*> (x .:? "Alphabet")
                      <*> (x .:? "LastModified"))
 
-instance Hashable LexiconAttributes
+instance Hashable LexiconAttributes where
 
-instance NFData LexiconAttributes
+instance NFData LexiconAttributes where
 
 -- | Describes the content of the lexicon.
 --
@@ -150,10 +150,11 @@
 --
 -- /See:/ 'lexiconDescription' smart constructor.
 data LexiconDescription = LexiconDescription'
-    { _ldAttributes :: !(Maybe LexiconAttributes)
-    , _ldName       :: !(Maybe (Sensitive Text))
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _ldAttributes :: !(Maybe LexiconAttributes)
+  , _ldName       :: !(Maybe (Sensitive Text))
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'LexiconDescription' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -164,11 +165,9 @@
 lexiconDescription
     :: LexiconDescription
 lexiconDescription =
-    LexiconDescription'
-    { _ldAttributes = Nothing
-    , _ldName = Nothing
-    }
+  LexiconDescription' {_ldAttributes = Nothing, _ldName = Nothing}
 
+
 -- | Provides lexicon metadata.
 ldAttributes :: Lens' LexiconDescription (Maybe LexiconAttributes)
 ldAttributes = lens _ldAttributes (\ s a -> s{_ldAttributes = a});
@@ -184,9 +183,9 @@
                  LexiconDescription' <$>
                    (x .:? "Attributes") <*> (x .:? "Name"))
 
-instance Hashable LexiconDescription
+instance Hashable LexiconDescription where
 
-instance NFData LexiconDescription
+instance NFData LexiconDescription where
 
 -- | Description of the voice.
 --
@@ -194,13 +193,14 @@
 --
 -- /See:/ 'voice' smart constructor.
 data Voice = Voice'
-    { _vLanguageCode :: !(Maybe LanguageCode)
-    , _vLanguageName :: !(Maybe Text)
-    , _vGender       :: !(Maybe Gender)
-    , _vName         :: !(Maybe Text)
-    , _vId           :: !(Maybe VoiceId)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _vLanguageCode :: !(Maybe LanguageCode)
+  , _vLanguageName :: !(Maybe Text)
+  , _vGender       :: !(Maybe Gender)
+  , _vName         :: !(Maybe Text)
+  , _vId           :: !(Maybe VoiceId)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'Voice' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -217,14 +217,15 @@
 voice
     :: Voice
 voice =
-    Voice'
-    { _vLanguageCode = Nothing
-    , _vLanguageName = Nothing
-    , _vGender = Nothing
-    , _vName = Nothing
-    , _vId = Nothing
-    }
+  Voice'
+  { _vLanguageCode = Nothing
+  , _vLanguageName = Nothing
+  , _vGender = Nothing
+  , _vName = Nothing
+  , _vId = Nothing
+  }
 
+
 -- | Language code of the voice.
 vLanguageCode :: Lens' Voice (Maybe LanguageCode)
 vLanguageCode = lens _vLanguageCode (\ s a -> s{_vLanguageCode = a});
@@ -255,6 +256,6 @@
                      <*> (x .:? "Name")
                      <*> (x .:? "Id"))
 
-instance Hashable Voice
+instance Hashable Voice where
 
-instance NFData Voice
+instance NFData Voice where
diff --git a/gen/Network/AWS/Polly/Types/Sum.hs b/gen/Network/AWS/Polly/Types/Sum.hs
--- a/gen/Network/AWS/Polly/Types/Sum.hs
+++ b/gen/Network/AWS/Polly/Types/Sum.hs
@@ -9,21 +9,22 @@
 
 -- |
 -- Module      : Network.AWS.Polly.Types.Sum
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.Polly.Types.Sum where
 
-import           Network.AWS.Prelude
+import Network.AWS.Prelude
 
 data Gender
-    = Female
-    | Male
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Female
+  | Male
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText Gender where
     parser = takeLowerText >>= \case
         "female" -> pure Female
@@ -46,32 +47,33 @@
     parseJSON = parseJSONText "Gender"
 
 data LanguageCode
-    = CyGb
-    | DaDk
-    | DeDe
-    | EnAu
-    | EnGb
-    | EnGbWls
-    | EnIn
-    | EnUs
-    | EsEs
-    | EsUs
-    | FrCa
-    | FrFr
-    | IsIs
-    | ItIt
-    | JaJp
-    | NbNo
-    | NlNl
-    | PlPl
-    | PtBr
-    | PtPt
-    | RoRo
-    | RuRu
-    | SvSe
-    | TrTr
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = CyGb
+  | DaDk
+  | DeDe
+  | EnAu
+  | EnGb
+  | EnGbWls
+  | EnIn
+  | EnUs
+  | EsEs
+  | EsUs
+  | FrCa
+  | FrFr
+  | IsIs
+  | ItIt
+  | JaJp
+  | NbNo
+  | NlNl
+  | PlPl
+  | PtBr
+  | PtPt
+  | RoRo
+  | RuRu
+  | SvSe
+  | TrTr
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText LanguageCode where
     parser = takeLowerText >>= \case
         "cy-gb" -> pure CyGb
@@ -141,21 +143,25 @@
     parseJSON = parseJSONText "LanguageCode"
 
 data OutputFormat
-    = MP3
-    | OggVorbis
-    | Pcm
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = JSON
+  | MP3
+  | OggVorbis
+  | Pcm
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText OutputFormat where
     parser = takeLowerText >>= \case
+        "json" -> pure JSON
         "mp3" -> pure MP3
         "ogg_vorbis" -> pure OggVorbis
         "pcm" -> pure Pcm
         e -> fromTextError $ "Failure parsing OutputFormat from value: '" <> e
-           <> "'. Accepted values: mp3, ogg_vorbis, pcm"
+           <> "'. Accepted values: json, mp3, ogg_vorbis, pcm"
 
 instance ToText OutputFormat where
     toText = \case
+        JSON -> "json"
         MP3 -> "mp3"
         OggVorbis -> "ogg_vorbis"
         Pcm -> "pcm"
@@ -169,22 +175,56 @@
 instance ToJSON OutputFormat where
     toJSON = toJSONText
 
+data SpeechMarkType
+  = Sentence
+  | Ssml
+  | Viseme
+  | Word
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText SpeechMarkType where
+    parser = takeLowerText >>= \case
+        "sentence" -> pure Sentence
+        "ssml" -> pure Ssml
+        "viseme" -> pure Viseme
+        "word" -> pure Word
+        e -> fromTextError $ "Failure parsing SpeechMarkType from value: '" <> e
+           <> "'. Accepted values: sentence, ssml, viseme, word"
+
+instance ToText SpeechMarkType where
+    toText = \case
+        Sentence -> "sentence"
+        Ssml -> "ssml"
+        Viseme -> "viseme"
+        Word -> "word"
+
+instance Hashable     SpeechMarkType
+instance NFData       SpeechMarkType
+instance ToByteString SpeechMarkType
+instance ToQuery      SpeechMarkType
+instance ToHeader     SpeechMarkType
+
+instance ToJSON SpeechMarkType where
+    toJSON = toJSONText
+
 data TextType
-    = Ssml
-    | Text
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = TTSsml
+  | TTText
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText TextType where
     parser = takeLowerText >>= \case
-        "ssml" -> pure Ssml
-        "text" -> pure Text
+        "ssml" -> pure TTSsml
+        "text" -> pure TTText
         e -> fromTextError $ "Failure parsing TextType from value: '" <> e
            <> "'. Accepted values: ssml, text"
 
 instance ToText TextType where
     toText = \case
-        Ssml -> "ssml"
-        Text -> "text"
+        TTSsml -> "ssml"
+        TTText -> "text"
 
 instance Hashable     TextType
 instance NFData       TextType
@@ -196,55 +236,59 @@
     toJSON = toJSONText
 
 data VoiceId
-    = Amy
-    | Astrid
-    | Brian
-    | Carla
-    | Carmen
-    | Celine
-    | Chantal
-    | Conchita
-    | Cristiano
-    | Dora
-    | Emma
-    | Enrique
-    | Ewa
-    | Filiz
-    | Geraint
-    | Giorgio
-    | Gwyneth
-    | Hans
-    | Ines
-    | Ivy
-    | Jacek
-    | Jan
-    | Joanna
-    | Joey
-    | Justin
-    | Karl
-    | Kendra
-    | Kimberly
-    | Liv
-    | Lotte
-    | Mads
-    | Maja
-    | Marlene
-    | Mathieu
-    | Maxim
-    | Miguel
-    | Mizuki
-    | Naja
-    | Nicole
-    | Penelope
-    | Raveena
-    | Ricardo
-    | Ruben
-    | Russell
-    | Salli
-    | Tatyana
-    | Vitoria
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Amy
+  | Astrid
+  | Brian
+  | Carla
+  | Carmen
+  | Celine
+  | Chantal
+  | Conchita
+  | Cristiano
+  | Dora
+  | Emma
+  | Enrique
+  | Ewa
+  | Filiz
+  | Geraint
+  | Giorgio
+  | Gwyneth
+  | Hans
+  | Ines
+  | Ivy
+  | Jacek
+  | Jan
+  | Joanna
+  | Joey
+  | Justin
+  | Karl
+  | Kendra
+  | Kimberly
+  | Liv
+  | Lotte
+  | Mads
+  | Maja
+  | Marlene
+  | Mathieu
+  | Matthew
+  | Maxim
+  | Miguel
+  | Mizuki
+  | Naja
+  | Nicole
+  | Penelope
+  | Raveena
+  | Ricardo
+  | Ruben
+  | Russell
+  | Salli
+  | Takumi
+  | Tatyana
+  | Vicki
+  | Vitoria
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText VoiceId where
     parser = takeLowerText >>= \case
         "amy" -> pure Amy
@@ -281,6 +325,7 @@
         "maja" -> pure Maja
         "marlene" -> pure Marlene
         "mathieu" -> pure Mathieu
+        "matthew" -> pure Matthew
         "maxim" -> pure Maxim
         "miguel" -> pure Miguel
         "mizuki" -> pure Mizuki
@@ -292,10 +337,12 @@
         "ruben" -> pure Ruben
         "russell" -> pure Russell
         "salli" -> pure Salli
+        "takumi" -> pure Takumi
         "tatyana" -> pure Tatyana
+        "vicki" -> pure Vicki
         "vitoria" -> pure Vitoria
         e -> fromTextError $ "Failure parsing VoiceId from value: '" <> e
-           <> "'. Accepted values: amy, astrid, brian, carla, carmen, celine, chantal, conchita, cristiano, dora, emma, enrique, ewa, filiz, geraint, giorgio, gwyneth, hans, ines, ivy, jacek, jan, joanna, joey, justin, karl, kendra, kimberly, liv, lotte, mads, maja, marlene, mathieu, maxim, miguel, mizuki, naja, nicole, penelope, raveena, ricardo, ruben, russell, salli, tatyana, vitoria"
+           <> "'. Accepted values: amy, astrid, brian, carla, carmen, celine, chantal, conchita, cristiano, dora, emma, enrique, ewa, filiz, geraint, giorgio, gwyneth, hans, ines, ivy, jacek, jan, joanna, joey, justin, karl, kendra, kimberly, liv, lotte, mads, maja, marlene, mathieu, matthew, maxim, miguel, mizuki, naja, nicole, penelope, raveena, ricardo, ruben, russell, salli, takumi, tatyana, vicki, vitoria"
 
 instance ToText VoiceId where
     toText = \case
@@ -333,6 +380,7 @@
         Maja -> "Maja"
         Marlene -> "Marlene"
         Mathieu -> "Mathieu"
+        Matthew -> "Matthew"
         Maxim -> "Maxim"
         Miguel -> "Miguel"
         Mizuki -> "Mizuki"
@@ -344,7 +392,9 @@
         Ruben -> "Ruben"
         Russell -> "Russell"
         Salli -> "Salli"
+        Takumi -> "Takumi"
         Tatyana -> "Tatyana"
+        Vicki -> "Vicki"
         Vitoria -> "Vitoria"
 
 instance Hashable     VoiceId
diff --git a/gen/Network/AWS/Polly/Waiters.hs b/gen/Network/AWS/Polly/Waiters.hs
--- a/gen/Network/AWS/Polly/Waiters.hs
+++ b/gen/Network/AWS/Polly/Waiters.hs
@@ -7,15 +7,15 @@
 
 -- |
 -- Module      : Network.AWS.Polly.Waiters
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.Polly.Waiters where
 
-import           Network.AWS.Lens
-import           Network.AWS.Polly.Types
-import           Network.AWS.Prelude
-import           Network.AWS.Waiter
+import Network.AWS.Lens
+import Network.AWS.Polly.Types
+import Network.AWS.Prelude
+import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,9 +2,9 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
diff --git a/test/Test/AWS/Gen/Polly.hs b/test/Test/AWS/Gen/Polly.hs
--- a/test/Test/AWS/Gen/Polly.hs
+++ b/test/Test/AWS/Gen/Polly.hs
@@ -5,20 +5,20 @@
 
 -- |
 -- Module      : Test.AWS.Gen.Polly
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Test.AWS.Gen.Polly where
 
 import Data.Proxy
+import Network.AWS.Polly
 import Test.AWS.Fixture
+import Test.AWS.Polly.Internal
 import Test.AWS.Prelude
 import Test.Tasty
-import Network.AWS.Polly
-import Test.AWS.Polly.Internal
 
 -- Auto-generated: the actual test selection needs to be manually placed into
 -- the top-level so that real test data can be incrementally added.
