diff --git a/lib/json/group_section.py b/lib/json/group_section.py
index 141d69c3e9e610cb813819e86a4391c975b2214f..65484308505806716b7ff4066db4c8b49b37801e 100644
--- a/lib/json/group_section.py
+++ b/lib/json/group_section.py
@@ -36,15 +36,33 @@ def write_groupmembers_subsection (db, xml, group_guid):
     group_members = db.cursor()
     group_members.execute(qry.qry_group_members, (group_guid,))
     
-    wrt.write_tag(xml,2,"quantidade_membros",str(group_members.rowcount))
-                    
-    wrt.write_open_tag(xml,2,"membros")
-    for (user_id, user_name, user_username) in group_members:
+    qty=str(group_members.rowcount)
+    wrt.write_tag(xml,2,"quantidadeMembros",qty,",")
+                
+    wrt.write_open_tag(xml,2,"membros","[")
+    
+    row=0
+    for (user_id, user_name, user_username)\
+        in group_members:
+            
+        wrt.write_open_tag(xml,3,"","{")
+        
         prefix='profile/'
         user_attr=wrt.uidstr(wrt.urlparticipa(prefix,user_username))
-        wrt.write_tag(xml,4,"uid",user_attr)
-        wrt.write_tag(xml,3,"usuario",user_name)
-    wrt.write_close_tag(xml,2,"membros")
+        wrt.write_tag(xml,4,"uid",user_attr,",")
+        wrt.write_tag(xml,4,"usuario",user_name,"")
+        
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < group_members.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
+        
+    wrt.write_close_tag(xml,2,"],")
     
     group_members.close()
 #--------------------------------------------------------------------#
@@ -59,37 +77,46 @@ def write_groupfiles_subsection (db, xml, group_guid):
     # 50 = select * from elgg_metastrings where string='file_enable';
     perm=wrt.postcontent_permission(db, group_guid, 50)
     
-    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
-    wrt.write_open_tag(xml,2,"arquivos")
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm),",")
+    wrt.write_open_tag(xml,2,"arquivos","[")
     
+    row=0
     for (post_guid, post_title, post_desc, \
             owner_id, owner_name, owner_username, time)\
         in group_files:
         
-        wrt.write_open_tag(xml,3,"arquivo")
+        wrt.write_open_tag(xml,3,"","{")
         
         prefix='file/download/'
         file_link=wrt.urlparticipa(prefix,str(post_guid))
         
         prefix='file/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_tag(xml,4,"pid",post_attr)
+        wrt.write_tag(xml,4,"pid",post_attr,",")
 
         prefix='profile/'
         owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
         
-        wrt.write_tag(xml,4,"uid",owner_attr)
-        wrt.write_tag(xml,4,"autor",owner_name)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"link",wrt.hrefstr(file_link))
-        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"uid",owner_attr,",")
+        wrt.write_tag(xml,4,"autor",owner_name,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"link",wrt.hrefstr(file_link),",")
+        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc),",")
                     
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"arquivo")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < group_files.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
         
-    wrt.write_close_tag(xml,2,"arquivos")
+    wrt.write_close_tag(xml,2,"],")
     
     group_files.close()
 #--------------------------------------------------------------------#
@@ -104,33 +131,42 @@ def write_groupforumtopics_subsection (db, xml, group_guid):
     # 52 = select * from elgg_metastrings where string='forum_enable';
     perm=wrt.postcontent_permission(db, group_guid, 52)
     
-    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
-    wrt.write_open_tag(xml,2,"debates")
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm),",")
+    wrt.write_open_tag(xml,2,"debates","[")
     
+    row=0
     for (post_guid, post_title, post_desc, \
         owner_id, owner_name, owner_username, time)\
         in group_forumtopics:
         
-        wrt.write_open_tag(xml,3,"debate")
+        wrt.write_open_tag(xml,3,"","{")
         
         prefix='discussion/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_tag(xml,4,"pid",post_attr)
+        wrt.write_tag(xml,4,"pid",post_attr,",")
 
         prefix='profile/'
         owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
         
-        wrt.write_tag(xml,4,"uid",owner_attr)
-        wrt.write_tag(xml,4,"autor",owner_name)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"uid",owner_attr,",")
+        wrt.write_tag(xml,4,"autor",owner_name,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc),",")
             
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"debate")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < group_forumtopics.rowcount):
+            sep="},"
+        else:
+            sep="}"
         
-    wrt.write_close_tag(xml,2,"debates")
+        wrt.write_close_tag(xml,3,sep)
+        
+    wrt.write_close_tag(xml,2,"],")
     
     group_forumtopics.close()
 #--------------------------------------------------------------------#
@@ -145,37 +181,46 @@ def write_groupbookmarks_subsection (db, xml, group_guid):
     # 49 = select * from elgg_metastrings where string='bookmarks_enable';
     perm=wrt.postcontent_permission(db, group_guid, 49)
     
-    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
-    wrt.write_open_tag(xml,2,"favoritos")
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm),",")
+    wrt.write_open_tag(xml,2,"favoritos","[")
     
+    row=0
     for (post_guid, post_title, post_desc, \
             owner_id, owner_name, owner_username, time)\
         in group_bookmarks:
         
-        wrt.write_open_tag(xml,3,"")
+        wrt.write_open_tag(xml,3,"","{")
         
         # 90 = select * from elgg_metastrings where string='address';
         bookmark_link=wrt.post_content(db,post_guid,90)
         
         prefix='bookmarks/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_tag(xml,4,"pid",post_attr)
+        wrt.write_tag(xml,4,"pid",post_attr,",")
 
         prefix='profile/'
         owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
         
-        wrt.write_tag(xml,4,"uid",owner_attr)
-        wrt.write_tag(xml,4,"autor",owner_name)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"link",wrt.hrefstr(bookmark_link))
-        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"uid",owner_attr,",")
+        wrt.write_tag(xml,4,"autor",owner_name,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"link",wrt.hrefstr(bookmark_link),",")
+        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc),",")
                             
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < group_bookmarks.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
     
-    wrt.write_close_tag(xml,2,"favoritos")
+    wrt.write_close_tag(xml,2,"],")
     
     group_bookmarks.close()
 #--------------------------------------------------------------------#
@@ -190,33 +235,42 @@ def write_grouppages_subsection (db, xml, group_guid):
     # 53 = select * from elgg_metastrings where string='pages_enable';
     perm=wrt.postcontent_permission(db, group_guid, 53)
     
-    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
-    wrt.write_open_tag(xml,2,"paginas")
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm),",")
+    wrt.write_open_tag(xml,2,"paginas","[")
     
+    row=0
     for (post_guid, post_title, post_desc,
             owner_id, owner_name, owner_username, time)\
         in group_pages:
         
-        wrt.write_open_tag(xml,3,"")
+        wrt.write_open_tag(xml,3,"","{")
         
         prefix='pages/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_tag(xml,4,"pid",post_attr)
+        wrt.write_tag(xml,4,"pid",post_attr,",")
 
         prefix='profile/'
         owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
         
-        wrt.write_tag(xml,4,"uid",owner_attr)
-        wrt.write_tag(xml,4,"autor",owner_name)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"uid",owner_attr,",")
+        wrt.write_tag(xml,4,"autor",owner_name,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc),",")
                     
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"pagina")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < group_pages.rowcount):
+            sep="},"
+        else:
+            sep="}"
         
-    wrt.write_close_tag(xml,2,"paginas")
+        wrt.write_close_tag(xml,3,sep)
+        
+    wrt.write_close_tag(xml,2,"],")
     
     group_pages.close()
 #--------------------------------------------------------------------#
@@ -231,9 +285,10 @@ def write_groupvideos_subsection (db, xml, group_guid):
     # 399 = select * from elgg_metastrings where string='videos_enable';
     perm=wrt.postcontent_permission(db, group_guid, 399)
     
-    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
-    wrt.write_open_tag(xml,2,"videos")
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm),",")
+    wrt.write_open_tag(xml,2,"videos","[")
     
+    row=0
     for (post_guid, post_title, post_desc, \
             owner_id, owner_name, owner_username, time)\
         in group_videos:
@@ -241,27 +296,35 @@ def write_groupvideos_subsection (db, xml, group_guid):
         # 477 = select * from elgg_metastrings where string='video_url';
         video_link=wrt.post_content(db,post_guid, 477)
         
-        wrt.write_open_tag(xml,3,"video")
+        wrt.write_open_tag(xml,3,"","{")
             
         prefix='videos/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_tag(xml,4,"pid",post_attr)
+        wrt.write_tag(xml,4,"pid",post_attr,",")
         
         prefix='profile/'
         owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
         
-        wrt.write_tag(xml,4,"uid",owner_attr)
-        wrt.write_tag(xml,4,"autor",owner_name)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"link",wrt.hrefstr(video_link))
-        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"uid",owner_attr,",")
+        wrt.write_tag(xml,4,"autor",owner_name,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"link",wrt.hrefstr(video_link),",")
+        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc),",")
             
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"video")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < group_videos.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
         
-    wrt.write_close_tag(xml,2,"videos")
+    wrt.write_close_tag(xml,2,"],")
     
     group_videos.close()
 #--------------------------------------------------------------------#
@@ -276,14 +339,15 @@ def write_groupevents_subsection (db, xml, group_guid):
     # 54 = select * from elgg_metastrings where string='event_calendar_enable';
     perm=wrt.postcontent_permission(db, group_guid, 54)
     
-    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
-    wrt.write_open_tag(xml,2,"eventos")
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm),",")
+    wrt.write_open_tag(xml,2,"eventos","[")
     
+    row=0
     for (post_guid, post_title, post_desc, \
             owner_id, owner_name, owner_username, time)\
         in group_events:
             
-        wrt.write_open_tag(xml,3,"")
+        wrt.write_open_tag(xml,3,"","{")
             
         # 18 = select * from elgg_metastrings where string='venue';
         venue=wrt.post_content(db, post_guid, 18)
@@ -305,28 +369,36 @@ def write_groupevents_subsection (db, xml, group_guid):
 
         prefix='event_calendar/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_tag(xml,4,"pid",post_attr)
+        wrt.write_tag(xml,4,"pid",post_attr,",")
                 
         prefix='profile/'
         owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
         
-        wrt.write_tag(xml,4,"uid",owner_attr)
-        wrt.write_tag(xml,4,"autor",owner_name,)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"organizador",organizer)
-        wrt.write_tag(xml,4,"contato",contact)
-        wrt.write_tag(xml,4,"endereco",venue)
-        wrt.write_tag(xml,4,"data_inicio",wrt.datestr(time_start))
-        wrt.write_tag(xml,4,"data_fim",wrt.datestr(time_end))
-        wrt.write_tag(xml,4,"taxa_participacao",fees)
-        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
-        
-        wrt.write_close_tag(xml,3,"evento")
+        wrt.write_tag(xml,4,"uid",owner_attr,",")
+        wrt.write_tag(xml,4,"autor",owner_name,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"organizador",organizer,",")
+        wrt.write_tag(xml,4,"contato",contact,",")
+        wrt.write_tag(xml,4,"endereco",venue,",")
+        wrt.write_tag(xml,4,"data_inicio",wrt.datestr(time_start),",")
+        wrt.write_tag(xml,4,"data_fim",wrt.datestr(time_end),",")
+        wrt.write_tag(xml,4,"taxa_participacao",fees,",")
+        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc),",")
         
         wrt.write_comments(db,xml,post_guid)
+        
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < group_events.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
     
-    wrt.write_close_tag(xml,2,"eventos")
+    wrt.write_close_tag(xml,2,"]")
     
     group_events.close()
 #--------------------------------------------------------------------#
@@ -336,35 +408,35 @@ def write_groups_section(db, xml_file):
 
     xml = codecs.open(xml_file,'w',encoding='utf-8')
     
-    xml.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?")
-
-    wrt.write_open_tag(xml,0,"comunidades")
+    wrt.write_open_tag(xml,0,"","{")
+    wrt.write_open_tag(xml,0,"comunidades","[")
     
     groups_info = db.cursor()
     groups_info.execute(qry.qry_groups_info)
     
+    row=0
     for (guid, title, desc, owner_id, owner_name, owner_username, time)\
         in groups_info:
-        
+            
         # 45 = select * from elgg_metastrings where string='briefdescription';
         brief_desc=wrt.post_content(db,guid, 45)
         
-        wrt.write_open_tag(xml,1,"")
+        wrt.write_open_tag(xml,1,"","{")
         
         prefix='groups/profile/'
         group_attr=wrt.cidstr(wrt.urlparticipa(prefix,str(guid)))
-        wrt.write_tag(xml,4,"cid",group_attr)
+        wrt.write_tag(xml,4,"cid",group_attr,",")
 
         # Write all group's information
         prefix='profile/'
         owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
         
-        wrt.write_tag(xml,2,"uid",owner_attr)
-        wrt.write_tag(xml,2,"proprietario",owner_name)
-        wrt.write_tag(xml,2,"titulo",title)
-        wrt.write_tag(xml,2,"data",wrt.datestr(time))
-        wrt.write_tag(xml,2,"descricao",wrt.cdata(desc))
-        wrt.write_tag(xml,2,"breve_descricao",wrt.cdata(brief_desc))
+        wrt.write_tag(xml,2,"uid",owner_attr,",")
+        wrt.write_tag(xml,2,"proprietario",owner_name,",")
+        wrt.write_tag(xml,2,"titulo",title,",")
+        wrt.write_tag(xml,2,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,2,"descricao",wrt.cdata(desc),",")
+        wrt.write_tag(xml,2,"breve_descricao",wrt.cdata(brief_desc),",")
                                     
         if wrt.groupaccess_permission(db, guid) == 'public':
             
@@ -378,10 +450,19 @@ def write_groups_section(db, xml_file):
             write_grouppages_subsection(db, xml, guid)
             write_groupvideos_subsection(db, xml, guid)
             write_groupevents_subsection(db, xml, guid)
-        
-        wrt.write_close_tag(xml,1,"comunidade")
-        
-    wrt.write_close_tag(xml,0,"comunidades")
+            
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < groups_info.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,1,sep)
+        
+    wrt.write_close_tag(xml,0,"]")
+    wrt.write_close_tag(xml,0,"}")
     
     groups_info.close()
     
diff --git a/lib/json/user_section.py b/lib/json/user_section.py
index 73ec5a00a3b411b2018a31ed9d58b8b41bd65113..7e3ecdabe60447105c6ae365b0152a8749111d02 100644
--- a/lib/json/user_section.py
+++ b/lib/json/user_section.py
@@ -36,13 +36,31 @@ def write_userfriends_subsection (db, xml, user_guid):
     friends_info = db.cursor()
     friends_info.execute(qry.qry_user_friends, (user_guid))
     
-    wrt.write_open_tag(xml,2,"amigos")
-    for (friend_id, friend_name, friend_username) in friends_info:
+    wrt.write_open_tag(xml,2,"amigos","[")
+    
+    row=0
+    for (friend_id, friend_name, friend_username)\
+        in friends_info:
+            
+        wrt.write_open_tag(xml,3,"","{")
+        
         prefix='profile/'
         friend_attr=wrt.uidstr(wrt.urlparticipa(prefix,friend_username))
-        wrt.write_tag(xml,3,"uid",friend_attr)
-        wrt.write_tag(xml,3,"usuario",friend_name)
-    wrt.write_close_tag(xml,2,"amigos")
+        wrt.write_tag(xml,4,"uid",friend_attr,",")
+        wrt.write_tag(xml,4,"usuario",friend_name,"")
+        
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < friends_info.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_tag(xml,4,str(row),str(friends_info.rowcount),"")
+        wrt.write_close_tag(xml,3,sep)
+        
+    wrt.write_close_tag(xml,2,"],")
         
     friends_info.close()
 #--------------------------------------------------------------------#
@@ -52,13 +70,30 @@ def write_userowngroup_subsection (db, xml, user_guid):
     user_owngroups = db.cursor()
     user_owngroups.execute(qry.qry_user_owngroups, (user_guid, user_guid, ))
         
-    wrt.write_open_tag(xml,3,"dono")
-    for (group_id, group_title) in user_owngroups:
+    wrt.write_open_tag(xml,3,"dono","[")
+    
+    row=0
+    for (group_id, group_title)\
+        in user_owngroups:
+            
+        wrt.write_open_tag(xml,4,"","{")
+        
         prefix='groups/profile/'
         group_attr=wrt.cidstr(wrt.urlparticipa(prefix,str(group_id)))
-        wrt.write_tag(xml,3,"cid",group_attr)
-        wrt.write_tag(xml,4,"titulo",group_title)
-    wrt.write_close_tag(xml,3,"dono")
+        wrt.write_tag(xml,5,"cid",group_attr,",")
+        wrt.write_tag(xml,5,"titulo",group_title,"")
+        
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < user_owngroups.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,4,sep)
+        
+    wrt.write_close_tag(xml,3,"],")
         
     user_owngroups.close()
 #--------------------------------------------------------------------#
@@ -68,23 +103,40 @@ def write_usermembergroup_subsection (db, xml, user_guid):
     user_membergroups = db.cursor()
     user_membergroups.execute(qry.qry_user_membergroups, (user_guid, ))
         
-    wrt.write_open_tag(xml,3,"membro")
-    for (group_id, group_title) in user_membergroups:
+    wrt.write_open_tag(xml,3,"membro","[")
+    
+    row=0
+    for (group_id, group_title)\
+        in user_membergroups:
+            
+        wrt.write_open_tag(xml,4,"","{")
+        
         prefix='groups/profile/'
         group_attr=wrt.cidstr(wrt.urlparticipa(prefix,str(group_id)))
-        wrt.write_tag(xml,3,"cid",group_attr)
-        wrt.write_tag(xml,4,"titulo",group_title)
-    wrt.write_close_tag(xml,3,"membro")
+        wrt.write_tag(xml,5,"cid",group_attr,",")
+        wrt.write_tag(xml,5,"titulo",group_title,",")
+        
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < user_membergroups.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,4,sep)
+        
+    wrt.write_close_tag(xml,3,"]")
         
     user_membergroups.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
 def write_usergroups_subsection (db, xml, user_guid):
-    wrt.write_open_tag(xml,2,"comunidades")
+    wrt.write_open_tag(xml,2,"comunidades","{")
     write_userowngroup_subsection(db, xml, user_guid)
     write_usermembergroup_subsection(db, xml, user_guid)
-    wrt.write_close_tag(xml,2,"comunidades")
+    wrt.write_close_tag(xml,2,"},")
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
@@ -94,8 +146,9 @@ def write_userfiles_subsection (db, xml, user_guid):
     # 1 = select * from elgg_entity_subtypes where subtype='file';
     user_files.execute(qry.qry_user_posts, (user_guid, user_guid, 1,))
     
-    wrt.write_open_tag(xml,2,"arquivos")
+    wrt.write_open_tag(xml,2,"arquivos","[")
     
+    row=0
     for (post_guid, post_title, post_desc, time)\
         in user_files:
         
@@ -105,19 +158,27 @@ def write_userfiles_subsection (db, xml, user_guid):
         prefix='file/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
         
-        wrt.write_open_tag(xml,3,"arquivo")
+        wrt.write_open_tag(xml,3,"","{")
         
-        wrt.write_tag(xml,4,"pid",post_attr)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"link",wrt.hrefstr(file_link))
-        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"pid",post_attr,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"link",wrt.hrefstr(file_link),",")
+        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc),",")
             
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"arquivo")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < user_files.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
     
-    wrt.write_close_tag(xml,2,"arquivos")
+    wrt.write_close_tag(xml,2,"],")
     
     user_files.close()
 #--------------------------------------------------------------------#
@@ -129,8 +190,9 @@ def write_userblogs_subsection (db, xml, user_guid):
     # 4 = select * from elgg_entity_subtypes where subtype='blog';
     user_blogs.execute(qry.qry_user_posts, (user_guid, user_guid, 4,))
     
-    wrt.write_open_tag(xml,2,"blogs")
+    wrt.write_open_tag(xml,2,"blogs","[")
     
+    row=0
     for (post_guid, post_title, post_desc, time)\
         in user_blogs:
                     
@@ -141,19 +203,27 @@ def write_userblogs_subsection (db, xml, user_guid):
             
         prefix='blog/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"blog")
+        wrt.write_open_tag(xml,3,"","{")
 
-        wrt.write_tag(xml,4,"pid",post_attr)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"resumo",wrt.cdata(post_excerpt))
-        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"pid",post_attr,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"resumo",wrt.cdata(post_excerpt),",")
+        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc),",")
                     
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"blog")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < user_blogs.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
             
-    wrt.write_close_tag(xml,2,"blogs")
+    wrt.write_close_tag(xml,2,"],")
     
     user_blogs.close()
 #--------------------------------------------------------------------#
@@ -165,8 +235,9 @@ def write_userbookmarks_subsection (db, xml, user_guid):
     # 13 = select * from elgg_entity_subtypes where subtype='bookmarks';
     user_bookmarks.execute(qry.qry_user_posts, (user_guid, user_guid, 13,))
     
-    wrt.write_open_tag(xml,2,"favoritos")
+    wrt.write_open_tag(xml,2,"favoritos","[")
     
+    row=0
     for (post_guid, post_title, post_desc, time)\
         in user_bookmarks:
                     
@@ -175,19 +246,27 @@ def write_userbookmarks_subsection (db, xml, user_guid):
   
         prefix='bookmarks/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"favorito")
+        wrt.write_open_tag(xml,3,"","{")
     
-        wrt.write_tag(xml,4,"pid",post_attr)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"link",wrt.hrefstr(bookmark_link))
-        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"pid",post_attr,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"link",wrt.hrefstr(bookmark_link),",")
+        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc),",")
                     
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"favorito")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < user_bookmarks.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
                 
-    wrt.write_close_tag(xml,2,"favoritos")
+    wrt.write_close_tag(xml,2,"],")
     
     user_bookmarks.close()
 #--------------------------------------------------------------------#
@@ -199,25 +278,34 @@ def write_userpages_subsection (db, xml, user_guid):
     # 14 = select * from elgg_entity_subtypes where subtype='page_top';
     user_pages.execute(qry.qry_user_posts, (user_guid, user_guid, 14,))
     
-    wrt.write_open_tag(xml,2,"paginas")
+    wrt.write_open_tag(xml,2,"paginas","[")
     
+    row=0
     for (post_guid, post_title, post_desc, time)\
         in user_pages:
         
         prefix='pages/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"pagina")
+        wrt.write_open_tag(xml,3,"","{")
 
-        wrt.write_tag(xml,4,"pid",post_attr)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"pid",post_attr,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc),",")
                     
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"pagina")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < user_pages.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
         
-    wrt.write_close_tag(xml,2,"paginas")
+    wrt.write_close_tag(xml,2,"],")
     
     user_pages.close()
 #--------------------------------------------------------------------#
@@ -229,8 +317,9 @@ def write_uservideos_subsection (db, xml, user_guid):
     # 12 = select * from elgg_entity_subtypes where subtype='videos';
     user_videos.execute(qry.qry_user_posts, (user_guid, user_guid, 12,))
     
-    wrt.write_open_tag(xml,2,"videos")
+    wrt.write_open_tag(xml,2,"videos","[")
     
+    row=0
     for (post_guid, post_title, post_desc, time)\
         in user_videos:
                     
@@ -239,19 +328,27 @@ def write_uservideos_subsection (db, xml, user_guid):
         
         prefix='videos/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"video")
+        wrt.write_open_tag(xml,3,"","{")
         
-        wrt.write_tag(xml,4,"pid",post_attr)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"link",wrt.hrefstr(video_link))
-        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
+        wrt.write_tag(xml,4,"pid",post_attr,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"link",wrt.hrefstr(video_link),",")
+        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc),",")
         
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"video")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < user_videos.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
         
-    wrt.write_close_tag(xml,2,"videos")
+    wrt.write_close_tag(xml,2,"],")
     
     user_videos.close()
 #--------------------------------------------------------------------#
@@ -264,8 +361,9 @@ def write_userevents_subsection (db, xml, user_guid):
     user_events.execute(qry.qry_user_posts, (user_guid, user_guid, 6,))
     
     
-    wrt.write_open_tag(xml,2,"eventos")
+    wrt.write_open_tag(xml,2,"eventos","[")
     
+    row=0
     for (post_guid, post_title, post_desc, time)\
         in user_events:
             
@@ -289,24 +387,32 @@ def write_userevents_subsection (db, xml, user_guid):
         
         prefix='event_calendar/view/'
         post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"")
-        
-        wrt.write_tag(xml,4,"pid",post_attr)
-        wrt.write_tag(xml,4,"titulo",post_title)
-        wrt.write_tag(xml,4,"data",wrt.datestr(time))
-        wrt.write_tag(xml,4,"organizador",organizer)
-        wrt.write_tag(xml,4,"contato",contact)
-        wrt.write_tag(xml,4,"endereco",venue)
-        wrt.write_tag(xml,4,"data_inicio",wrt.datestr(time_start))
-        wrt.write_tag(xml,4,"data_fim",wrt.datestr(time_end))
-        wrt.write_tag(xml,4,"taxa_participacao",fees)
-        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
+        wrt.write_open_tag(xml,3,"","{")
+        
+        wrt.write_tag(xml,4,"pid",post_attr,",")
+        wrt.write_tag(xml,4,"titulo",post_title,",")
+        wrt.write_tag(xml,4,"data",wrt.datestr(time),",")
+        wrt.write_tag(xml,4,"organizador",organizer,",")
+        wrt.write_tag(xml,4,"contato",contact,",")
+        wrt.write_tag(xml,4,"endereco",venue,",")
+        wrt.write_tag(xml,4,"data_inicio",wrt.datestr(time_start),",")
+        wrt.write_tag(xml,4,"data_fim",wrt.datestr(time_end),",")
+        wrt.write_tag(xml,4,"taxa_participacao",fees,",")
+        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc),",")
         
         wrt.write_comments(db,xml,post_guid)
         
-        wrt.write_close_tag(xml,3,"")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < user_events.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,3,sep)
     
-    wrt.write_close_tag(xml,2,"eventos")
+    wrt.write_close_tag(xml,2,"]")
     
     user_events.close()
 #--------------------------------------------------------------------#
@@ -316,22 +422,23 @@ def write_users_section (db, xml_file):
     
     xml = codecs.open(xml_file,'w',encoding='utf-8')
     
-    xml.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
-
-    wrt.write_open_tag(xml,0,"usuarios")
+    wrt.write_open_tag(xml,0,"","{")
+    wrt.write_open_tag(xml,0,"usuarios","[")
     
     users_info = db.cursor()
     users_info.execute(qry.qry_users_info)
     
-    for (guid, name, username) in users_info:
+    row=0
+    for (guid, name, username)\
+        in users_info:
         
         prefix='profile/'
         user_attr=wrt.uidstr(wrt.urlparticipa(prefix,username))
-        wrt.write_open_tag(xml,1,"")
+        wrt.write_open_tag(xml,1,"","{")
         
         # Write all user's information
-        wrt.write_tag(xml,2,"uid",user_attr)
-        wrt.write_tag(xml,2,"nome",name)
+        wrt.write_tag(xml,2,"uid",user_attr,",")
+        wrt.write_tag(xml,2,"nome",name,",")
             
         # Write a list of user friend's names
         write_userfriends_subsection(db, xml, guid)
@@ -347,9 +454,18 @@ def write_users_section (db, xml_file):
         write_uservideos_subsection(db, xml, guid)
         write_userevents_subsection(db, xml, guid)
         
-        wrt.write_close_tag(xml,1,"usuario")
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < users_info.rowcount):
+            sep="},"
+        else:
+            sep="}"
+        
+        wrt.write_close_tag(xml,1,sep)
     
-    wrt.write_close_tag(xml,0,"usuarios")
+    wrt.write_close_tag(xml,0,"]")
+    wrt.write_close_tag(xml,0,"}")
     
     users_info.close()
     
diff --git a/lib/json/write_support_functions.py b/lib/json/write_support_functions.py
index b8d3b93440bc91891563dd42f1ecad2fad946c9b..1168b57136628d5a68133c264148b3dd65796ddc 100644
--- a/lib/json/write_support_functions.py
+++ b/lib/json/write_support_functions.py
@@ -160,51 +160,56 @@ def groupaccess_permission (db, group_guid):
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_open_tag (xml, l, tag_name):
+def write_open_tag (xml, l, tag_name, sep):
     if len(tag_name) > 0:
-        name="\""+tag_name+"\""
-        xml.write(lvl(l)+name+":"+"["+"\n")
+        xml.write(lvl(l)+"\""+tag_name+"\""+":"+sep+"\n")
     else:
-        xml.write(lvl(l)+"{"+"\n")
+        xml.write(lvl(l)+sep+"\n")
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_close_tag (xml, l, tag_name):
-    if len(tag_name) > 0:
-        name="\""+tag_name+"\""
-        xml.write(lvl(l)+"]"+"\n")
-    else:
-        xml.write(lvl(l)+"}"+"\n")
+def write_close_tag (xml, l, sep):
+    xml.write(lvl(l)+sep+"\n")
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_tag (xml, l, tag_name, info_str):
-    level=lvl(l)
+def write_tag (xml, l, tag_name, info_str, comma):
     name="\""+tag_name+"\""
     info="\""+info_str+"\""
-    xml.write(level+name+":"+info+",\n")
+    xml.write(lvl(l)+name+":"+info+comma+"\n")
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
 def write_comments (db, xml, post_guid):
     post_comments = db.cursor()
     post_comments.execute(qry.qry_post_comments, (post_guid,))
-            
-    write_open_tag(xml,4,"comentarios")
-    for (user_id, user_name, user_username, string, time) in post_comments:
+    
+    row=0
+    
+    write_open_tag(xml,4,"comentarios","[")
+    for (user_id, user_name, user_username, string, time)\
+        in post_comments:
         
-        write_open_tag(xml,5,"")
+        write_open_tag(xml,5,"","{")
         
         prefix='profile/'
         user_attr=uidstr(urlparticipa(prefix,user_username))
-        write_tag(xml,6,"uid",user_attr)
-        write_tag(xml,6,"usuario",user_name)
-        write_tag(xml,6,"data",datestr(time))
-        write_tag(xml,6,"mensagem",cdata(string))
+        write_tag(xml,6,"uid",user_attr,",")
+        write_tag(xml,6,"usuario",user_name,",")
+        write_tag(xml,6,"data",datestr(time),",")
+        write_tag(xml,6,"mensagem",cdata(string),"")
+        
+        # Increment the row number to be able to know wheter is the last
+        # row or not.
+        row=row+1
+        if (row < post_comments.rowcount):
+            sep="},"
+        else:
+            sep="}"
         
-        write_close_tag(xml,5,"")
+        write_close_tag(xml,5,sep)
         
-    write_close_tag(xml,4,"comentarios")
+    write_close_tag(xml,4,"]")
     
     post_comments.close()
 #--------------------------------------------------------------------#