diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index db042f7..1660288 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -35,6 +35,9 @@
 from apiclient.http import HttpRequest
 from apiclient.json import simplejson
 
+URITEMPLATE = re.compile('{[^}]*}')
+VARNAME = re.compile('[a-zA-Z0-9_-]+')
+
 class Error(Exception):
   """Base error for this module."""
   pass
@@ -215,6 +218,13 @@
         if desc.get('restParameterType') == 'path':
           path_params[param] = param
 
+    for match in URITEMPLATE.finditer(pathUrl):
+      for namematch in VARNAME.finditer(match.group(0)):
+        name = key2param(namematch.group(0))
+        path_params[name] = name
+        if name in query_params:
+          query_params.remove(name)
+
     def method(self, **kwargs):
       for name in kwargs.iterkeys():
         if name not in argmap:
diff --git a/functional_tests/test_services.py b/functional_tests/test_services.py
index cf35d8f..8a20d3f 100644
--- a/functional_tests/test_services.py
+++ b/functional_tests/test_services.py
@@ -124,7 +124,8 @@
     buzz = build('buzz', 'v1')
 
     # Restricting max_results to 1 means only a tiny amount of data comes back but the totalResults still has the total.
-    following = buzz.people().list(userId='googlebuzz', groupId='@followers', max_results=1).execute()
+    following = buzz.people().list(userId='googlebuzz', groupId='@followers',
+                                   max_results='1').execute()
 
     # @googlebuzz has a large but fluctuating number of followers
     # It is sufficient if the result is bigger than 10, 000
@@ -152,11 +153,13 @@
     buzz = build('buzz', 'v1', http=self.http)
 
     activity = buzz.activities().insert(userId='@me', body={
-      'title': 'Testing insert',
-      'object': {
-        'content': u'Just a short note to show that insert is working. ?',
-        'type': 'note'}
-      }
+        'data': {
+            'title': 'Testing insert',
+            'object': {
+                'content': u'Just a short note to show that insert is working. ?',
+                'type': 'note'}
+            }
+        }
     ).execute()
     self.assertTrue(activity is not None)
 
@@ -164,16 +167,18 @@
     buzz = build('buzz', 'v1', http=self.http)
 
     activity = buzz.activities().insert(userId='@me', body={
-        'title': 'Testing insert',
-        'object': {
-        'content': 'This is a private post.'
-      },
-      'visibility': {
-        'entries': [
-          { 'id': 'tag:google.com,2010:buzz-group:108242092577082601423:13' }
-        ]
-      }
-    }
+        'data': {
+            'title': 'Testing insert',
+            'object': {
+                'content': 'This is a private post.'
+                },
+            'visibility': {
+                'entries': [
+                    { 'id': 'tag:google.com,2010:buzz-group:108242092577082601423:13' }
+                    ]
+                }
+            }
+        }
     ).execute()
     self.assertTrue(activity is not None)
 
@@ -201,11 +206,13 @@
   def IGNORE__test_can_like_activity(self):
     buzz = build('buzz', 'v1', http=self.http)
     activity = buzz.activities().insert(userId='@me', body={
-      'title': 'Testing insert',
-      'object': {
-        'content': u'Just a short note to show that insert is working. ?',
-        'type': 'note'}
-      }
+        'data': {
+            'title': 'Testing insert',
+            'object': {
+                'content': u'Just a short note to show that insert is working. ?',
+                'type': 'note'}
+            }
+        }
     ).execute()
     pprint.pprint(activity)
     id = activity['id']
@@ -216,16 +223,20 @@
     buzz = build('buzz', 'v1', http=self.http)
 
     activity = buzz.activities().insert(userId='@me', body={
-      'title': 'A new activity',
-      'object': {
-        'content': u'The body of the new activity',
-        'type': 'note'}
-      }
+        'data': {
+            'title': 'A new activity',
+            'object': {
+                'content': u'The body of the new activity',
+                'type': 'note'}
+            }
+        }
     ).execute()
 
     id = activity['id']
     comment = buzz.comments().insert(userId='@me', postId=id, body={
-      "content": "A comment on the new activity"
+        'data': {
+            'content': 'A comment on the new activity'
+            }
     }).execute()
 
   def test_can_list_groups_belonging_to_user(self):
@@ -248,11 +259,13 @@
     buzz = build('buzz', 'v1', http=self.http)
 
     activity = buzz.activities().insert(userId='@me', body={
-      'title': 'Activity to be deleted',
-      'object': {
-        'content': u'Created this activity so that it can be deleted.',
-        'type': 'note'}
-      }
+        'data': {
+            'title': 'Activity to be deleted',
+            'object': {
+                'content': u'Created this activity so that it can be deleted.',
+                'type': 'note'}
+            }
+        }
     ).execute()
     id = activity['id']
 
diff --git a/samples/buzz/buzz.py b/samples/buzz/buzz.py
index 94cba2a..9cebd79 100644
--- a/samples/buzz/buzz.py
+++ b/samples/buzz/buzz.py
@@ -18,7 +18,7 @@
 import pprint
 
 # Uncomment the next line to get very detailed logging
-# httplib2.debuglevel = 4
+#httplib2.debuglevel = 4
 
 def main():
   f = open("buzz.dat", "r")
@@ -56,7 +56,9 @@
 
   # Add a comment to that activity
   comment_body = {
+      "data": {
           "content": "This is a comment"
+          }
       }
   item = activitylist['items'][0]
   comment = p.comments().insert(
