diff --git a/functional_tests/test_services.py b/functional_tests/test_services.py
index e933094..99efe35 100644
--- a/functional_tests/test_services.py
+++ b/functional_tests/test_services.py
@@ -10,6 +10,7 @@
 only work with publicly visible data in order to avoid dealing with OAuth.
 """
 import httplib2
+import pprint
 
 __author__ = 'ade@google.com (Ade Oshineye)'
 
@@ -34,29 +35,43 @@
     return httplib2.Response(self.headers), self.data
 
 class BuzzFunctionalTest(unittest.TestCase):
+  def test_can_get_specific_activity(self):
+    buzz = build('buzz', 'v1')
+    activity = buzz.activities().get(userId='105037104815911535953',
+                                     postId='B:z12sspviqyakfvye123wehng0muwz5jzq04').execute()
+
+    self.assertTrue(activity is not None)
+
+  def test_can_get_specific_activity_with_tag_id(self):
+    buzz = build('buzz', 'v1')
+    activity = buzz.activities().get(userId='105037104815911535953',
+                                     postId='tag:google.com,2010:buzz:z13ptnw5usmnv15ey22fzlswnuqoebasu').execute()
+
+    self.assertTrue(activity is not None)
+
   def test_can_get_buzz_activities_with_many_params(self):
     buzz = build('buzz', 'v1')
     max_results = 2
-    actcol = buzz.activities()
-    activities = actcol.list(userId='googlebuzz', scope='@self',
+    activities_command = buzz.activities()
+    activities = activities_command.list(userId='googlebuzz', scope='@self',
                              max_comments=max_results*2 ,max_liked=max_results*3,
                              max_results=max_results).execute()
     activity_count = len(activities['items'])
     self.assertEquals(max_results, activity_count)
 
-    activities = actcol.list_next(activities).execute()
+    activities = activities_command.list_next(activities).execute()
     activity_count = len(activities['items'])
     self.assertEquals(max_results, activity_count)
 
   def test_can_get_multiple_pages_of_buzz_activities(self):
     buzz = build('buzz', 'v1')
     max_results = 2
-    actcol = buzz.activities()
+    activities_command = buzz.activities()
     
-    activities = actcol.list(userId='adewale', scope='@self',
+    activities = activities_command.list(userId='adewale', scope='@self',
                              max_results=max_results).execute()
     for count in range(10):
-      activities = actcol.list_next(activities).execute()
+      activities = activities_command.list_next(activities).execute()
       activity_count = len(activities['items'])
       self.assertEquals(max_results, activity_count, 'Failed after %s pages' % str(count))
 
@@ -122,7 +137,19 @@
 
     self.http = credentials.authorize(httplib2.Http())
 
-  def test_can_list_groups_belonging_to_user(self):
+  def test_can_create_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'}
+      }
+    ).execute()
+    self.assertTrue(activity is not None)
+
+  def test_can_identify_number_of_groups_belonging_to_user(self):
     buzz = build('buzz', 'v1', http=self.http)
     groups = buzz.groups().list(userId='108242092577082601423').execute()
 
@@ -130,6 +157,57 @@
     expected_default_number_of_groups = 4
     self.assertEquals(expected_default_number_of_groups, len(groups['items']))
 
+  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'}
+      }
+    ).execute()
+    pprint.pprint(activity)
+    id = activity['id']
+    likers = buzz.people().liked(userId='105037104815911535953', postId=id, groupId='@liked', scope='@self').execute()
+    # Todo(ade) Insert the new liker once the Buzz back-end bug is fixed
+
+  def test_can_comment_on_activity(self):
+    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'}
+      }
+    ).execute()
+
+    id = activity['id']
+    comment = buzz.comments().insert(userId='@me', postId=id, body={
+      "content": "A comment on the new activity"
+    }).execute()
+
+  def IGNORE__test_can_list_groups_belonging_to_user(self):
+    # TODO(ade) Uncomment this test once the related Buzz back-end bug is fixed
+    buzz = build('buzz', 'v1', http=self.http)
+    groups = buzz.groups().list(userId='108242092577082601423').execute()
+    pprint.pprint(groups)
+
+    group = buzz.groups().get(userId='108242092577082601423', groupId='G:108242092577082601423:15').execute()
+    self.assertEquals('G:108242092577082601423:15', group['id'], group)
+
+    group = buzz.groups().get(userId='108242092577082601423', groupId='G:108242092577082601423:14').execute()
+    self.assertEquals('G:108242092577082601423:14', group['id'], group)
+
+    group = buzz.groups().get(userId='108242092577082601423', groupId='G:108242092577082601423:13').execute()
+    self.assertEquals('G:108242092577082601423:13', group['id'], group)
+
+    group = buzz.groups().get(userId='108242092577082601423', groupId='G:108242092577082601423:6').execute()
+    self.assertEquals('G:108242092577082601423:6', group['id'], group)
+
+    group = buzz.groups().get(userId='108242092577082601423', groupId='G:108242092577082601423:9999999').execute()
+    self.assertEquals(None, group, group)
+
 
 if __name__ == '__main__':
   unittest.main()
