Expanded Moderator sample. Also made JsonBody more robust, allowing the external 'data' wrapper to be passed in from the caller or added, depending on whether it is present or not. Also handle adding user-agents better, by concatenating them.
diff --git a/apiclient/contrib/moderator/future.json b/apiclient/contrib/moderator/future.json
index 7e3d978..87d525b 100644
--- a/apiclient/contrib/moderator/future.json
+++ b/apiclient/contrib/moderator/future.json
@@ -2,7 +2,7 @@
   "data": {
     "moderator": {
       "v1": {
-        "baseUrl": "https://www.googleapis.com/", 
+        "baseUrl": "https://www.googleapis.com/",
           "auth": {
             "request": {
               "url": "https://www.google.com/accounts/OAuthGetRequestToken",
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index e71e990..db17cea 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -94,7 +94,10 @@
     if body_value is None:
       return (headers, path_params, query, None)
     else:
-      model = {'data': body_value}
+      if len(body_value) == 1 and 'data' in body_value:
+        model = body_value
+      else:
+        model = {'data': body_value}
       headers['content-type'] = 'application/json'
       return (headers, path_params, query, simplejson.dumps(model))
 
diff --git a/apiclient/oauth.py b/apiclient/oauth.py
index 2016dea..de20336 100644
--- a/apiclient/oauth.py
+++ b/apiclient/oauth.py
@@ -130,8 +130,11 @@
       if headers == None:
         headers = {}
       headers.update(req.to_header())
-      if 'user-agent' not in headers:
-        headers['user-agent'] = self.user_agent
+      if 'user-agent' in headers:
+        headers['user-agent'] += ' '
+      else:
+        headers['user-agent'] = ''
+      headers['user-agent'] += self.user_agent
       return request_orig(uri, method, body, headers,
                           redirections, connection_type)