diff --git a/amazonka-elastictranscoder.cabal b/amazonka-elastictranscoder.cabal
--- a/amazonka-elastictranscoder.cabal
+++ b/amazonka-elastictranscoder.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-elastictranscoder
-version:               0.0.6
+version:               0.0.7
 synopsis:              Amazon Elastic Transcoder SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -59,5 +59,5 @@
     other-modules:
 
     build-depends:
-          amazonka-core == 0.0.6.*
+          amazonka-core == 0.0.7.*
         , base          >= 4.7     && < 5
diff --git a/gen/Network/AWS/ElasticTranscoder/CancelJob.hs b/gen/Network/AWS/ElasticTranscoder/CancelJob.hs
--- a/gen/Network/AWS/ElasticTranscoder/CancelJob.hs
+++ b/gen/Network/AWS/ElasticTranscoder/CancelJob.hs
@@ -24,6 +24,10 @@
 
 -- | The CancelJob operation cancels an unfinished job.
 --
+-- You can only cancel a job that has a status of 'Submitted'. To prevent a
+-- pipeline from starting to process a job while you're getting the job
+-- identifier, use 'UpdatePipelineStatus' to temporarily pause the pipeline.
+--
 -- <http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/CancelJob.html>
 module Network.AWS.ElasticTranscoder.CancelJob
     (
diff --git a/gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs b/gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs
--- a/gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs
+++ b/gen/Network/AWS/ElasticTranscoder/CreatePipeline.hs
@@ -33,6 +33,7 @@
     -- ** Request constructor
     , createPipeline
     -- ** Request lenses
+    , cp1AwsKmsKeyArn
     , cp1ContentConfig
     , cp1InputBucket
     , cp1Name
@@ -55,7 +56,8 @@
 import qualified GHC.Exts
 
 data CreatePipeline = CreatePipeline
-    { _cp1ContentConfig   :: Maybe PipelineOutputConfig
+    { _cp1AwsKmsKeyArn    :: Maybe Text
+    , _cp1ContentConfig   :: Maybe PipelineOutputConfig
     , _cp1InputBucket     :: Text
     , _cp1Name            :: Text
     , _cp1Notifications   :: Maybe Notifications
@@ -68,6 +70,8 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
+-- * 'cp1AwsKmsKeyArn' @::@ 'Maybe' 'Text'
+--
 -- * 'cp1ContentConfig' @::@ 'Maybe' 'PipelineOutputConfig'
 --
 -- * 'cp1InputBucket' @::@ 'Text'
@@ -91,11 +95,22 @@
     , _cp1InputBucket     = p2
     , _cp1Role            = p3
     , _cp1OutputBucket    = Nothing
+    , _cp1AwsKmsKeyArn    = Nothing
     , _cp1Notifications   = Nothing
     , _cp1ContentConfig   = Nothing
     , _cp1ThumbnailConfig = Nothing
     }
 
+-- | The AWS Key Management Service (AWS KMS) key that you want to use with this
+-- pipeline.
+--
+-- If you use either 'S3' or 'S3-AWS-KMS' as your 'Encryption:Mode', you don't need
+-- to provide a key with your job because a default key, known as an AWS-KMS
+-- key, is created for you automatically. You need to provide an AWS-KMS key
+-- only if you want to use a non-default AWS-KMS key, or if you are using an 'Encryption:Mode' of 'AES-PKCS7', 'AES-CTR', or 'AES-GCM'.
+cp1AwsKmsKeyArn :: Lens' CreatePipeline (Maybe Text)
+cp1AwsKmsKeyArn = lens _cp1AwsKmsKeyArn (\s a -> s { _cp1AwsKmsKeyArn = a })
+
 -- | The optional 'ContentConfig' object specifies information about the Amazon S3
 -- bucket in which you want Elastic Transcoder to save transcoded files and
 -- playlists: which bucket to use, which users you want to have access to the
@@ -274,6 +289,7 @@
         , "InputBucket"     .= _cp1InputBucket
         , "OutputBucket"    .= _cp1OutputBucket
         , "Role"            .= _cp1Role
+        , "AwsKmsKeyArn"    .= _cp1AwsKmsKeyArn
         , "Notifications"   .= _cp1Notifications
         , "ContentConfig"   .= _cp1ContentConfig
         , "ThumbnailConfig" .= _cp1ThumbnailConfig
diff --git a/gen/Network/AWS/ElasticTranscoder/DeletePreset.hs b/gen/Network/AWS/ElasticTranscoder/DeletePreset.hs
--- a/gen/Network/AWS/ElasticTranscoder/DeletePreset.hs
+++ b/gen/Network/AWS/ElasticTranscoder/DeletePreset.hs
@@ -25,6 +25,11 @@
 -- | The DeletePreset operation removes a preset that you've added in an AWS
 -- region.
 --
+-- You can't delete the default presets that are included with Elastic
+-- Transcoder.
+--
+--
+--
 -- <http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/DeletePreset.html>
 module Network.AWS.ElasticTranscoder.DeletePreset
     (
diff --git a/gen/Network/AWS/ElasticTranscoder/ListJobsByPipeline.hs b/gen/Network/AWS/ElasticTranscoder/ListJobsByPipeline.hs
--- a/gen/Network/AWS/ElasticTranscoder/ListJobsByPipeline.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ListJobsByPipeline.hs
@@ -149,7 +149,7 @@
 
 instance FromJSON ListJobsByPipelineResponse where
     parseJSON = withObject "ListJobsByPipelineResponse" $ \o -> ListJobsByPipelineResponse
-        <$> o .:  "Jobs"
+        <$> o .:? "Jobs" .!= mempty
         <*> o .:? "NextPageToken"
 
 instance AWSPager ListJobsByPipeline where
diff --git a/gen/Network/AWS/ElasticTranscoder/ListJobsByStatus.hs b/gen/Network/AWS/ElasticTranscoder/ListJobsByStatus.hs
--- a/gen/Network/AWS/ElasticTranscoder/ListJobsByStatus.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ListJobsByStatus.hs
@@ -147,7 +147,7 @@
 
 instance FromJSON ListJobsByStatusResponse where
     parseJSON = withObject "ListJobsByStatusResponse" $ \o -> ListJobsByStatusResponse
-        <$> o .:  "Jobs"
+        <$> o .:? "Jobs" .!= mempty
         <*> o .:? "NextPageToken"
 
 instance AWSPager ListJobsByStatus where
diff --git a/gen/Network/AWS/ElasticTranscoder/ListPipelines.hs b/gen/Network/AWS/ElasticTranscoder/ListPipelines.hs
--- a/gen/Network/AWS/ElasticTranscoder/ListPipelines.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ListPipelines.hs
@@ -132,7 +132,7 @@
 instance FromJSON ListPipelinesResponse where
     parseJSON = withObject "ListPipelinesResponse" $ \o -> ListPipelinesResponse
         <$> o .:? "NextPageToken"
-        <*> o .:  "Pipelines"
+        <*> o .:? "Pipelines" .!= mempty
 
 instance AWSPager ListPipelines where
     page rq rs
diff --git a/gen/Network/AWS/ElasticTranscoder/ListPresets.hs b/gen/Network/AWS/ElasticTranscoder/ListPresets.hs
--- a/gen/Network/AWS/ElasticTranscoder/ListPresets.hs
+++ b/gen/Network/AWS/ElasticTranscoder/ListPresets.hs
@@ -133,7 +133,7 @@
 instance FromJSON ListPresetsResponse where
     parseJSON = withObject "ListPresetsResponse" $ \o -> ListPresetsResponse
         <$> o .:? "NextPageToken"
-        <*> o .:  "Presets"
+        <*> o .:? "Presets" .!= mempty
 
 instance AWSPager ListPresets where
     page rq rs
diff --git a/gen/Network/AWS/ElasticTranscoder/TestRole.hs b/gen/Network/AWS/ElasticTranscoder/TestRole.hs
--- a/gen/Network/AWS/ElasticTranscoder/TestRole.hs
+++ b/gen/Network/AWS/ElasticTranscoder/TestRole.hs
@@ -160,5 +160,5 @@
 
 instance FromJSON TestRoleResponse where
     parseJSON = withObject "TestRoleResponse" $ \o -> TestRoleResponse
-        <$> o .:  "Messages"
+        <$> o .:? "Messages" .!= mempty
         <*> o .:? "Success"
diff --git a/gen/Network/AWS/ElasticTranscoder/Types.hs b/gen/Network/AWS/ElasticTranscoder/Types.hs
--- a/gen/Network/AWS/ElasticTranscoder/Types.hs
+++ b/gen/Network/AWS/ElasticTranscoder/Types.hs
@@ -62,6 +62,7 @@
     , joCaptions
     , joComposition
     , joDuration
+    , joEncryption
     , joHeight
     , joId
     , joKey
@@ -70,6 +71,7 @@
     , joSegmentDuration
     , joStatus
     , joStatusDetail
+    , joThumbnailEncryption
     , joThumbnailPattern
     , joWatermarks
     , joWidth
@@ -90,6 +92,7 @@
     -- * CaptionSource
     , CaptionSource
     , captionSource
+    , csEncryption
     , csKey
     , csLabel
     , csLanguage
@@ -99,6 +102,7 @@
     , Artwork
     , artwork
     , aAlbumArtFormat
+    , aEncryption
     , aInputKey
     , aMaxHeight
     , aMaxWidth
@@ -117,10 +121,12 @@
     , cjoAlbumArt
     , cjoCaptions
     , cjoComposition
+    , cjoEncryption
     , cjoKey
     , cjoPresetId
     , cjoRotate
     , cjoSegmentDuration
+    , cjoThumbnailEncryption
     , cjoThumbnailPattern
     , cjoWatermarks
 
@@ -145,6 +151,14 @@
     , tResolution
     , tSizingPolicy
 
+    -- * Encryption
+    , Encryption
+    , encryption
+    , eInitializationVector
+    , eKey
+    , eKeyMd5
+    , eMode
+
     -- * JobAlbumArt
     , JobAlbumArt
     , jobAlbumArt
@@ -154,6 +168,7 @@
     -- * JobWatermark
     , JobWatermark
     , jobWatermark
+    , jwEncryption
     , jwInputKey
     , jwPresetWatermarkId
 
@@ -161,6 +176,7 @@
     , Pipeline
     , pipeline
     , pArn
+    , pAwsKmsKeyArn
     , pContentConfig
     , pId
     , pInputBucket
@@ -187,6 +203,7 @@
     -- * CaptionFormat
     , CaptionFormat
     , captionFormat
+    , cfEncryption
     , cfFormat
     , cfPattern
 
@@ -257,6 +274,7 @@
     , jobInput
     , jiAspectRatio
     , jiContainer
+    , jiEncryption
     , jiFrameRate
     , jiInterlaced
     , jiKey
@@ -348,7 +366,7 @@
 instance FromJSON PipelineOutputConfig where
     parseJSON = withObject "PipelineOutputConfig" $ \o -> PipelineOutputConfig
         <$> o .:? "Bucket"
-        <*> o .:  "Permissions"
+        <*> o .:? "Permissions" .!= mempty
         <*> o .:? "StorageClass"
 
 instance ToJSON PipelineOutputConfig where
@@ -438,7 +456,7 @@
     parseJSON = withObject "CreateJobPlaylist" $ \o -> CreateJobPlaylist
         <$> o .:? "Format"
         <*> o .:? "Name"
-        <*> o .:  "OutputKeys"
+        <*> o .:? "OutputKeys" .!= mempty
 
 instance ToJSON CreateJobPlaylist where
     toJSON CreateJobPlaylist{..} = object
@@ -491,7 +509,7 @@
 -- MergeRetain: Elastic Transcoder transcodes both embedded and sidecar
 -- captions into outputs. If captions for a language are embedded in the input
 -- file and also appear in a sidecar file, Elastic Transcoder uses the embedded
--- captions and ignores the sidecar captions for that language. If CaptionSources
+-- captions and ignores the sidecar captions for that language. If 'CaptionSources'
 -- is empty, Elastic Transcoder omits all sidecar captions from the output
 -- files.
 --
@@ -504,8 +522,8 @@
 
 instance FromJSON Captions where
     parseJSON = withObject "Captions" $ \o -> Captions
-        <$> o .:  "CaptionFormats"
-        <*> o .:  "CaptionSources"
+        <$> o .:? "CaptionFormats" .!= mempty
+        <*> o .:? "CaptionSources" .!= mempty
         <*> o .:? "MergePolicy"
 
 instance ToJSON Captions where
@@ -538,9 +556,14 @@
 --
 -- 'auto': If you specify 'auto', Elastic Transcoder will select the profile
 -- based on the bit rate selected for the output file.  'AAC-LC': The most common
--- AAC profile. Use for bitrates larger than 64 kbps.  'HE-AAC': Not supported on
--- some older players and devices. Use for bitrates between 40 and 80 kbps.  'HE-AACv2': Not supported on some players and devices. Use for bitrates less than 48
+-- AAC profile. Use for bit rates larger than 64 kbps.  'HE-AAC': Not supported on
+-- some older players and devices. Use for bit rates between 40 and 80 kbps.  'HE-AACv2': Not supported on some players and devices. Use for bit rates less than 48
 -- kbps.  All outputs in a 'Smooth' playlist must have the same value for 'Profile'.
+--
+-- If you created any presets before AAC profiles were added, Elastic
+-- Transcoder automatically updated your presets to use AAC-LC. You can change
+-- the value as required.
+--
 acoProfile :: Lens' AudioCodecOptions (Maybe Text)
 acoProfile = lens _acoProfile (\s a -> s { _acoProfile = a })
 
@@ -554,21 +577,23 @@
         ]
 
 data JobOutput = JobOutput
-    { _joAlbumArt         :: Maybe JobAlbumArt
-    , _joCaptions         :: Maybe Captions
-    , _joComposition      :: List "Composition" Clip
-    , _joDuration         :: Maybe Integer
-    , _joHeight           :: Maybe Int
-    , _joId               :: Maybe Text
-    , _joKey              :: Maybe Text
-    , _joPresetId         :: Maybe Text
-    , _joRotate           :: Maybe Text
-    , _joSegmentDuration  :: Maybe Text
-    , _joStatus           :: Maybe Text
-    , _joStatusDetail     :: Maybe Text
-    , _joThumbnailPattern :: Maybe Text
-    , _joWatermarks       :: List "Watermarks" JobWatermark
-    , _joWidth            :: Maybe Int
+    { _joAlbumArt            :: Maybe JobAlbumArt
+    , _joCaptions            :: Maybe Captions
+    , _joComposition         :: List "Composition" Clip
+    , _joDuration            :: Maybe Integer
+    , _joEncryption          :: Maybe Encryption
+    , _joHeight              :: Maybe Int
+    , _joId                  :: Maybe Text
+    , _joKey                 :: Maybe Text
+    , _joPresetId            :: Maybe Text
+    , _joRotate              :: Maybe Text
+    , _joSegmentDuration     :: Maybe Text
+    , _joStatus              :: Maybe Text
+    , _joStatusDetail        :: Maybe Text
+    , _joThumbnailEncryption :: Maybe Encryption
+    , _joThumbnailPattern    :: Maybe Text
+    , _joWatermarks          :: List "Watermarks" JobWatermark
+    , _joWidth               :: Maybe Int
     } deriving (Eq, Show)
 
 -- | 'JobOutput' constructor.
@@ -583,6 +608,8 @@
 --
 -- * 'joDuration' @::@ 'Maybe' 'Integer'
 --
+-- * 'joEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'joHeight' @::@ 'Maybe' 'Int'
 --
 -- * 'joId' @::@ 'Maybe' 'Text'
@@ -599,6 +626,8 @@
 --
 -- * 'joStatusDetail' @::@ 'Maybe' 'Text'
 --
+-- * 'joThumbnailEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'joThumbnailPattern' @::@ 'Maybe' 'Text'
 --
 -- * 'joWatermarks' @::@ ['JobWatermark']
@@ -607,21 +636,23 @@
 --
 jobOutput :: JobOutput
 jobOutput = JobOutput
-    { _joId               = Nothing
-    , _joKey              = Nothing
-    , _joThumbnailPattern = Nothing
-    , _joRotate           = Nothing
-    , _joPresetId         = Nothing
-    , _joSegmentDuration  = Nothing
-    , _joStatus           = Nothing
-    , _joStatusDetail     = Nothing
-    , _joDuration         = Nothing
-    , _joWidth            = Nothing
-    , _joHeight           = Nothing
-    , _joWatermarks       = mempty
-    , _joAlbumArt         = Nothing
-    , _joComposition      = mempty
-    , _joCaptions         = Nothing
+    { _joId                  = Nothing
+    , _joKey                 = Nothing
+    , _joThumbnailPattern    = Nothing
+    , _joThumbnailEncryption = Nothing
+    , _joRotate              = Nothing
+    , _joPresetId            = Nothing
+    , _joSegmentDuration     = Nothing
+    , _joStatus              = Nothing
+    , _joStatusDetail        = Nothing
+    , _joDuration            = Nothing
+    , _joWidth               = Nothing
+    , _joHeight              = Nothing
+    , _joWatermarks          = mempty
+    , _joAlbumArt            = Nothing
+    , _joComposition         = mempty
+    , _joCaptions            = Nothing
+    , _joEncryption          = Nothing
     }
 
 -- | The album art to be associated with the output file, if any.
@@ -684,6 +715,13 @@
 joDuration :: Lens' JobOutput (Maybe Integer)
 joDuration = lens _joDuration (\s a -> s { _joDuration = a })
 
+-- | The encryption settings, if any, that you want Elastic Transcoder to apply to
+-- your output files. If you choose to use encryption, you must specify a mode
+-- to use. If you choose not to use encryption, Elastic Transcoder will write an
+-- unencrypted file to your Amazon S3 bucket.
+joEncryption :: Lens' JobOutput (Maybe Encryption)
+joEncryption = lens _joEncryption (\s a -> s { _joEncryption = a })
+
 -- | Height of the output file, in pixels.
 joHeight :: Lens' JobOutput (Maybe Int)
 joHeight = lens _joHeight (\s a -> s { _joHeight = a })
@@ -755,6 +793,12 @@
 joStatusDetail :: Lens' JobOutput (Maybe Text)
 joStatusDetail = lens _joStatusDetail (\s a -> s { _joStatusDetail = a })
 
+-- | The encryption settings, if any, that you want Elastic Transcoder to apply to
+-- your thumbnail.
+joThumbnailEncryption :: Lens' JobOutput (Maybe Encryption)
+joThumbnailEncryption =
+    lens _joThumbnailEncryption (\s a -> s { _joThumbnailEncryption = a })
+
 -- | Whether you want Elastic Transcoder to create thumbnails for your videos and,
 -- if so, how you want Elastic Transcoder to name the files.
 --
@@ -809,8 +853,9 @@
     parseJSON = withObject "JobOutput" $ \o -> JobOutput
         <$> o .:? "AlbumArt"
         <*> o .:? "Captions"
-        <*> o .:  "Composition"
+        <*> o .:? "Composition" .!= mempty
         <*> o .:? "Duration"
+        <*> o .:? "Encryption"
         <*> o .:? "Height"
         <*> o .:? "Id"
         <*> o .:? "Key"
@@ -819,27 +864,30 @@
         <*> o .:? "SegmentDuration"
         <*> o .:? "Status"
         <*> o .:? "StatusDetail"
+        <*> o .:? "ThumbnailEncryption"
         <*> o .:? "ThumbnailPattern"
-        <*> o .:  "Watermarks"
+        <*> o .:? "Watermarks" .!= mempty
         <*> o .:? "Width"
 
 instance ToJSON JobOutput where
     toJSON JobOutput{..} = object
-        [ "Id"               .= _joId
-        , "Key"              .= _joKey
-        , "ThumbnailPattern" .= _joThumbnailPattern
-        , "Rotate"           .= _joRotate
-        , "PresetId"         .= _joPresetId
-        , "SegmentDuration"  .= _joSegmentDuration
-        , "Status"           .= _joStatus
-        , "StatusDetail"     .= _joStatusDetail
-        , "Duration"         .= _joDuration
-        , "Width"            .= _joWidth
-        , "Height"           .= _joHeight
-        , "Watermarks"       .= _joWatermarks
-        , "AlbumArt"         .= _joAlbumArt
-        , "Composition"      .= _joComposition
-        , "Captions"         .= _joCaptions
+        [ "Id"                  .= _joId
+        , "Key"                 .= _joKey
+        , "ThumbnailPattern"    .= _joThumbnailPattern
+        , "ThumbnailEncryption" .= _joThumbnailEncryption
+        , "Rotate"              .= _joRotate
+        , "PresetId"            .= _joPresetId
+        , "SegmentDuration"     .= _joSegmentDuration
+        , "Status"              .= _joStatus
+        , "StatusDetail"        .= _joStatusDetail
+        , "Duration"            .= _joDuration
+        , "Width"               .= _joWidth
+        , "Height"              .= _joHeight
+        , "Watermarks"          .= _joWatermarks
+        , "AlbumArt"            .= _joAlbumArt
+        , "Composition"         .= _joComposition
+        , "Captions"            .= _joCaptions
+        , "Encryption"          .= _joEncryption
         ]
 
 data Job' = Job'
@@ -955,9 +1003,9 @@
         <*> o .:? "Input"
         <*> o .:? "Output"
         <*> o .:? "OutputKeyPrefix"
-        <*> o .:  "Outputs"
+        <*> o .:? "Outputs" .!= mempty
         <*> o .:? "PipelineId"
-        <*> o .:  "Playlists"
+        <*> o .:? "Playlists" .!= mempty
         <*> o .:? "Status"
 
 instance ToJSON Job' where
@@ -974,16 +1022,19 @@
         ]
 
 data CaptionSource = CaptionSource
-    { _csKey        :: Maybe Text
+    { _csEncryption :: Maybe Encryption
+    , _csKey        :: Maybe Text
     , _csLabel      :: Maybe Text
     , _csLanguage   :: Maybe Text
     , _csTimeOffset :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'CaptionSource' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
+-- * 'csEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'csKey' @::@ 'Maybe' 'Text'
 --
 -- * 'csLabel' @::@ 'Maybe' 'Text'
@@ -998,8 +1049,14 @@
     , _csLanguage   = Nothing
     , _csTimeOffset = Nothing
     , _csLabel      = Nothing
+    , _csEncryption = Nothing
     }
 
+-- | The encryption settings, if any, that you want Elastic Transcoder to apply to
+-- your caption sources.
+csEncryption :: Lens' CaptionSource (Maybe Encryption)
+csEncryption = lens _csEncryption (\s a -> s { _csEncryption = a })
+
 -- | The name of the sidecar caption file that you want Elastic Transcoder to
 -- include in the output file.
 csKey :: Lens' CaptionSource (Maybe Text)
@@ -1032,7 +1089,8 @@
 
 instance FromJSON CaptionSource where
     parseJSON = withObject "CaptionSource" $ \o -> CaptionSource
-        <$> o .:? "Key"
+        <$> o .:? "Encryption"
+        <*> o .:? "Key"
         <*> o .:? "Label"
         <*> o .:? "Language"
         <*> o .:? "TimeOffset"
@@ -1043,16 +1101,18 @@
         , "Language"   .= _csLanguage
         , "TimeOffset" .= _csTimeOffset
         , "Label"      .= _csLabel
+        , "Encryption" .= _csEncryption
         ]
 
 data Artwork = Artwork
     { _aAlbumArtFormat :: Maybe Text
+    , _aEncryption     :: Maybe Encryption
     , _aInputKey       :: Maybe Text
     , _aMaxHeight      :: Maybe Text
     , _aMaxWidth       :: Maybe Text
     , _aPaddingPolicy  :: Maybe Text
     , _aSizingPolicy   :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'Artwork' constructor.
 --
@@ -1060,6 +1120,8 @@
 --
 -- * 'aAlbumArtFormat' @::@ 'Maybe' 'Text'
 --
+-- * 'aEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'aInputKey' @::@ 'Maybe' 'Text'
 --
 -- * 'aMaxHeight' @::@ 'Maybe' 'Text'
@@ -1078,12 +1140,18 @@
     , _aSizingPolicy   = Nothing
     , _aPaddingPolicy  = Nothing
     , _aAlbumArtFormat = Nothing
+    , _aEncryption     = Nothing
     }
 
 -- | The format of album art, if any. Valid formats are '.jpg' and '.png'.
 aAlbumArtFormat :: Lens' Artwork (Maybe Text)
 aAlbumArtFormat = lens _aAlbumArtFormat (\s a -> s { _aAlbumArtFormat = a })
 
+-- | The encryption settings, if any, that you want Elastic Transcoder to apply to
+-- your artwork.
+aEncryption :: Lens' Artwork (Maybe Encryption)
+aEncryption = lens _aEncryption (\s a -> s { _aEncryption = a })
+
 -- | The name of the file to be used as album art. To determine which Amazon S3
 -- bucket contains the specified file, Elastic Transcoder checks the pipeline
 -- specified by 'PipelineId'; the 'InputBucket' object in that pipeline identifies
@@ -1140,6 +1208,7 @@
 instance FromJSON Artwork where
     parseJSON = withObject "Artwork" $ \o -> Artwork
         <$> o .:? "AlbumArtFormat"
+        <*> o .:? "Encryption"
         <*> o .:? "InputKey"
         <*> o .:? "MaxHeight"
         <*> o .:? "MaxWidth"
@@ -1154,6 +1223,7 @@
         , "SizingPolicy"   .= _aSizingPolicy
         , "PaddingPolicy"  .= _aPaddingPolicy
         , "AlbumArtFormat" .= _aAlbumArtFormat
+        , "Encryption"     .= _aEncryption
         ]
 
 data TimeSpan = TimeSpan
@@ -1204,15 +1274,17 @@
         ]
 
 data CreateJobOutput = CreateJobOutput
-    { _cjoAlbumArt         :: Maybe JobAlbumArt
-    , _cjoCaptions         :: Maybe Captions
-    , _cjoComposition      :: List "Composition" Clip
-    , _cjoKey              :: Maybe Text
-    , _cjoPresetId         :: Maybe Text
-    , _cjoRotate           :: Maybe Text
-    , _cjoSegmentDuration  :: Maybe Text
-    , _cjoThumbnailPattern :: Maybe Text
-    , _cjoWatermarks       :: List "Watermarks" JobWatermark
+    { _cjoAlbumArt            :: Maybe JobAlbumArt
+    , _cjoCaptions            :: Maybe Captions
+    , _cjoComposition         :: List "Composition" Clip
+    , _cjoEncryption          :: Maybe Encryption
+    , _cjoKey                 :: Maybe Text
+    , _cjoPresetId            :: Maybe Text
+    , _cjoRotate              :: Maybe Text
+    , _cjoSegmentDuration     :: Maybe Text
+    , _cjoThumbnailEncryption :: Maybe Encryption
+    , _cjoThumbnailPattern    :: Maybe Text
+    , _cjoWatermarks          :: List "Watermarks" JobWatermark
     } deriving (Eq, Show)
 
 -- | 'CreateJobOutput' constructor.
@@ -1225,6 +1297,8 @@
 --
 -- * 'cjoComposition' @::@ ['Clip']
 --
+-- * 'cjoEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'cjoKey' @::@ 'Maybe' 'Text'
 --
 -- * 'cjoPresetId' @::@ 'Maybe' 'Text'
@@ -1233,21 +1307,25 @@
 --
 -- * 'cjoSegmentDuration' @::@ 'Maybe' 'Text'
 --
+-- * 'cjoThumbnailEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'cjoThumbnailPattern' @::@ 'Maybe' 'Text'
 --
 -- * 'cjoWatermarks' @::@ ['JobWatermark']
 --
 createJobOutput :: CreateJobOutput
 createJobOutput = CreateJobOutput
-    { _cjoKey              = Nothing
-    , _cjoThumbnailPattern = Nothing
-    , _cjoRotate           = Nothing
-    , _cjoPresetId         = Nothing
-    , _cjoSegmentDuration  = Nothing
-    , _cjoWatermarks       = mempty
-    , _cjoAlbumArt         = Nothing
-    , _cjoComposition      = mempty
-    , _cjoCaptions         = Nothing
+    { _cjoKey                 = Nothing
+    , _cjoThumbnailPattern    = Nothing
+    , _cjoThumbnailEncryption = Nothing
+    , _cjoRotate              = Nothing
+    , _cjoPresetId            = Nothing
+    , _cjoSegmentDuration     = Nothing
+    , _cjoWatermarks          = mempty
+    , _cjoAlbumArt            = Nothing
+    , _cjoComposition         = mempty
+    , _cjoCaptions            = Nothing
+    , _cjoEncryption          = Nothing
     }
 
 -- | Information about the album art that you want Elastic Transcoder to add to
@@ -1309,6 +1387,13 @@
 cjoComposition :: Lens' CreateJobOutput [Clip]
 cjoComposition = lens _cjoComposition (\s a -> s { _cjoComposition = a }) . _List
 
+-- | You can specify encryption settings for any output files that you want to use
+-- for a transcoding job. This includes the output file and any watermarks,
+-- thumbnails, album art, or captions that you want to use. You must specify
+-- encryption settings for each file individually.
+cjoEncryption :: Lens' CreateJobOutput (Maybe Encryption)
+cjoEncryption = lens _cjoEncryption (\s a -> s { _cjoEncryption = a })
+
 -- | The name to assign to the transcoded file. Elastic Transcoder saves the file
 -- in the Amazon S3 bucket specified by the 'OutputBucket' object in the pipeline
 -- that is specified by the pipeline ID. If a file with the specified name
@@ -1344,6 +1429,12 @@
 cjoSegmentDuration =
     lens _cjoSegmentDuration (\s a -> s { _cjoSegmentDuration = a })
 
+-- | The encryption settings, if any, that you want Elastic Transcoder to apply to
+-- your thumbnail.
+cjoThumbnailEncryption :: Lens' CreateJobOutput (Maybe Encryption)
+cjoThumbnailEncryption =
+    lens _cjoThumbnailEncryption (\s a -> s { _cjoThumbnailEncryption = a })
+
 -- | Whether you want Elastic Transcoder to create thumbnails for your videos and,
 -- if so, how you want Elastic Transcoder to name the files.
 --
@@ -1386,25 +1477,29 @@
     parseJSON = withObject "CreateJobOutput" $ \o -> CreateJobOutput
         <$> o .:? "AlbumArt"
         <*> o .:? "Captions"
-        <*> o .:  "Composition"
+        <*> o .:? "Composition" .!= mempty
+        <*> o .:? "Encryption"
         <*> o .:? "Key"
         <*> o .:? "PresetId"
         <*> o .:? "Rotate"
         <*> o .:? "SegmentDuration"
+        <*> o .:? "ThumbnailEncryption"
         <*> o .:? "ThumbnailPattern"
-        <*> o .:  "Watermarks"
+        <*> o .:? "Watermarks" .!= mempty
 
 instance ToJSON CreateJobOutput where
     toJSON CreateJobOutput{..} = object
-        [ "Key"              .= _cjoKey
-        , "ThumbnailPattern" .= _cjoThumbnailPattern
-        , "Rotate"           .= _cjoRotate
-        , "PresetId"         .= _cjoPresetId
-        , "SegmentDuration"  .= _cjoSegmentDuration
-        , "Watermarks"       .= _cjoWatermarks
-        , "AlbumArt"         .= _cjoAlbumArt
-        , "Composition"      .= _cjoComposition
-        , "Captions"         .= _cjoCaptions
+        [ "Key"                 .= _cjoKey
+        , "ThumbnailPattern"    .= _cjoThumbnailPattern
+        , "ThumbnailEncryption" .= _cjoThumbnailEncryption
+        , "Rotate"              .= _cjoRotate
+        , "PresetId"            .= _cjoPresetId
+        , "SegmentDuration"     .= _cjoSegmentDuration
+        , "Watermarks"          .= _cjoWatermarks
+        , "AlbumArt"            .= _cjoAlbumArt
+        , "Composition"         .= _cjoComposition
+        , "Captions"            .= _cjoCaptions
+        , "Encryption"          .= _cjoEncryption
         ]
 
 data AudioParameters = AudioParameters
@@ -1558,7 +1653,8 @@
 tFormat :: Lens' Thumbnails (Maybe Text)
 tFormat = lens _tFormat (\s a -> s { _tFormat = a })
 
--- | The number of seconds between thumbnails. Specify an integer value.
+-- | The approximate number of seconds between thumbnails. Specify an integer
+-- value.
 tInterval :: Lens' Thumbnails (Maybe Text)
 tInterval = lens _tInterval (\s a -> s { _tInterval = a })
 
@@ -1639,6 +1735,112 @@
         , "PaddingPolicy" .= _tPaddingPolicy
         ]
 
+data Encryption = Encryption
+    { _eInitializationVector :: Maybe Text
+    , _eKey                  :: Maybe Text
+    , _eKeyMd5               :: Maybe Text
+    , _eMode                 :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'Encryption' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'eInitializationVector' @::@ 'Maybe' 'Text'
+--
+-- * 'eKey' @::@ 'Maybe' 'Text'
+--
+-- * 'eKeyMd5' @::@ 'Maybe' 'Text'
+--
+-- * 'eMode' @::@ 'Maybe' 'Text'
+--
+encryption :: Encryption
+encryption = Encryption
+    { _eMode                 = Nothing
+    , _eKey                  = Nothing
+    , _eKeyMd5               = Nothing
+    , _eInitializationVector = Nothing
+    }
+
+-- | The series of random bits created by a random bit generator, unique for every
+-- encryption operation, that you used to encrypt your input files or that you
+-- want Elastic Transcoder to use to encrypt your output files. The
+-- initialization vector must be base64-encoded, and it must be exactly 16 bytes
+-- long before being base64-encoded.
+eInitializationVector :: Lens' Encryption (Maybe Text)
+eInitializationVector =
+    lens _eInitializationVector (\s a -> s { _eInitializationVector = a })
+
+-- | The data encryption key that you want Elastic Transcoder to use to encrypt
+-- your output file, or that was used to encrypt your input file. The key must
+-- be base64-encoded and it must be one of the following bit lengths before
+-- being base64-encoded:
+--
+-- '128', '192', or '256'.
+--
+-- The key must also be encrypted by using the Amazon Key Management Service.
+eKey :: Lens' Encryption (Maybe Text)
+eKey = lens _eKey (\s a -> s { _eKey = a })
+
+-- | The MD5 digest of the key that you used to encrypt your input file, or that
+-- you want Elastic Transcoder to use to encrypt your output file. Elastic
+-- Transcoder uses the key digest as a checksum to make sure your key was not
+-- corrupted in transit. The key MD5 must be base64-encoded, and it must be
+-- exactly 16 bytes long before being base64-encoded.
+eKeyMd5 :: Lens' Encryption (Maybe Text)
+eKeyMd5 = lens _eKeyMd5 (\s a -> s { _eKeyMd5 = a })
+
+-- | The specific server-side encryption mode that you want Elastic Transcoder to
+-- use when decrypting your input files or encrypting your output files. Elastic
+-- Transcoder supports the following options:
+--
+-- S3: Amazon S3 creates and manages the keys used for encrypting your files.
+--
+-- S3-AWS-KMS: Amazon S3 calls the Amazon Key Management Service, which creates
+-- and manages the keys that are used for encrypting your files. If you specify 'S3-AWS-KMS' and you don't want to use the default key, you must add the AWS-KMS key that
+-- you want to use to your pipeline.
+--
+-- AES-CBC-PKCS7: A padded cipher-block mode of operation originally used for
+-- HLS files.
+--
+-- AES-CTR: AES Counter Mode.
+--
+-- AES-GCM: AES Galois Counter Mode, a mode of operation that is an
+-- authenticated encryption format, meaning that a file, key, or initialization
+-- vector that has been tampered with will fail the decryption process.
+--
+-- For all three AES options, you must provide the following settings, which
+-- must be base64-encoded:
+--
+-- Key
+--
+-- Key MD5
+--
+-- Initialization Vector
+--
+-- For the AES modes, your private encryption keys and your unencrypted data
+-- are never stored by AWS; therefore, it is important that you safely manage
+-- your encryption keys. If you lose them, you won't be able to unencrypt your
+-- data.
+--
+eMode :: Lens' Encryption (Maybe Text)
+eMode = lens _eMode (\s a -> s { _eMode = a })
+
+instance FromJSON Encryption where
+    parseJSON = withObject "Encryption" $ \o -> Encryption
+        <$> o .:? "InitializationVector"
+        <*> o .:? "Key"
+        <*> o .:? "KeyMd5"
+        <*> o .:? "Mode"
+
+instance ToJSON Encryption where
+    toJSON Encryption{..} = object
+        [ "Mode"                 .= _eMode
+        , "Key"                  .= _eKey
+        , "KeyMd5"               .= _eKeyMd5
+        , "InitializationVector" .= _eInitializationVector
+        ]
+
 data JobAlbumArt = JobAlbumArt
     { _jaaArtwork     :: List "Artwork" Artwork
     , _jaaMergePolicy :: Maybe Text
@@ -1674,7 +1876,7 @@
 
 instance FromJSON JobAlbumArt where
     parseJSON = withObject "JobAlbumArt" $ \o -> JobAlbumArt
-        <$> o .:  "Artwork"
+        <$> o .:? "Artwork" .!= mempty
         <*> o .:? "MergePolicy"
 
 instance ToJSON JobAlbumArt where
@@ -1684,14 +1886,17 @@
         ]
 
 data JobWatermark = JobWatermark
-    { _jwInputKey          :: Maybe Text
+    { _jwEncryption        :: Maybe Encryption
+    , _jwInputKey          :: Maybe Text
     , _jwPresetWatermarkId :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'JobWatermark' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
+-- * 'jwEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'jwInputKey' @::@ 'Maybe' 'Text'
 --
 -- * 'jwPresetWatermarkId' @::@ 'Maybe' 'Text'
@@ -1700,8 +1905,14 @@
 jobWatermark = JobWatermark
     { _jwPresetWatermarkId = Nothing
     , _jwInputKey          = Nothing
+    , _jwEncryption        = Nothing
     }
 
+-- | The encryption settings, if any, that you want Elastic Transcoder to apply to
+-- your watermarks.
+jwEncryption :: Lens' JobWatermark (Maybe Encryption)
+jwEncryption = lens _jwEncryption (\s a -> s { _jwEncryption = a })
+
 -- | The name of the .png or .jpg file that you want to use for the watermark. To
 -- determine which Amazon S3 bucket contains the specified file, Elastic
 -- Transcoder checks the pipeline specified by 'Pipeline'; the 'Input Bucket' object
@@ -1723,17 +1934,20 @@
 
 instance FromJSON JobWatermark where
     parseJSON = withObject "JobWatermark" $ \o -> JobWatermark
-        <$> o .:? "InputKey"
+        <$> o .:? "Encryption"
+        <*> o .:? "InputKey"
         <*> o .:? "PresetWatermarkId"
 
 instance ToJSON JobWatermark where
     toJSON JobWatermark{..} = object
         [ "PresetWatermarkId" .= _jwPresetWatermarkId
         , "InputKey"          .= _jwInputKey
+        , "Encryption"        .= _jwEncryption
         ]
 
 data Pipeline = Pipeline
     { _pArn             :: Maybe Text
+    , _pAwsKmsKeyArn    :: Maybe Text
     , _pContentConfig   :: Maybe PipelineOutputConfig
     , _pId              :: Maybe Text
     , _pInputBucket     :: Maybe Text
@@ -1751,6 +1965,8 @@
 --
 -- * 'pArn' @::@ 'Maybe' 'Text'
 --
+-- * 'pAwsKmsKeyArn' @::@ 'Maybe' 'Text'
+--
 -- * 'pContentConfig' @::@ 'Maybe' 'PipelineOutputConfig'
 --
 -- * 'pId' @::@ 'Maybe' 'Text'
@@ -1778,6 +1994,7 @@
     , _pInputBucket     = Nothing
     , _pOutputBucket    = Nothing
     , _pRole            = Nothing
+    , _pAwsKmsKeyArn    = Nothing
     , _pNotifications   = Nothing
     , _pContentConfig   = Nothing
     , _pThumbnailConfig = Nothing
@@ -1787,6 +2004,16 @@
 pArn :: Lens' Pipeline (Maybe Text)
 pArn = lens _pArn (\s a -> s { _pArn = a })
 
+-- | The AWS Key Management Service (AWS KMS) key that you want to use with this
+-- pipeline.
+--
+-- If you use either 'S3' or 'S3-AWS-KMS' as your 'Encryption:Mode', you don't need
+-- to provide a key with your job because a default key, known as an AWS-KMS
+-- key, is created for you automatically. You need to provide an AWS-KMS key
+-- only if you want to use a non-default AWS-KMS key, or if you are using an 'Encryption:Mode' of 'AES-PKCS7', 'AES-CTR', or 'AES-GCM'.
+pAwsKmsKeyArn :: Lens' Pipeline (Maybe Text)
+pAwsKmsKeyArn = lens _pAwsKmsKeyArn (\s a -> s { _pAwsKmsKeyArn = a })
+
 -- | Information about the Amazon S3 bucket in which you want Elastic Transcoder
 -- to save transcoded files and playlists. Either you specify both 'ContentConfig'
 -- and 'ThumbnailConfig', or you specify 'OutputBucket'.
@@ -1894,6 +2121,7 @@
 instance FromJSON Pipeline where
     parseJSON = withObject "Pipeline" $ \o -> Pipeline
         <$> o .:? "Arn"
+        <*> o .:? "AwsKmsKeyArn"
         <*> o .:? "ContentConfig"
         <*> o .:? "Id"
         <*> o .:? "InputBucket"
@@ -1913,6 +2141,7 @@
         , "InputBucket"     .= _pInputBucket
         , "OutputBucket"    .= _pOutputBucket
         , "Role"            .= _pRole
+        , "AwsKmsKeyArn"    .= _pAwsKmsKeyArn
         , "Notifications"   .= _pNotifications
         , "ContentConfig"   .= _pContentConfig
         , "ThumbnailConfig" .= _pThumbnailConfig
@@ -2032,24 +2261,33 @@
         ]
 
 data CaptionFormat = CaptionFormat
-    { _cfFormat  :: Maybe Text
-    , _cfPattern :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    { _cfEncryption :: Maybe Encryption
+    , _cfFormat     :: Maybe Text
+    , _cfPattern    :: Maybe Text
+    } deriving (Eq, Show)
 
 -- | 'CaptionFormat' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
+-- * 'cfEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'cfFormat' @::@ 'Maybe' 'Text'
 --
 -- * 'cfPattern' @::@ 'Maybe' 'Text'
 --
 captionFormat :: CaptionFormat
 captionFormat = CaptionFormat
-    { _cfFormat  = Nothing
-    , _cfPattern = Nothing
+    { _cfFormat     = Nothing
+    , _cfPattern    = Nothing
+    , _cfEncryption = Nothing
     }
 
+-- | The encryption settings, if any, that you want Elastic Transcoder to apply to
+-- your caption formats.
+cfEncryption :: Lens' CaptionFormat (Maybe Encryption)
+cfEncryption = lens _cfEncryption (\s a -> s { _cfEncryption = a })
+
 -- | The format you specify determines whether Elastic Transcoder generates an
 -- embedded or sidecar caption for this output.
 --
@@ -2094,13 +2332,15 @@
 
 instance FromJSON CaptionFormat where
     parseJSON = withObject "CaptionFormat" $ \o -> CaptionFormat
-        <$> o .:? "Format"
+        <$> o .:? "Encryption"
+        <*> o .:? "Format"
         <*> o .:? "Pattern"
 
 instance ToJSON CaptionFormat where
     toJSON CaptionFormat{..} = object
-        [ "Format"  .= _cfFormat
-        , "Pattern" .= _cfPattern
+        [ "Format"     .= _cfFormat
+        , "Pattern"    .= _cfPattern
+        , "Encryption" .= _cfEncryption
         ]
 
 data PresetWatermark = PresetWatermark
@@ -2353,7 +2593,7 @@
 
 instance FromJSON Permission where
     parseJSON = withObject "Permission" $ \o -> Permission
-        <$> o .:  "Access"
+        <$> o .:? "Access" .!= mempty
         <*> o .:? "Grantee"
         <*> o .:? "GranteeType"
 
@@ -2679,7 +2919,7 @@
         <$> o .:? "AspectRatio"
         <*> o .:? "BitRate"
         <*> o .:? "Codec"
-        <*> o .:  "CodecOptions"
+        <*> o .:? "CodecOptions" .!= mempty
         <*> o .:? "DisplayAspectRatio"
         <*> o .:? "FixedGOP"
         <*> o .:? "FrameRate"
@@ -2690,7 +2930,7 @@
         <*> o .:? "PaddingPolicy"
         <*> o .:? "Resolution"
         <*> o .:? "SizingPolicy"
-        <*> o .:  "Watermarks"
+        <*> o .:? "Watermarks" .!= mempty
 
 instance ToJSON VideoParameters where
     toJSON VideoParameters{..} = object
@@ -2807,7 +3047,7 @@
     parseJSON = withObject "Playlist" $ \o -> Playlist
         <$> o .:? "Format"
         <*> o .:? "Name"
-        <*> o .:  "OutputKeys"
+        <*> o .:? "OutputKeys" .!= mempty
         <*> o .:? "Status"
         <*> o .:? "StatusDetail"
 
@@ -2913,11 +3153,12 @@
 data JobInput = JobInput
     { _jiAspectRatio :: Maybe Text
     , _jiContainer   :: Maybe Text
+    , _jiEncryption  :: Maybe Encryption
     , _jiFrameRate   :: Maybe Text
     , _jiInterlaced  :: Maybe Text
     , _jiKey         :: Maybe Text
     , _jiResolution  :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'JobInput' constructor.
 --
@@ -2927,6 +3168,8 @@
 --
 -- * 'jiContainer' @::@ 'Maybe' 'Text'
 --
+-- * 'jiEncryption' @::@ 'Maybe' 'Encryption'
+--
 -- * 'jiFrameRate' @::@ 'Maybe' 'Text'
 --
 -- * 'jiInterlaced' @::@ 'Maybe' 'Text'
@@ -2943,6 +3186,7 @@
     , _jiAspectRatio = Nothing
     , _jiInterlaced  = Nothing
     , _jiContainer   = Nothing
+    , _jiEncryption  = Nothing
     }
 
 -- | The aspect ratio of the input file. If you want Elastic Transcoder to
@@ -2966,6 +3210,12 @@
 jiContainer :: Lens' JobInput (Maybe Text)
 jiContainer = lens _jiContainer (\s a -> s { _jiContainer = a })
 
+-- | The encryption settings, if any, that are used for decrypting your input
+-- files. If your input file is encrypted, you must specify the mode that
+-- Elastic Transcoder will use to decrypt your file.
+jiEncryption :: Lens' JobInput (Maybe Encryption)
+jiEncryption = lens _jiEncryption (\s a -> s { _jiEncryption = a })
+
 -- | The frame rate of the input file. If you want Elastic Transcoder to
 -- automatically detect the frame rate of the input file, specify 'auto'. If you
 -- want to specify the frame rate for the input file, enter one of the following
@@ -3010,6 +3260,7 @@
     parseJSON = withObject "JobInput" $ \o -> JobInput
         <$> o .:? "AspectRatio"
         <*> o .:? "Container"
+        <*> o .:? "Encryption"
         <*> o .:? "FrameRate"
         <*> o .:? "Interlaced"
         <*> o .:? "Key"
@@ -3023,4 +3274,5 @@
         , "AspectRatio" .= _jiAspectRatio
         , "Interlaced"  .= _jiInterlaced
         , "Container"   .= _jiContainer
+        , "Encryption"  .= _jiEncryption
         ]
diff --git a/gen/Network/AWS/ElasticTranscoder/UpdatePipeline.hs b/gen/Network/AWS/ElasticTranscoder/UpdatePipeline.hs
--- a/gen/Network/AWS/ElasticTranscoder/UpdatePipeline.hs
+++ b/gen/Network/AWS/ElasticTranscoder/UpdatePipeline.hs
@@ -35,6 +35,7 @@
     -- ** Request constructor
     , updatePipeline
     -- ** Request lenses
+    , upAwsKmsKeyArn
     , upContentConfig
     , upId
     , upInputBucket
@@ -57,7 +58,8 @@
 import qualified GHC.Exts
 
 data UpdatePipeline = UpdatePipeline
-    { _upContentConfig   :: Maybe PipelineOutputConfig
+    { _upAwsKmsKeyArn    :: Maybe Text
+    , _upContentConfig   :: Maybe PipelineOutputConfig
     , _upId              :: Text
     , _upInputBucket     :: Maybe Text
     , _upName            :: Maybe Text
@@ -70,6 +72,8 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
+-- * 'upAwsKmsKeyArn' @::@ 'Maybe' 'Text'
+--
 -- * 'upContentConfig' @::@ 'Maybe' 'PipelineOutputConfig'
 --
 -- * 'upId' @::@ 'Text'
@@ -91,11 +95,22 @@
     , _upName            = Nothing
     , _upInputBucket     = Nothing
     , _upRole            = Nothing
+    , _upAwsKmsKeyArn    = Nothing
     , _upNotifications   = Nothing
     , _upContentConfig   = Nothing
     , _upThumbnailConfig = Nothing
     }
 
+-- | The AWS Key Management Service (AWS KMS) key that you want to use with this
+-- pipeline.
+--
+-- If you use either 'S3' or 'S3-AWS-KMS' as your 'Encryption:Mode', you don't need
+-- to provide a key with your job because a default key, known as an AWS-KMS
+-- key, is created for you automatically. You need to provide an AWS-KMS key
+-- only if you want to use a non-default AWS-KMS key, or if you are using an 'Encryption:Mode' of 'AES-PKCS7', 'AES-CTR', or 'AES-GCM'.
+upAwsKmsKeyArn :: Lens' UpdatePipeline (Maybe Text)
+upAwsKmsKeyArn = lens _upAwsKmsKeyArn (\s a -> s { _upAwsKmsKeyArn = a })
+
 -- | The optional 'ContentConfig' object specifies information about the Amazon S3
 -- bucket in which you want Elastic Transcoder to save transcoded files and
 -- playlists: which bucket to use, which users you want to have access to the
@@ -238,6 +253,7 @@
         [ "Name"            .= _upName
         , "InputBucket"     .= _upInputBucket
         , "Role"            .= _upRole
+        , "AwsKmsKeyArn"    .= _upAwsKmsKeyArn
         , "Notifications"   .= _upNotifications
         , "ContentConfig"   .= _upContentConfig
         , "ThumbnailConfig" .= _upThumbnailConfig
