diff --git a/samples/adsense/generate_report.py b/samples/adsense/generate_report.py
index f699a6d..7edf54a 100644
--- a/samples/adsense/generate_report.py
+++ b/samples/adsense/generate_report.py
@@ -32,28 +32,38 @@
 gflags.DEFINE_string('ad_client_id', None,
                      'The ID of the ad client for which to generate a report',
                      short_name='c')
-gflags.MarkFlagAsRequired('ad_client_id')
+gflags.DEFINE_string('report_id', None,
+                     'The ID of the saved report to generate',
+                     short_name='r')
 
 
 def main(argv):
   # Process flags and read their values.
   sample_utils.process_flags(argv)
   ad_client_id = gflags.FLAGS.ad_client_id
+  saved_report_id = gflags.FLAGS.report_id
 
   # Authenticate and construct service.
   service = sample_utils.initialize_service()
 
   try:
     # Retrieve report.
-    result = service.reports().generate(
-        startDate='2011-01-01', endDate='2011-08-31',
-        filter=['AD_CLIENT_ID==' + ad_client_id],
-        metric=['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE',
-                'CLICKS', 'AD_REQUESTS_CTR', 'COST_PER_CLICK',
-                'AD_REQUESTS_RPM', 'EARNINGS'],
-        dimension=['DATE'],
-        sort=['+DATE']).execute()
-
+    if saved_report_id:
+      result = service.reports().saved().generate(
+        savedReportId=saved_report_id).execute()
+    elif ad_client_id:
+      result = service.reports().generate(
+          startDate='2011-01-01', endDate='2011-08-31',
+          filter=['AD_CLIENT_ID==' + ad_client_id],
+          metric=['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE',
+                  'CLICKS', 'AD_REQUESTS_CTR', 'COST_PER_CLICK',
+                  'AD_REQUESTS_RPM', 'EARNINGS'],
+          dimension=['DATE'],
+          sort=['+DATE']).execute()
+    else:
+      print ('Specify ad client id or saved report id!\nUsage: %s ARGS\\n%s'
+             % (sys.argv[0], gflags.FLAGS))
+      sys.exit(1)
     # Display headers.
     for header in result['headers']:
       print '%25s' % header['name'],
diff --git a/samples/adsense/get_all_saved_ad_styles.py b/samples/adsense/get_all_saved_ad_styles.py
new file mode 100644
index 0000000..395e342
--- /dev/null
+++ b/samples/adsense/get_all_saved_ad_styles.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example gets all the saved ad styles for the logged in user's default
+account.
+
+Tags: savedadstyles.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import sys
+from oauth2client.client import AccessTokenRefreshError
+import sample_utils
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+  sample_utils.process_flags(argv)
+
+  # Authenticate and construct service.
+  service = sample_utils.initialize_service()
+
+  try:
+    # Retrieve ad client list in pages and display data as we receive it.
+    request = service.savedadstyles().list(maxResults=MAX_PAGE_SIZE)
+
+    while request is not None:
+      result = request.execute()
+      saved_ad_styles = result['items']
+      for saved_ad_style in saved_ad_styles:
+        print ('Saved ad style with ID "%s" and background color "#%s" was '
+               'found.'
+               % (saved_ad_style['id'],
+                  saved_ad_style['adStyle']['colors']['background']))
+        if ('corners' in saved_ad_style['adStyle']
+            and 'font' in saved_ad_style['adStyle']):
+          print ('It has "%s" corners and a "%s" size font.' %
+                 (saved_ad_style['adStyle']['corners'],
+                  saved_ad_style['adStyle']['font']['size']))
+
+      request = service.savedadstyles().list_next(request, result)
+
+  except AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsense/get_all_saved_reports.py b/samples/adsense/get_all_saved_reports.py
new file mode 100644
index 0000000..93747f2
--- /dev/null
+++ b/samples/adsense/get_all_saved_reports.py
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+#
+# Copyright 2011 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example gets all the saved reports for the logged
+in user's default account.
+
+Tags: savedreports.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import sys
+from oauth2client.client import AccessTokenRefreshError
+import sample_utils
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+  sample_utils.process_flags(argv)
+
+  # Authenticate and construct service.
+  service = sample_utils.initialize_service()
+
+  try:
+    # Retrieve ad client list in pages and display data as we receive it.
+    request = service.reports().saved().list(maxResults=MAX_PAGE_SIZE)
+
+    while request is not None:
+      result = request.execute()
+      saved_reports = result['items']
+      for saved_report in saved_reports:
+        print ('Saved ad style with ID "%s" and name "%s" was found.'
+               % (saved_report['id'], saved_report['name']))
+
+      request = service.reports().saved().list_next(request, result)
+
+  except AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsense/sample_utils.py b/samples/adsense/sample_utils.py
index 25bd3e9..1a03399 100644
--- a/samples/adsense/sample_utils.py
+++ b/samples/adsense/sample_utils.py
@@ -100,7 +100,7 @@
   """Retrieves an AdSense Management API service via the discovery service."""
 
   # Construct a service object via the discovery service.
-  service = build("adsense", "v1.1", http=http)
+  service = build("adsense", "v1.2", http=http)
   return service
 
 
