diff --git a/lib/json_group_section.py b/lib/json_group_section.py
index 8593519b4a05e30cae4c798f22b65cd029343619..1a4b082df0b572119c1958f3c8fca7c85347a9d1 100644
--- a/lib/json_group_section.py
+++ b/lib/json_group_section.py
@@ -23,22 +23,23 @@
 
 import MySQLdb
 
-import queries_definition as qry
-import string_functions as strf
-import json_support_functions as wrt
+from opendata_json_class import OpendataJSON
+
+import opendata_queries_definition as qry
+import opendata_string_functions as strf
 
 ######################################################################
 # Functions that write on JSON file
 
 #-------------------------------------------------------------------#
-def write_groupmembers_subsection (db, json, group_guid):
-    group_members = db.cursor()
+def write_groupmembers_subsection (json, group_guid):
+    group_members = json.database.cursor()
     group_members.execute(qry.qry_group_members, (group_guid,))
     
     qty=str(group_members.rowcount)
-    wrt.write_tag(json,2,"quantidadeMembros",qty,",")
+    json.write_tag("quantidadeMembros",qty,",")
                 
-    wrt.write_open_tag(json,2,"membros","[")
+    json.write_open_tag("membros","[")
     
     row=0
     for (user_id, user_name, user_username)\
@@ -46,35 +47,35 @@ def write_groupmembers_subsection (db, json, group_guid):
             
         row=row+1
             
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
         prefix='profile/'
         user_attr=strf.urlparticipa(prefix,user_username)
         
-        wrt.write_open_tag(json,4,"usuario","{")
-        wrt.write_tag(json,5,"uid",user_attr,",")
-        wrt.write_tag(json,5,"nome",user_name,"")
-        wrt.write_close_tag(json,4,"}",False)
+        json.write_open_tag("usuario","{")
+        json.write_tag("uid",user_attr,",")
+        json.write_tag("nome",user_name,"")
+        json.write_close_tag("}",False)
         
-        wrt.write_close_tag(json,3,"}",(row < group_members.rowcount))
+        json.write_close_tag("}",(row < group_members.rowcount))
         
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     group_members.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupfiles_subsection (db, json, group_guid):
-    group_files = db.cursor()
+def write_groupfiles_subsection (json, group_guid):
+    group_files = json.database.cursor()
     
     # 1 = select * from elgg_entity_subtypes where subtype='file';
     group_files.execute(qry.qry_group_posts, (group_guid, 1,))
     
     # 50 = select * from elgg_metastrings where string='file_enable';
-    perm=qry.postcontent_permission(db, group_guid, 50)
+    perm=qry.postcontent_permission(json.database, group_guid, 50)
     
-    wrt.write_tag(json,2,"arquivosHabilitado",perm,",")
-    wrt.write_open_tag(json,2,"arquivos","[")
+    json.write_tag("arquivosHabilitado",perm,",")
+    json.write_open_tag("arquivos","[")
     
     row=0
     for (post_guid, post_title, post_desc, \
@@ -83,49 +84,49 @@ def write_groupfiles_subsection (db, json, group_guid):
             
         row=row+1
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
         prefix='file/download/'
         file_link=strf.urlparticipa(prefix,str(post_guid))
         
         prefix='file/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
-        wrt.write_tag(json,4,"pid",post_attr,",")
+        json.write_tag("pid",post_attr,",")
 
         prefix='profile/'
         owner_attr=strf.urlparticipa(prefix,owner_username)
         
-        wrt.write_open_tag(json,4,"autor","{")
-        wrt.write_tag(json,5,"uid",owner_attr,",")
-        wrt.write_tag(json,5,"nome",owner_name,"")
-        wrt.write_close_tag(json,4,"}",True)
+        json.write_open_tag("autor","{")
+        json.write_tag("uid",owner_attr,",")
+        json.write_tag("nome",owner_name,"")
+        json.write_close_tag("}",True)
         
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"link",file_link,",")
-        wrt.write_tag(json,4,"descricao",post_desc,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("link",file_link,",")
+        json.write_tag("descricao",post_desc,",")
                     
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < group_files.rowcount))
+        json.write_close_tag("}",(row < group_files.rowcount))
         
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     group_files.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupforumtopics_subsection (db, json, group_guid):
-    group_forumtopics = db.cursor()
+def write_groupforumtopics_subsection (json, group_guid):
+    group_forumtopics = json.database.cursor()
     
     # 7 = select * from elgg_entity_subtypes where subtype='groupforumtopic';
     group_forumtopics.execute(qry.qry_group_posts, (group_guid, 7,))
     
     # 52 = select * from elgg_metastrings where string='forum_enable';
-    perm=qry.postcontent_permission(db, group_guid, 52)
+    perm=qry.postcontent_permission(json.database, group_guid, 52)
     
-    wrt.write_tag(json,2,"debatesHabilitado",perm,",")
-    wrt.write_open_tag(json,2,"debates","[")
+    json.write_tag("debatesHabilitado",perm,",")
+    json.write_open_tag("debates","[")
     
     row=0
     for (post_guid, post_title, post_desc, \
@@ -134,45 +135,45 @@ def write_groupforumtopics_subsection (db, json, group_guid):
             
         row=row+1
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
         prefix='discussion/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
-        wrt.write_tag(json,4,"pid",post_attr,",")
+        json.write_tag("pid",post_attr,",")
 
         prefix='profile/'
         owner_attr=strf.urlparticipa(prefix,owner_username)
         
-        wrt.write_open_tag(json,4,"autor","{")
-        wrt.write_tag(json,5,"uid",owner_attr,",")
-        wrt.write_tag(json,5,"nome",owner_name,"")
-        wrt.write_close_tag(json,4,"}",True)
+        json.write_open_tag("autor","{")
+        json.write_tag("uid",owner_attr,",")
+        json.write_tag("nome",owner_name,"")
+        json.write_close_tag("}",True)
         
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"texto",post_desc,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("texto",post_desc,",")
             
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < group_forumtopics.rowcount))
+        json.write_close_tag("}",(row < group_forumtopics.rowcount))
         
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     group_forumtopics.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupbookmarks_subsection (db, json, group_guid):
-    group_bookmarks = db.cursor()
+def write_groupbookmarks_subsection (json, group_guid):
+    group_bookmarks = json.database.cursor()
     
     # 13 = select * from elgg_entity_subtypes where subtype='bookmarks';
     group_bookmarks.execute(qry.qry_group_posts, (group_guid, 13,))
     
     # 49 = select * from elgg_metastrings where string='bookmarks_enable';
-    perm=qry.postcontent_permission(db, group_guid, 49)
+    perm=qry.postcontent_permission(json.database, group_guid, 49)
     
-    wrt.write_tag(json,2,"favoritosHabilitado",perm,",")
-    wrt.write_open_tag(json,2,"favoritos","[")
+    json.write_tag("favoritosHabilitado",perm,",")
+    json.write_open_tag("favoritos","[")
     
     row=0
     for (post_guid, post_title, post_desc, \
@@ -181,49 +182,49 @@ def write_groupbookmarks_subsection (db, json, group_guid):
             
         row=row+1
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
         # 90 = select * from elgg_metastrings where string='address';
-        bookmark_link=qry.post_content(db,post_guid,90)
+        bookmark_link=qry.post_content(json.database, post_guid, 90)
         
         prefix='bookmarks/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
-        wrt.write_tag(json,4,"pid",post_attr,",")
+        json.write_tag("pid",post_attr,",")
 
         prefix='profile/'
         owner_attr=strf.urlparticipa(prefix,owner_username)
         
-        wrt.write_open_tag(json,4,"autor","{")
-        wrt.write_tag(json,5,"uid",owner_attr,",")
-        wrt.write_tag(json,5,"nome",owner_name,"")
-        wrt.write_close_tag(json,4,"}",True)
+        json.write_open_tag("autor","{")
+        json.write_tag("uid",owner_attr,",")
+        json.write_tag("nome",owner_name,"")
+        json.write_close_tag("}",True)
         
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"link",bookmark_link,",")
-        wrt.write_tag(json,4,"descricao",post_desc,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("link",bookmark_link,",")
+        json.write_tag("descricao",post_desc,",")
                             
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < group_bookmarks.rowcount))
+        json.write_close_tag("}",(row < group_bookmarks.rowcount))
     
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     group_bookmarks.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_grouppages_subsection (db, json, group_guid):
-    group_pages = db.cursor()
+def write_grouppages_subsection (json, group_guid):
+    group_pages = json.database.cursor()
     
     # 14 = select * from elgg_entity_subtypes where subtype='page_top';
     group_pages.execute(qry.qry_group_posts, (group_guid, 14,))
     
     # 53 = select * from elgg_metastrings where string='pages_enable';
-    perm=qry.postcontent_permission(db, group_guid, 53)
+    perm=qry.postcontent_permission(json.database, group_guid, 53)
     
-    wrt.write_tag(json,2,"paginasHabilitado",perm,",")
-    wrt.write_open_tag(json,2,"paginas","[")
+    json.write_tag("paginasHabilitado",perm,",")
+    json.write_open_tag("paginas","[")
     
     row=0
     for (post_guid, post_title, post_desc,
@@ -232,45 +233,45 @@ def write_grouppages_subsection (db, json, group_guid):
             
         row=row+1
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
         prefix='pages/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
-        wrt.write_tag(json,4,"pid",post_attr,",")
+        json.write_tag("pid",post_attr,",")
 
         prefix='profile/'
         owner_attr=strf.urlparticipa(prefix,owner_username)
         
-        wrt.write_open_tag(json,4,"autor","{")
-        wrt.write_tag(json,5,"uid",owner_attr,",")
-        wrt.write_tag(json,5,"nome",owner_name,"")
-        wrt.write_close_tag(json,4,"}",True)
+        json.write_open_tag("autor","{")
+        json.write_tag("uid",owner_attr,",")
+        json.write_tag("nome",owner_name,"")
+        json.write_close_tag("}",True)
         
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"texto",post_desc,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("texto",post_desc,",")
                     
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < group_pages.rowcount))
+        json.write_close_tag("}",(row < group_pages.rowcount))
         
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     group_pages.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupvideos_subsection (db, json, group_guid):
-    group_videos = db.cursor()
+def write_groupvideos_subsection (json, group_guid):
+    group_videos = json.database.cursor()
     
     # 12 = select * from elgg_entity_subtypes where subtype='videos';
     group_videos.execute(qry.qry_group_posts, (group_guid, 12,))
     
     # 399 = select * from elgg_metastrings where string='videos_enable';
-    perm=qry.postcontent_permission(db, group_guid, 399)
+    perm=qry.postcontent_permission(json.database, group_guid, 399)
     
-    wrt.write_tag(json,2,"videosHabilitado",perm,",")
-    wrt.write_open_tag(json,2,"videos","[")
+    json.write_tag("videosHabilitado",perm,",")
+    json.write_open_tag("videos","[")
     
     row=0
     for (post_guid, post_title, post_desc, \
@@ -280,48 +281,48 @@ def write_groupvideos_subsection (db, json, group_guid):
         row=row+1
             
         # 477 = select * from elgg_metastrings where string='video_url';
-        video_link=qry.post_content(db,post_guid, 477)
+        video_link=qry.post_content(json.database, post_guid, 477)
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
             
         prefix='videos/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
-        wrt.write_tag(json,4,"pid",post_attr,",")
+        json.write_tag("pid",post_attr,",")
         
         prefix='profile/'
         owner_attr=strf.urlparticipa(prefix,owner_username)
         
-        wrt.write_open_tag(json,4,"autor","{")
-        wrt.write_tag(json,5,"uid",owner_attr,",")
-        wrt.write_tag(json,5,"nome",owner_name,"")
-        wrt.write_close_tag(json,4,"}",True)
+        json.write_open_tag("autor","{")
+        json.write_tag("uid",owner_attr,",")
+        json.write_tag("nome",owner_name,"")
+        json.write_close_tag("}",True)
         
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"link",video_link,",")
-        wrt.write_tag(json,4,"descricao",post_desc,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("link",video_link,",")
+        json.write_tag("descricao",post_desc,",")
             
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
 
-        wrt.write_close_tag(json,3,"}",(row < group_videos.rowcount))
+        json.write_close_tag("}",(row < group_videos.rowcount))
         
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     group_videos.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupevents_subsection (db, json, group_guid):
-    group_events = db.cursor()
+def write_groupevents_subsection (json, group_guid):
+    group_events = json.database.cursor()
     
     # 6 = select * from elgg_entity_subtypes where subtype='calendar_event';
     group_events.execute(qry.qry_group_posts, (group_guid, 6,))
     
     # 54 = select * from elgg_metastrings where string='event_calendar_enable';
-    perm=qry.postcontent_permission(db, group_guid, 54)
+    perm=qry.postcontent_permission(json.database, group_guid, 54)
     
-    wrt.write_tag(json,2,"eventosHabilitado",perm,",")
-    wrt.write_open_tag(json,2,"eventos","[")
+    json.write_tag("eventosHabilitado",perm,",")
+    json.write_open_tag("eventos","[")
     
     row=0
     for (post_guid, post_title, post_desc, \
@@ -330,115 +331,117 @@ def write_groupevents_subsection (db, json, group_guid):
             
         row=row+1
             
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
             
         # 18 = select * from elgg_metastrings where string='venue';
-        venue=qry.post_content(db, post_guid, 18)
+        venue=qry.post_content(json.database, post_guid, 18)
         
         # 20 = select * from elgg_metastrings where string='start_date';
-        time_start=qry.post_content(db, post_guid, 20)
+        time_start=qry.post_content(json.database, post_guid, 20)
 
         # 22 = select * from elgg_metastrings where string='end_date';
-        time_end=qry.post_content(db, post_guid, 22)
+        time_end=qry.post_content(json.database, post_guid, 22)
         
         # 26 = select * from elgg_metastrings where string='fees';
-        fees=qry.post_content(db, post_guid, 26)
+        fees=qry.post_content(json.database, post_guid, 26)
         
         # 28 = select * from elgg_metastrings where string='contact';
-        contact=qry.post_content(db, post_guid, 28)
+        contact=qry.post_content(json.database, post_guid, 28)
         
         # 30 = select * from elgg_metastrings where string='organizer';
-        organizer=qry.post_content(db, post_guid, 30)
+        organizer=qry.post_content(json.database, post_guid, 30)
 
         prefix='event_calendar/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
-        wrt.write_tag(json,4,"pid",post_attr,",")
+        json.write_tag("pid",post_attr,",")
                 
         prefix='profile/'
         owner_attr=strf.urlparticipa(prefix,owner_username)
         
-        wrt.write_open_tag(json,4,"autor","{")
-        wrt.write_tag(json,5,"uid",owner_attr,",")
-        wrt.write_tag(json,5,"nome",owner_name,"")
-        wrt.write_close_tag(json,4,"}",True)
+        json.write_open_tag("autor","{")
+        json.write_tag("uid",owner_attr,",")
+        json.write_tag("nome",owner_name,"")
+        json.write_close_tag("}",True)
         
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"organizador",organizer,",")
-        wrt.write_tag(json,4,"contato",contact,",")
-        wrt.write_tag(json,4,"endereco",venue,",")
-        wrt.write_tag(json,4,"dataInicio",strf.datestr(time_start),",")
-        wrt.write_tag(json,4,"dataFim",strf.datestr(time_end),",")
-        wrt.write_tag(json,4,"taxaParticipacao",fees,",")
-        wrt.write_tag(json,4,"descricao",post_desc,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("organizador",organizer,",")
+        json.write_tag("contato",contact,",")
+        json.write_tag("endereco",venue,",")
+        json.write_tag("dataInicio",strf.datestr(time_start),",")
+        json.write_tag("dataFim",strf.datestr(time_end),",")
+        json.write_tag("taxaParticipacao",fees,",")
+        json.write_tag("descricao",post_desc,",")
         
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < group_events.rowcount))
+        json.write_close_tag("}",(row < group_events.rowcount))
     
-    wrt.write_close_tag(json,2,"]",False)
+    json.write_close_tag("]",False)
     
     group_events.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groups_section (db, json,\
+def write_groups_section (json,\
     guid, title, desc, owner_id, owner_name, owner_username, time):
     
     # 45 = select * from elgg_metastrings where string='briefdescription';
-    brief_desc=qry.post_content(db,guid, 45)
+    brief_desc=qry.post_content(json.database, guid, 45)
         
     prefix='groups/profile/'
     group_attr=strf.urlparticipa(prefix,str(guid))
-    wrt.write_tag(json,2,"cid",group_attr,",")
+    json.write_tag("cid",group_attr,",")
     
     # Write all group's information
     prefix='profile/'
     owner_attr=strf.urlparticipa(prefix,owner_username)
     
-    wrt.write_open_tag(json,2,"proprietario","{")
-    wrt.write_tag(json,3,"uid",owner_attr,",")
-    wrt.write_tag(json,3,"nome",owner_name,"")
-    wrt.write_close_tag(json,2,"}",True)
+    json.write_open_tag("proprietario","{")
+    json.write_tag("uid",owner_attr,",")
+    json.write_tag("nome",owner_name,"")
+    json.write_close_tag("}",True)
             
-    wrt.write_tag(json,2,"titulo",title,",")
-    wrt.write_tag(json,2,"data",strf.datestr(time),",")
-    wrt.write_tag(json,2,"descricao",desc,",")
+    json.write_tag("titulo",title,",")
+    json.write_tag("data",strf.datestr(time),",")
+    json.write_tag("descricao",desc,",")
 
-    group_access = qry.groupaccess_permission(db, guid)
+    group_access = qry.groupaccess_permission(json.database, guid)
     
     if group_access == 'public':
         comma=","
     else:
         comma=""
         
-    wrt.write_tag(json,2,"breveDescricao",brief_desc,comma)
+    json.write_tag("breveDescricao",brief_desc,comma)
                                         
     if group_access == 'public':
         
         # Write a list of group member's name
-        write_groupmembers_subsection(db, json, guid)
+        write_groupmembers_subsection(json, guid)
     
         # Write a list, and all the info, of all posts made on the group.
-        write_groupfiles_subsection(db, json, guid)
-        write_groupforumtopics_subsection(db, json, guid)
-        write_groupbookmarks_subsection(db, json, guid)
-        write_grouppages_subsection(db, json, guid)
-        write_groupvideos_subsection(db, json, guid)
-        write_groupevents_subsection(db, json, guid)
+        write_groupfiles_subsection(json, guid)
+        write_groupforumtopics_subsection(json, guid)
+        write_groupbookmarks_subsection(json, guid)
+        write_grouppages_subsection(json, guid)
+        write_groupvideos_subsection(json, guid)
+        write_groupevents_subsection(json, guid)
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
 def write_singlefile_groups_section (db, dir_results):
 
-    groups_info = db.cursor()
-    groups_info.execute(qry.qry_groups_info)
-
     json_filename=dir_results+strf.date_today()+"_comunidades"+".json"
-    json = wrt.open_json_file(json_filename)
+    json = OpendataJSON(db,dir_results,json_filename)
+    
+    groups_info = json.database.cursor()
+    groups_info.execute(qry.qry_groups_info)
+    
+    json.open_file()
     
-    wrt.write_open_tag(json,0,"","{")
-    wrt.write_open_tag(json,0,"comunidades","[")
+    json.write_open_tag("","{")
+    json.write_open_tag("comunidades","[")
     
     row=0
     for (guid, title, desc, owner_id, owner_name, owner_username, time)\
@@ -446,25 +449,25 @@ def write_singlefile_groups_section (db, dir_results):
             
         row=row+1
         
-        wrt.write_open_tag(json,1,"","{")
+        json.write_open_tag("","{")
             
-        write_groups_section(db,json,\
+        write_groups_section(json,\
             guid,title,desc,owner_id,owner_name,owner_username,time)
             
-        wrt.write_close_tag(json,1,"}",(row < groups_info.rowcount))
+        json.write_close_tag("}",(row < groups_info.rowcount))
         
-    wrt.write_close_tag(json,0,"]",False)
-    wrt.write_close_tag(json,0,"}",False)
+    json.write_close_tag("]",False)
+    json.write_close_tag("}",False)
     
-    groups_info.close()
+    json.close_file()
     
-    json.close()
+    groups_info.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
 def write_multifile_groups_section (db, dir_results):
 
-    groups_info = db.cursor()
+    groups_info = json.database.cursor()
     groups_info.execute(qry.qry_groups_info)
 
     for (guid, title, desc, owner_id, owner_name, owner_username, time)\
@@ -473,16 +476,16 @@ def write_multifile_groups_section (db, dir_results):
         json_filename=dir_results+'/groups/'+str(guid)+'.json'
         json = wrt.open_json_file(json_filename)
         
-        wrt.write_open_tag(json,0,"","{")
-        wrt.write_open_tag(json,1,"usuario","{")
+        json.write_open_tag("","{")
+        json.write_open_tag("usuario","{")
             
-        write_groups_section(db,json,\
+        write_groups_section(json,\
             guid,title,desc,owner_id,owner_name,owner_username,time)
             
-        wrt.write_close_tag(json,1,"}",False)
-        wrt.write_close_tag(json,0,"}",False)
+        json.write_close_tag("}",False)
+        json.write_close_tag("}",False)
         
-        json.close()
+        json.close_file()
     
     groups_info.close()
 #--------------------------------------------------------------------#
diff --git a/lib/json_user_section.py b/lib/json_user_section.py
index 3e25fcddecc912ceebb8c88509c45e66b83489a2..df3f7dbb2913f7123f00ddb5ab696310e9ec5b0b 100644
--- a/lib/json_user_section.py
+++ b/lib/json_user_section.py
@@ -23,22 +23,23 @@
 
 import MySQLdb
 
-import queries_definition as qry
-import string_functions as strf
-import json_support_functions as wrt
+from opendata_json_class import OpendataJSON
+
+import opendata_queries_definition as qry
+import opendata_string_functions as strf
 
 ######################################################################
 # Functions that write on JSON file
 
 #--------------------------------------------------------------------#
-def write_userfriends_subsection (db, json, user_guid):
-    friends_info = db.cursor()
+def write_userfriends_subsection (json, user_guid):
+    friends_info = json.database.cursor()
     friends_info.execute(qry.qry_user_friends, (user_guid))
     
     qty=str(friends_info.rowcount)
-    wrt.write_tag(json,2,"quantidadeAmigos",qty,",")
+    json.write_tag("quantidadeAmigos",qty,",")
     
-    wrt.write_open_tag(json,2,"amigos","[")
+    json.write_open_tag("amigos","[")
     
     row=0
     for (friend_id, friend_name, friend_username)\
@@ -46,27 +47,27 @@ def write_userfriends_subsection (db, json, user_guid):
         
         row=row+1
             
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
         prefix='profile/'
         friend_attr=strf.urlparticipa(prefix,friend_username)
         
-        wrt.write_tag(json,4,"uid",friend_attr,",")
-        wrt.write_tag(json,4,"usuario",friend_name,"")
+        json.write_tag("uid",friend_attr,",")
+        json.write_tag("usuario",friend_name,"")
         
-        wrt.write_close_tag(json,3,"}",(row < friends_info.rowcount))
+        json.write_close_tag("}",(row < friends_info.rowcount))
         
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
         
     friends_info.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userowngroup_subsection (db, json, user_guid):        
-    user_owngroups = db.cursor()
+def write_userowngroup_subsection (json, user_guid):        
+    user_owngroups = json.database.cursor()
     user_owngroups.execute(qry.qry_user_owngroups, (user_guid, user_guid, ))
         
-    wrt.write_open_tag(json,3,"dono","[")
+    json.write_open_tag("dono","[")
     
     row=0
     for (group_id, group_title)\
@@ -74,27 +75,27 @@ def write_userowngroup_subsection (db, json, user_guid):
             
         row=row+1
             
-        wrt.write_open_tag(json,4,"","{")
+        json.write_open_tag("","{")
         
         prefix='groups/profile/'
         group_attr=strf.urlparticipa(prefix,str(group_id))
         
-        wrt.write_tag(json,5,"cid",group_attr,",")
-        wrt.write_tag(json,5,"titulo",group_title,"")
+        json.write_tag("cid",group_attr,",")
+        json.write_tag("titulo",group_title,"")
         
-        wrt.write_close_tag(json,4,"}",(row < user_owngroups.rowcount))
+        json.write_close_tag("}",(row < user_owngroups.rowcount))
         
-    wrt.write_close_tag(json,3,"]",True)
+    json.write_close_tag("]",True)
         
     user_owngroups.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_usermembergroup_subsection (db, json, user_guid):
-    user_membergroups = db.cursor()
+def write_usermembergroup_subsection (json, user_guid):
+    user_membergroups = json.database.cursor()
     user_membergroups.execute(qry.qry_user_membergroups, (user_guid, ))
         
-    wrt.write_open_tag(json,3,"participante","[")
+    json.write_open_tag("participante","[")
     
     row=0
     for (group_id, group_title)\
@@ -102,37 +103,37 @@ def write_usermembergroup_subsection (db, json, user_guid):
             
         row=row+1
             
-        wrt.write_open_tag(json,4,"","{")
+        json.write_open_tag("","{")
         
         prefix='groups/profile/'
         group_attr=strf.urlparticipa(prefix,str(group_id))
         
-        wrt.write_tag(json,5,"cid",group_attr,",")
-        wrt.write_tag(json,5,"titulo",group_title,"")
+        json.write_tag("cid",group_attr,",")
+        json.write_tag("titulo",group_title,"")
         
-        wrt.write_close_tag(json,4,"}",(row < user_membergroups.rowcount))
+        json.write_close_tag("}",(row < user_membergroups.rowcount))
         
-    wrt.write_close_tag(json,3,"]",False)
+    json.write_close_tag("]",False)
         
     user_membergroups.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_usergroups_subsection (db, json, user_guid):
-    wrt.write_open_tag(json,2,"comunidades","{")
-    write_userowngroup_subsection(db, json, user_guid)
-    write_usermembergroup_subsection(db, json, user_guid)
-    wrt.write_close_tag(json,2,"}",True)
+def write_usergroups_subsection (json, user_guid):
+    json.write_open_tag("comunidades","{")
+    write_userowngroup_subsection(json, user_guid)
+    write_usermembergroup_subsection(json, user_guid)
+    json.write_close_tag("}",True)
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userfiles_subsection (db, json, user_guid):
-    user_files = db.cursor()
+def write_userfiles_subsection (json, user_guid):
+    user_files = json.database.cursor()
     
     # 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(json,2,"arquivos","[")
+    json.write_open_tag("arquivos","[")
     
     row=0
     for (post_guid, post_title, post_desc, time)\
@@ -146,31 +147,31 @@ def write_userfiles_subsection (db, json, user_guid):
         prefix='file/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
-        wrt.write_tag(json,4,"pid",post_attr,",")
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"link",file_link,",")
-        wrt.write_tag(json,4,"descricao",post_desc,",")
+        json.write_tag("pid",post_attr,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("link",file_link,",")
+        json.write_tag("descricao",post_desc,",")
             
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < user_files.rowcount))
+        json.write_close_tag("}",(row < user_files.rowcount))
     
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     user_files.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userblogs_subsection (db, json, user_guid):
-    user_blogs = db.cursor()
+def write_userblogs_subsection (json, user_guid):
+    user_blogs = json.database.cursor()
     
     # 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(json,2,"blogs","[")
+    json.write_open_tag("blogs","[")
     
     row=0
     for (post_guid, post_title, post_desc, time)\
@@ -178,38 +179,38 @@ def write_userblogs_subsection (db, json, user_guid):
             
         row=row+1
                     
-        post_excerpt = db.cursor()
+        post_excerpt = json.database.cursor()
         
         # 64 = select * from elgg_metastrings where string='excerpt';
-        post_excerpt=qry.post_content(db,post_guid,64)
+        post_excerpt=qry.post_content(json.database,post_guid,64)
             
         prefix='blog/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
 
-        wrt.write_tag(json,4,"pid",post_attr,",")
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"resumo",post_excerpt,",")
-        wrt.write_tag(json,4,"texto",post_desc,",")
+        json.write_tag("pid",post_attr,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("resumo",post_excerpt,",")
+        json.write_tag("texto",post_desc,",")
                     
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < user_blogs.rowcount))
+        json.write_close_tag("}",(row < user_blogs.rowcount))
             
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     user_blogs.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userbookmarks_subsection (db, json, user_guid):
-    user_bookmarks = db.cursor()
+def write_userbookmarks_subsection (json, user_guid):
+    user_bookmarks = json.database.cursor()
     
     # 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(json,2,"favoritos","[")
+    json.write_open_tag("favoritos","[")
     
     row=0
     for (post_guid, post_title, post_desc, time)\
@@ -218,35 +219,35 @@ def write_userbookmarks_subsection (db, json, user_guid):
         row=row+1
                     
         # 90 = select * from elgg_metastrings where string='address';
-        bookmark_link=qry.post_content(db,post_guid,90)
+        bookmark_link=qry.post_content(json.database,post_guid,90)
   
         prefix='bookmarks/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
     
-        wrt.write_tag(json,4,"pid",post_attr,",")
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"link",bookmark_link,",")
-        wrt.write_tag(json,4,"descricao",post_desc,",")
+        json.write_tag("pid",post_attr,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("link",bookmark_link,",")
+        json.write_tag("descricao",post_desc,",")
                     
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < user_bookmarks.rowcount))
+        json.write_close_tag("}",(row < user_bookmarks.rowcount))
                 
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     user_bookmarks.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#    
-def write_userpages_subsection (db, json, user_guid):
-    user_pages = db.cursor()
+def write_userpages_subsection (json, user_guid):
+    user_pages = json.database.cursor()
     
     # 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(json,2,"paginas","[")
+    json.write_open_tag("paginas","[")
     
     row=0
     for (post_guid, post_title, post_desc, time)\
@@ -257,30 +258,30 @@ def write_userpages_subsection (db, json, user_guid):
         prefix='pages/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
 
-        wrt.write_tag(json,4,"pid",post_attr,",")
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"texto",post_desc,",")
+        json.write_tag("pid",post_attr,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("texto",post_desc,",")
                     
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < user_pages.rowcount))
+        json.write_close_tag("}",(row < user_pages.rowcount))
         
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     user_pages.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_uservideos_subsection (db, json, user_guid):
-    user_videos = db.cursor()
+def write_uservideos_subsection (json, user_guid):
+    user_videos = json.database.cursor()
     
     # 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(json,2,"videos","[")
+    json.write_open_tag("videos","[")
     
     row=0
     for (post_guid, post_title, post_desc, time)\
@@ -289,37 +290,37 @@ def write_uservideos_subsection (db, json, user_guid):
         row=row+1
                     
         # 477 = select * from elgg_metastrings where string='video_url';
-        video_link=qry.post_content(db, post_guid, 477)
+        video_link=qry.post_content(json.database, post_guid, 477)
         
         prefix='videos/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
-        wrt.write_tag(json,4,"pid",post_attr,",")
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"link",video_link,",")
-        wrt.write_tag(json,4,"descricao",post_desc,",")
+        json.write_tag("pid",post_attr,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("link",video_link,",")
+        json.write_tag("descricao",post_desc,",")
         
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
         
-        wrt.write_close_tag(json,3,"}",(row < user_videos.rowcount))
+        json.write_close_tag("}",(row < user_videos.rowcount))
         
-    wrt.write_close_tag(json,2,"]",True)
+    json.write_close_tag("]",True)
     
     user_videos.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userevents_subsection (db, json, user_guid):
-    user_events = db.cursor()
+def write_userevents_subsection (json, user_guid):
+    user_events = json.database.cursor()
     
     # 6 = select * from elgg_entity_subtypes where subtype='calendar_event';
     user_events.execute(qry.qry_user_posts, (user_guid, user_guid, 6,))
     
     
-    wrt.write_open_tag(json,2,"eventos","[")
+    json.write_open_tag("eventos","[")
     
     row=0
     for (post_guid, post_title, post_desc, time)\
@@ -328,85 +329,87 @@ def write_userevents_subsection (db, json, user_guid):
         row=row+1
             
         # 18 = select * from elgg_metastrings where string='venue';
-        venue=qry.post_content(db, post_guid, 18)
+        venue=qry.post_content(json.database, post_guid, 18)
         
         # 20 = select * from elgg_metastrings where string='start_date';
-        time_start=qry.post_content(db, post_guid, 20)
+        time_start=qry.post_content(json.database, post_guid, 20)
 
         # 22 = select * from elgg_metastrings where string='end_date';
-        time_end=qry.post_content(db, post_guid, 22)
+        time_end=qry.post_content(json.database, post_guid, 22)
         
         # 26 = select * from elgg_metastrings where string='fees';
-        fees=qry.post_content(db, post_guid, 26)
+        fees=qry.post_content(json.database, post_guid, 26)
         
         # 28 = select * from elgg_metastrings where string='contact';
-        contact=qry.post_content(db, post_guid, 28)
+        contact=qry.post_content(json.database, post_guid, 28)
         
         # 30 = select * from elgg_metastrings where string='organizer';
-        organizer=qry.post_content(db, post_guid, 30)
+        organizer=qry.post_content(json.database, post_guid, 30)
         
         prefix='event_calendar/view/'
         post_attr=strf.urlparticipa(prefix,str(post_guid))
         
-        wrt.write_open_tag(json,3,"","{")
+        json.write_open_tag("","{")
         
-        wrt.write_tag(json,4,"pid",post_attr,",")
-        wrt.write_tag(json,4,"titulo",post_title,",")
-        wrt.write_tag(json,4,"data",strf.datestr(time),",")
-        wrt.write_tag(json,4,"organizador",organizer,",")
-        wrt.write_tag(json,4,"contato",contact,",")
-        wrt.write_tag(json,4,"endereco",venue,",")
-        wrt.write_tag(json,4,"dataInicio",time_start,",")
-        wrt.write_tag(json,4,"dataFim",time_end,",")
-        wrt.write_tag(json,4,"taxaParticipacao",fees,",")
-        wrt.write_tag(json,4,"descricao",post_desc,",")
+        json.write_tag("pid",post_attr,",")
+        json.write_tag("titulo",post_title,",")
+        json.write_tag("data",strf.datestr(time),",")
+        json.write_tag("organizador",organizer,",")
+        json.write_tag("contato",contact,",")
+        json.write_tag("endereco",venue,",")
+        json.write_tag("dataInicio",time_start,",")
+        json.write_tag("dataFim",time_end,",")
+        json.write_tag("taxaParticipacao",fees,",")
+        json.write_tag("descricao",post_desc,",")
         
-        wrt.write_comments(db,json,post_guid)
+        json.write_comments(post_guid)
             
-        wrt.write_close_tag(json,3,"}",(row < user_events.rowcount))
+        json.write_close_tag("}",(row < user_events.rowcount))
     
-    wrt.write_close_tag(json,2,"]",False)
+    json.write_close_tag("]",False)
     
     user_events.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_users_section (db, json, \
+def write_users_section (json, \
     guid, name, username):
 
     prefix='profile/'
     user_attr=strf.urlparticipa(prefix,username)
     
     # Write all user's information
-    wrt.write_tag(json,2,"uid",user_attr,",")
-    wrt.write_tag(json,2,"nome",name,",")
+    json.write_tag("uid",user_attr,",")
+    json.write_tag("nome",name,",")
     
     # Write a list of user friend's names
-    write_userfriends_subsection(db, json, guid)
+    write_userfriends_subsection(json, guid)
     
     # Write a list of all groups that the user owns or belongs
-    write_usergroups_subsection(db, json, guid)
+    write_usergroups_subsection(json, guid)
     
     # Write a list, and all the info, of all posts made by the user
-    write_userfiles_subsection(db, json, guid)
-    write_userblogs_subsection(db, json, guid)
-    write_userbookmarks_subsection(db, json, guid)
-    write_userpages_subsection(db, json, guid)
-    write_uservideos_subsection(db, json, guid)
-    write_userevents_subsection(db, json, guid)
+    write_userfiles_subsection(json, guid)
+    write_userblogs_subsection(json, guid)
+    write_userbookmarks_subsection(json, guid)
+    write_userpages_subsection(json, guid)
+    write_uservideos_subsection(json, guid)
+    write_userevents_subsection(json, guid)
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#    
 def write_singlefile_users_section (db, dir_results):
-    
-    users_info = db.cursor()
+
+    users_info = json.database.cursor()
     users_info.execute(qry.qry_users_info)
     
     json_filename=dir_results+strf.date_today()+"_usuarios"+".json"
-    json = wrt.open_json_file(json_filename)
+    json = OpendataJSON(db,dir_results,json_filename)
+    
+    json.open_file()
     
-    wrt.write_open_tag(json,0,"","{")
-    wrt.write_open_tag(json,0,"usuarios","[")
+    json.write_open_tag("","{")
+    json.write_open_tag("usuarios","[")
     
     row=0
     for (guid, name, username)\
@@ -414,43 +417,45 @@ def write_singlefile_users_section (db, dir_results):
             
         row=row+1
         
-        wrt.write_open_tag(json,1,"","{")
+        json.write_open_tag("","{")
         
-        write_users_section(db,json,\
+        write_users_section(json,\
             guid,name,username)
         
-        wrt.write_close_tag(json,1,"}",(row < users_info.rowcount))
+        json.write_close_tag("}",(row < users_info.rowcount))
     
-    wrt.write_close_tag(json,0,"]",False)
-    wrt.write_close_tag(json,0,"}",False)
+    json.write_close_tag("]",False)
+    json.write_close_tag("}",False)
     
-    users_info.close()
+    json.close_file()
     
-    json.close()
+    users_info.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#    
 def write_multifile_users_section (db, dir_results):
 
-    users_info = db.cursor()
+    users_info = json.database.cursor()
     users_info.execute(qry.qry_users_info)
     
     for (guid, name, username)\
         in users_info:
             
         json_filename=dir_results+'/users/'+str(guid)+'.json'
-        json = wrt.open_json_file(json_filename)
+        json = OpendataJSON(db,dir_results,json_filename)
+        
+        json.open_file()
             
-        wrt.write_open_tag(json,0,"","{")
-        wrt.write_open_tag(json,1,"usuario","{")
+        json.write_open_tag("","{")
+        json.write_open_tag("usuario","{")
                 
-        write_users_section(db,json,\
+        write_users_section(json.database,json,\
             guid,name,username)
         
-        wrt.write_close_tag(json,1,"}",False)
-        wrt.write_close_tag(json,0,"}",False)
+        json.write_close_tag("}",False)
+        json.write_close_tag("}",False)
         
-        json.close()
+        json.close_file()
     
     users_info.close()
 #--------------------------------------------------------------------#
diff --git a/lib/opendata_json_class.py b/lib/opendata_json_class.py
index 94532c97496f569f14ff32b4cc40a525f3b54fa7..bffae1caca24e5038f5b5f5a012c118f9c2635d1 100644
--- a/lib/opendata_json_class.py
+++ b/lib/opendata_json_class.py
@@ -57,7 +57,7 @@ class OpendataJSON:
         
     #--------------------------------------------------------------------#
     def open_file (self):
-        self.out_file=codecs.open(self.out_filename,'w',encoding='utf-8')
+        self.out_file=codecs.open(self.filename,'w',encoding='utf-8')
     #--------------------------------------------------------------------#
 
     #--------------------------------------------------------------------#
@@ -80,14 +80,14 @@ class OpendataJSON:
         if comma_flag == True:
             self.out_file.write(self.level+sep+","+"\n")
         else:
-            print(self.level+sep+"\n")
+            self.out_file.write(self.level+sep+"\n")
     #--------------------------------------------------------------------#
 
     #--------------------------------------------------------------------#
     def write_tag (self, tag_name, info_str, comma):
         name="\""+tag_name+"\""
         info="\""+strf.substbadc(info_str)+"\""
-        print(self.level+name+":"+info+comma+"\n")
+        self.out_file.write(self.level+name+":"+info+comma+"\n")
     #--------------------------------------------------------------------#
 
     #--------------------------------------------------------------------#
diff --git a/lib/opendata_xml_class.py b/lib/opendata_xml_class.py
index c8c95926676ddfa68684605d010b50a5a3f09473..f39ea37ba0f666e0923a8e3fb9019c2310851450 100644
--- a/lib/opendata_xml_class.py
+++ b/lib/opendata_xml_class.py
@@ -47,7 +47,7 @@ class OpendataXML:
         self.dir_results = dir_results
         self.filename = filename
     #--------------------------------------------------------------------#
-    
+
     #--------------------------------------------------------------------#
     def update_indentation(self, increment):
         self.indentation=self.indentation+(increment)
@@ -55,11 +55,11 @@ class OpendataXML:
     #--------------------------------------------------------------------#
 
     #--------------------------------------------------------------------#
-    def open_file (xml_filename):
-        self.out_file = codecs.open(xml_filename,'w',encoding='utf-8')
+    def open_file (self):
+        self.out_file = codecs.open(self.filename,'w',encoding='utf-8')
         self.out_file.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
     #--------------------------------------------------------------------#
-    
+
     #--------------------------------------------------------------------#
     def close_file (self):
         self.out_file.close()
@@ -89,7 +89,7 @@ class OpendataXML:
 
     #--------------------------------------------------------------------#
     def write_comments (self, post_guid):
-        post_comments = db.cursor()
+        post_comments = self.database.cursor()
         post_comments.execute(qry.qry_post_comments, (post_guid,))
                 
         self.write_open_tag("comentarios",'')
diff --git a/lib/xml_group_section.py b/lib/xml_group_section.py
index 7bd8709bb7e493df9e8203e9d4c6609c437e3918..98fea50835f3f2e1ad1e0a1d787ac06c0356e372 100644
--- a/lib/xml_group_section.py
+++ b/lib/xml_group_section.py
@@ -23,42 +23,43 @@
 
 import MySQLdb
 
-import queries_definition as qry
-import string_functions as strf
-import xml_support_functions as wrt
+from opendata_xml_class import OpendataXML
+
+import opendata_queries_definition as qry
+import opendata_string_functions as strf
 
 ######################################################################
 # Functions that write on XML file
 
 #-------------------------------------------------------------------#
-def write_groupmembers_subsection (db, xml, group_guid):
-    group_members = db.cursor()
+def write_groupmembers_subsection (xml, group_guid):
+    group_members = xml.database.cursor()
     group_members.execute(qry.qry_group_members, (group_guid,))
     
     qty=str(group_members.rowcount)
-    wrt.write_tag(xml,2,"quantidade_membros",qty,'')
+    xml.write_tag("quantidade_membros",qty,'')
                     
-    wrt.write_open_tag(xml,2,"membros",'')
+    xml.write_open_tag("membros",'')
     for (user_id, user_name, user_username) in group_members:
         prefix='profile/'
         user_attr=strf.uidstr(strf.urlparticipa(prefix,user_username))
-        wrt.write_tag(xml,3,"usuario",user_name,user_attr)
-    wrt.write_close_tag(xml,2,"membros")
+        xml.write_tag("usuario",user_name,user_attr)
+    xml.write_close_tag("membros")
     
     group_members.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupfiles_subsection (db, xml, group_guid):
-    group_files = db.cursor()
+def write_groupfiles_subsection (xml, group_guid):
+    group_files = xml.database.cursor()
     
     # 1 = select * from elgg_entity_subtypes where subtype='file';
     group_files.execute(qry.qry_group_posts, (group_guid, 1,))
     
     # 50 = select * from elgg_metastrings where string='file_enable';
-    perm=qry.postcontent_permission(db, group_guid, 50)
+    perm=qry.postcontent_permission(xml.database, group_guid, 50)
     
-    wrt.write_open_tag(xml,2,"arquivos",strf.permstr(perm))
+    xml.write_open_tag("arquivos",strf.permstr(perm))
     
     for (post_guid, post_title, post_desc, \
             owner_id, owner_name, owner_username, time)\
@@ -69,36 +70,36 @@ def write_groupfiles_subsection (db, xml, group_guid):
         
         prefix='file/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"arquivo",post_attr)
+        xml.write_open_tag("arquivo",post_attr)
 
         prefix='profile/'
         owner_attr=strf.uidstr(strf.urlparticipa(prefix,owner_username))
-        wrt.write_tag(xml,4,"autor",owner_name,owner_attr)
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"link",'',strf.hrefstr(file_link))
-        wrt.write_tag(xml,4,"descricao",strf.cdata(post_desc),'')
+        xml.write_tag("autor",owner_name,owner_attr)
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("link",'',strf.hrefstr(file_link))
+        xml.write_tag("descricao",strf.cdata(post_desc),'')
                     
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"arquivo")
+        xml.write_close_tag("arquivo")
         
-    wrt.write_close_tag(xml,2,"arquivos")
+    xml.write_close_tag("arquivos")
     
     group_files.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupforumtopics_subsection (db, xml, group_guid):
-    group_forumtopics = db.cursor()
+def write_groupforumtopics_subsection (xml, group_guid):
+    group_forumtopics = xml.database.cursor()
     
     # 7 = select * from elgg_entity_subtypes where subtype='groupforumtopic';
     group_forumtopics.execute(qry.qry_group_posts, (group_guid, 7,))
     
     # 52 = select * from elgg_metastrings where string='forum_enable';
-    perm=qry.postcontent_permission(db, group_guid, 52)
+    perm=qry.postcontent_permission(xml.database, group_guid, 52)
     
-    wrt.write_open_tag(xml,2,"debates",strf.permstr(perm))
+    xml.write_open_tag("debates",strf.permstr(perm))
     
     for (post_guid, post_title, post_desc, \
         owner_id, owner_name, owner_username, time)\
@@ -106,75 +107,75 @@ def write_groupforumtopics_subsection (db, xml, group_guid):
         
         prefix='discussion/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"debate",post_attr)
+        xml.write_open_tag("debate",post_attr)
 
         prefix='profile/'
         owner_attr=strf.uidstr(strf.urlparticipa(prefix,owner_username))
-        wrt.write_tag(xml,4,"autor",owner_name,owner_attr)
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"texto",strf.cdata(post_desc),'')
+        xml.write_tag("autor",owner_name,owner_attr)
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("texto",strf.cdata(post_desc),'')
             
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"debate")
+        xml.write_close_tag("debate")
         
-    wrt.write_close_tag(xml,2,"debates")
+    xml.write_close_tag("debates")
     
     group_forumtopics.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupbookmarks_subsection (db, xml, group_guid):
-    group_bookmarks = db.cursor()
+def write_groupbookmarks_subsection (xml, group_guid):
+    group_bookmarks = xml.database.cursor()
     
     # 13 = select * from elgg_entity_subtypes where subtype='bookmarks';
     group_bookmarks.execute(qry.qry_group_posts, (group_guid, 13,))
     
     # 49 = select * from elgg_metastrings where string='bookmarks_enable';
-    perm=qry.postcontent_permission(db, group_guid, 49)
+    perm=qry.postcontent_permission(xml.database, group_guid, 49)
     
-    wrt.write_open_tag(xml,2,"favoritos",strf.permstr(perm))
+    xml.write_open_tag("favoritos",strf.permstr(perm))
     
     for (post_guid, post_title, post_desc, \
             owner_id, owner_name, owner_username, time)\
         in group_bookmarks:
             
         # 90 = select * from elgg_metastrings where string='address';
-        bookmark_link=qry.post_content(db,post_guid,90)
+        bookmark_link=qry.post_content(xml.database, post_guid, 90)
         
         prefix='bookmarks/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"favorito",post_attr)
+        xml.write_open_tag("favorito",post_attr)
 
         prefix='profile/'
         owner_attr=strf.uidstr(strf.urlparticipa(prefix,owner_username))
-        wrt.write_tag(xml,4,"autor",owner_name,owner_attr)
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"link",'',strf.hrefstr(bookmark_link))
-        wrt.write_tag(xml,4,"descricao",strf.cdata(post_desc),'')
+        xml.write_tag("autor",owner_name,owner_attr)
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("link",'',strf.hrefstr(bookmark_link))
+        xml.write_tag("descricao",strf.cdata(post_desc),'')
                             
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"favorito")
+        xml.write_close_tag("favorito")
     
-    wrt.write_close_tag(xml,2,"favoritos")
+    xml.write_close_tag("favoritos")
     
     group_bookmarks.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_grouppages_subsection (db, xml, group_guid):
-    group_pages = db.cursor()
+def write_grouppages_subsection (xml, group_guid):
+    group_pages = xml.database.cursor()
     
     # 14 = select * from elgg_entity_subtypes where subtype='page_top';
     group_pages.execute(qry.qry_group_posts, (group_guid, 14,))
     
     # 53 = select * from elgg_metastrings where string='pages_enable';
-    perm=qry.postcontent_permission(db, group_guid, 53)
+    perm=qry.postcontent_permission(xml.database, group_guid, 53)
     
-    wrt.write_open_tag(xml,2,"paginas",strf.permstr(perm))
+    xml.write_open_tag("paginas",strf.permstr(perm))
     
     for (post_guid, post_title, post_desc,
             owner_id, owner_name, owner_username, time)\
@@ -182,158 +183,158 @@ def write_grouppages_subsection (db, xml, group_guid):
         
         prefix='pages/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"pagina",post_attr)
+        xml.write_open_tag("pagina",post_attr)
 
         prefix='profile/'
         owner_attr=strf.uidstr(strf.urlparticipa(prefix,owner_username))
-        wrt.write_tag(xml,4,"autor",owner_name,owner_attr)
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"texto",strf.cdata(post_desc),'')
+        xml.write_tag("autor",owner_name,owner_attr)
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("texto",strf.cdata(post_desc),'')
                     
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"pagina")
+        xml.write_close_tag("pagina")
         
-    wrt.write_close_tag(xml,2,"paginas")
+    xml.write_close_tag("paginas")
     
     group_pages.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupvideos_subsection (db, xml, group_guid):
-    group_videos = db.cursor()
+def write_groupvideos_subsection (xml, group_guid):
+    group_videos = xml.database.cursor()
     
     # 12 = select * from elgg_entity_subtypes where subtype='videos';
     group_videos.execute(qry.qry_group_posts, (group_guid, 12,))
     
     # 399 = select * from elgg_metastrings where string='videos_enable';
-    perm=qry.postcontent_permission(db, group_guid, 399)
+    perm=qry.postcontent_permission(xml.database, group_guid, 399)
     
-    wrt.write_open_tag(xml,2,"videos",strf.permstr(perm))
+    xml.write_open_tag("videos",strf.permstr(perm))
     
     for (post_guid, post_title, post_desc, \
             owner_id, owner_name, owner_username, time)\
         in group_videos:
             
         # 477 = select * from elgg_metastrings where string='video_url';
-        video_link=qry.post_content(db,post_guid, 477)
+        video_link=qry.post_content(xml.database, post_guid, 477)
             
         prefix='videos/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"video",post_attr)
+        xml.write_open_tag("video",post_attr)
 
         prefix='profile/'
         owner_attr=strf.uidstr(strf.urlparticipa(prefix,owner_username))
-        wrt.write_tag(xml,4,"autor",owner_name,owner_attr)
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"link",'',strf.hrefstr(video_link))
-        wrt.write_tag(xml,4,"descricao",strf.cdata(post_desc),'')
+        xml.write_tag("autor",owner_name,owner_attr)
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("link",'',strf.hrefstr(video_link))
+        xml.write_tag("descricao",strf.cdata(post_desc),'')
             
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"video")
+        xml.write_close_tag("video")
         
-    wrt.write_close_tag(xml,2,"videos")
+    xml.write_close_tag("videos")
     
     group_videos.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groupevents_subsection (db, xml, group_guid):
-    group_events = db.cursor()
+def write_groupevents_subsection (xml, group_guid):
+    group_events = xml.database.cursor()
     
     # 6 = select * from elgg_entity_subtypes where subtype='calendar_event';
     group_events.execute(qry.qry_group_posts, (group_guid, 6,))
     
     # 54 = select * from elgg_metastrings where string='event_calendar_enable';
-    perm=qry.postcontent_permission(db, group_guid, 54)
+    perm=qry.postcontent_permission(xml.database, group_guid, 54)
     
-    wrt.write_open_tag(xml,2,"eventos",strf.permstr(perm))
+    xml.write_open_tag("eventos",strf.permstr(perm))
     
     for (post_guid, post_title, post_desc, \
             owner_id, owner_name, owner_username, time)\
         in group_events:
             
         # 18 = select * from elgg_metastrings where string='venue';
-        venue=qry.post_content(db, post_guid, 18)
+        venue=qry.post_content(xml.database, post_guid, 18)
         
         # 20 = select * from elgg_metastrings where string='start_date';
-        time_start=qry.post_content(db, post_guid, 20)
+        time_start=qry.post_content(xml.database, post_guid, 20)
 
         # 22 = select * from elgg_metastrings where string='end_date';
-        time_end=qry.post_content(db, post_guid, 22)
+        time_end=qry.post_content(xml.database, post_guid, 22)
         
         # 26 = select * from elgg_metastrings where string='fees';
-        fees=qry.post_content(db, post_guid, 26)
+        fees=qry.post_content(xml.database, post_guid, 26)
         
         # 28 = select * from elgg_metastrings where string='contact';
-        contact=qry.post_content(db, post_guid, 28)
+        contact=qry.post_content(xml.database, post_guid, 28)
         
         # 30 = select * from elgg_metastrings where string='organizer';
-        organizer=qry.post_content(db, post_guid, 30)
+        organizer=qry.post_content(xml.database, post_guid, 30)
 
         prefix='event_calendar/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"evento",post_attr)
+        xml.write_open_tag("evento",post_attr)
         
         prefix='profile/'
         owner_attr=strf.uidstr(strf.urlparticipa(prefix,owner_username))
-        wrt.write_tag(xml,4,"autor",owner_name,owner_attr)
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.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",strf.datestr(time_start),'')
-        wrt.write_tag(xml,4,"data_fim",strf.datestr(time_end),'')
-        wrt.write_tag(xml,4,"taxa_participacao",fees,'')
-        wrt.write_tag(xml,4,"descricao",strf.cdata(post_desc),'')
+        xml.write_tag("autor",owner_name,owner_attr)
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("organizador",organizer,'')
+        xml.write_tag("contato",contact,'')
+        xml.write_tag("endereco",venue,'')
+        xml.write_tag("data_inicio",strf.datestr(time_start),'')
+        xml.write_tag("data_fim",strf.datestr(time_end),'')
+        xml.write_tag("taxa_participacao",fees,'')
+        xml.write_tag("descricao",strf.cdata(post_desc),'')
         
-        wrt.write_close_tag(xml,3,"evento")
+        xml.write_close_tag("evento")
         
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
     
-    wrt.write_close_tag(xml,2,"eventos")
+    xml.write_close_tag("eventos")
     
     group_events.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_groups_section(db, xml, \
+def write_groups_section(xml, \
     guid, title, desc, owner_id, owner_name, owner_username, time):
 
     # 45 = select * from elgg_metastrings where string='briefdescription';
-    brief_desc=qry.post_content(db,guid, 45)
+    brief_desc=qry.post_content(xml.database, guid, 45)
     
     prefix='groups/profile/'
     group_attr=strf.cidstr(strf.urlparticipa(prefix,str(guid)))
-    wrt.write_open_tag(xml,1,"comunidade",group_attr)
+    xml.write_open_tag("comunidade",group_attr)
     
     # Write all group's information
     prefix='profile/'
     owner_attr=strf.uidstr(strf.urlparticipa(prefix,owner_username))
-    wrt.write_tag(xml,2,"proprietario",owner_name,owner_attr)
-    wrt.write_tag(xml,2,"titulo",title,'')
-    wrt.write_tag(xml,2,"data",strf.datestr(time),'')
-    wrt.write_tag(xml,2,"descricao",strf.cdata(desc),'')
-    wrt.write_tag(xml,2,"breve_descricao",strf.cdata(brief_desc),'')
+    xml.write_tag("proprietario",owner_name,owner_attr)
+    xml.write_tag("titulo",title,'')
+    xml.write_tag("data",strf.datestr(time),'')
+    xml.write_tag("descricao",strf.cdata(desc),'')
+    xml.write_tag("breve_descricao",strf.cdata(brief_desc),'')
                                 
-    if qry.groupaccess_permission(db, guid) == 'public':
+    if qry.groupaccess_permission(xml.database, guid) == 'public':
             
         # Write a list of group member's name
-        write_groupmembers_subsection(db, xml, guid)
+        write_groupmembers_subsection(xml, guid)
         
         # Write a list, and all the info, of all posts made on the group.
-        write_groupfiles_subsection(db, xml, guid)
-        write_groupforumtopics_subsection(db, xml, guid)
-        write_groupbookmarks_subsection(db, xml, guid)
-        write_grouppages_subsection(db, xml, guid)
-        write_groupvideos_subsection(db, xml, guid)
-        write_groupevents_subsection(db, xml, guid)
+        write_groupfiles_subsection(xml, guid)
+        write_groupforumtopics_subsection(xml, guid)
+        write_groupbookmarks_subsection(xml, guid)
+        write_grouppages_subsection(xml, guid)
+        write_groupvideos_subsection(xml, guid)
+        write_groupevents_subsection(xml, guid)
         
-    wrt.write_close_tag(xml,1,"comunidade")
+    xml.write_close_tag("comunidade")
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
@@ -343,21 +344,23 @@ def write_singlefile_groups_section (db, dir_results):
     groups_info.execute(qry.qry_groups_info)
 
     xml_filename=dir_results+strf.date_today()+"_comunidades"+".xml"
-    xml = wrt.open_xml_file(xml_filename)
+    xml = OpendataXML(db,dir_results,xml_filename)
+    
+    xml.open_file()
 
-    wrt.write_open_tag(xml,0,"comunidades",'')
+    xml.write_open_tag("comunidades",'')
     
     for (guid, title, desc, owner_id, owner_name, owner_username, time)\
         in groups_info:
         
-        write_groups_section(db,xml,\
+        write_groups_section(xml,\
             guid,title,desc,owner_id,owner_name,owner_username,time)
     
-    wrt.write_close_tag(xml,0,"comunidades")
+    xml.write_close_tag("comunidades")
     
-    groups_info.close()
+    xml.close_file()
     
-    xml.close()
+    groups_info.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
@@ -370,12 +373,14 @@ def write_multifile_groups_section (db, dir_results):
         in groups_info:
             
         xml_filename=dir_results+'/groups/'+str(guid)+'.xml'
-        xml = wrt.open_xml_file(xml_filename)
+        xml = OpendataXML(db,dir_results,xml_filename)
+        
+        xml.open_file()
         
-        write_groups_section(db,xml,\
+        write_groups_section(xml,\
             guid,title,desc,owner_id,owner_name,owner_username,time)
             
-        xml.close()
+        xml.close_file()
         
     groups_info.close()
 #--------------------------------------------------------------------#
diff --git a/lib/xml_user_section.py b/lib/xml_user_section.py
index 23ae68a7f5a62be0d47762813b139f364ceb347c..93e9be68681b7016421cabd3530377ef72fe4ae1 100644
--- a/lib/xml_user_section.py
+++ b/lib/xml_user_section.py
@@ -23,77 +23,78 @@
 
 import MySQLdb
 
-import queries_definition as qry
-import string_functions as strf
-import xml_support_functions as wrt
+from opendata_xml_class import OpendataXML
+
+import opendata_queries_definition as qry
+import opendata_string_functions as strf
 
 ######################################################################
 # Functions that write on XML file
 
 #--------------------------------------------------------------------#
-def write_userfriends_subsection (db, xml, user_guid):
-    friends_info = db.cursor()
+def write_userfriends_subsection (xml, user_guid):
+    friends_info = xml.database.cursor()
     friends_info.execute(qry.qry_user_friends, (user_guid))
     
     qty=str(friends_info.rowcount)
-    wrt.write_tag(xml,2,"quantidade_amigos",qty,'')
+    xml.write_tag("quantidade_amigos",qty,'')
     
-    wrt.write_open_tag(xml,2,"amigos",'')
+    xml.write_open_tag("amigos",'')
     for (friend_id, friend_name, friend_username) in friends_info:
         prefix='profile/'
         friend_attr=strf.uidstr(strf.urlparticipa(prefix,friend_username))
-        wrt.write_tag(xml,3,"usuario",friend_name,friend_attr)
-    wrt.write_close_tag(xml,2,"amigos")
+        xml.write_tag("usuario",friend_name,friend_attr)
+    xml.write_close_tag("amigos")
         
     friends_info.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userowngroup_subsection (db, xml, user_guid):        
-    user_owngroups = db.cursor()
+def write_userowngroup_subsection (xml, user_guid):        
+    user_owngroups = xml.database.cursor()
     user_owngroups.execute(qry.qry_user_owngroups, (user_guid, user_guid, ))
         
-    wrt.write_open_tag(xml,3,"dono",'')
+    xml.write_open_tag("dono",'')
     for (group_id, group_title) in user_owngroups:
         prefix='groups/profile/'
         group_attr=strf.cidstr(strf.urlparticipa(prefix,str(group_id)))
-        wrt.write_tag(xml,4,"comunidade",group_title,group_attr)
-    wrt.write_close_tag(xml,3,"dono")
+        xml.write_tag("comunidade",group_title,group_attr)
+    xml.write_close_tag("dono")
         
     user_owngroups.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_usermembergroup_subsection (db, xml, user_guid):
-    user_membergroups = db.cursor()
+def write_usermembergroup_subsection (xml, user_guid):
+    user_membergroups = xml.database.cursor()
     user_membergroups.execute(qry.qry_user_membergroups, (user_guid, ))
         
-    wrt.write_open_tag(xml,3,"participante",'')
+    xml.write_open_tag("participante",'')
     for (group_id, group_title) in user_membergroups:
         prefix='groups/profile/'
         group_attr=strf.cidstr(strf.urlparticipa(prefix,str(group_id)))
-        wrt.write_tag(xml,4,"comunidade",group_title,group_attr)
-    wrt.write_close_tag(xml,3,"participante")
+        xml.write_tag("comunidade",group_title,group_attr)
+    xml.write_close_tag("participante")
         
     user_membergroups.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_usergroups_subsection (db, xml, user_guid):
-    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")
+def write_usergroups_subsection (xml, user_guid):
+    xml.write_open_tag("comunidades",'')
+    write_userowngroup_subsection(xml, user_guid)
+    write_usermembergroup_subsection(xml, user_guid)
+    xml.write_close_tag("comunidades")
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userfiles_subsection (db, xml, user_guid):
-    user_files = db.cursor()
+def write_userfiles_subsection (xml, user_guid):
+    user_files = xml.database.cursor()
     
     # 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",'')
+    xml.write_open_tag("arquivos",'')
     
     for (post_guid, post_title, post_desc, time)\
         in user_files:
@@ -103,232 +104,232 @@ def write_userfiles_subsection (db, xml, user_guid):
         
         prefix='file/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"arquivo",post_attr)
+        xml.write_open_tag("arquivo",post_attr)
         
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"link",'',strf.hrefstr(file_link))
-        wrt.write_tag(xml,4,"descricao",strf.cdata(post_desc),'')
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("link",'',strf.hrefstr(file_link))
+        xml.write_tag("descricao",strf.cdata(post_desc),'')
             
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"arquivo")
+        xml.write_close_tag("arquivo")
     
-    wrt.write_close_tag(xml,2,"arquivos")
+    xml.write_close_tag("arquivos")
     
     user_files.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userblogs_subsection (db, xml, user_guid):
-    user_blogs = db.cursor()
+def write_userblogs_subsection (xml, user_guid):
+    user_blogs = xml.database.cursor()
     
     # 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",'')
+    xml.write_open_tag("blogs",'')
     
     for (post_guid, post_title, post_desc, time)\
         in user_blogs:
                     
-        post_excerpt = db.cursor()
+        post_excerpt = xml.database.cursor()
         
         # 64 = select * from elgg_metastrings where string='excerpt';
-        post_excerpt=qry.post_content(db,post_guid,64)
+        post_excerpt=qry.post_content(xml.database, post_guid, 64)
             
         prefix='blog/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"blog",post_attr)
+        xml.write_open_tag("blog",post_attr)
 
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"resumo",strf.cdata(post_excerpt),'')
-        wrt.write_tag(xml,4,"texto",strf.cdata(post_desc),'')
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("resumo",strf.cdata(post_excerpt),'')
+        xml.write_tag("texto",strf.cdata(post_desc),'')
                     
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"blog")
+        xml.write_close_tag("blog")
             
-    wrt.write_close_tag(xml,2,"blogs")
+    xml.write_close_tag("blogs")
     
     user_blogs.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userbookmarks_subsection (db, xml, user_guid):
-    user_bookmarks = db.cursor()
+def write_userbookmarks_subsection (xml, user_guid):
+    user_bookmarks = xml.database.cursor()
     
     # 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",'')
+    xml.write_open_tag("favoritos",'')
     
     for (post_guid, post_title, post_desc, time)\
         in user_bookmarks:
                     
         # 90 = select * from elgg_metastrings where string='address';
-        bookmark_link=qry.post_content(db,post_guid,90)
+        bookmark_link=qry.post_content(xml.database, post_guid, 90)
   
         prefix='bookmarks/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"favorito",post_attr)
+        xml.write_open_tag("favorito",post_attr)
     
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"link",'',strf.hrefstr(bookmark_link))
-        wrt.write_tag(xml,4,"descricao",strf.cdata(post_desc),'')
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("link",'',strf.hrefstr(bookmark_link))
+        xml.write_tag("descricao",strf.cdata(post_desc),'')
                     
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"favorito")
+        xml.write_close_tag("favorito")
                 
-    wrt.write_close_tag(xml,2,"favoritos")
+    xml.write_close_tag("favoritos")
     
     user_bookmarks.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#    
-def write_userpages_subsection (db, xml, user_guid):
-    user_pages = db.cursor()
+def write_userpages_subsection (xml, user_guid):
+    user_pages = xml.database.cursor()
     
     # 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",'')
+    xml.write_open_tag("paginas",'')
     
     for (post_guid, post_title, post_desc, time)\
         in user_pages:
         
         prefix='pages/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"pagina",post_attr)
+        xml.write_open_tag("pagina",post_attr)
 
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"texto",strf.cdata(post_desc),'')
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("texto",strf.cdata(post_desc),'')
                     
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"pagina")
+        xml.write_close_tag("pagina")
         
-    wrt.write_close_tag(xml,2,"paginas")
+    xml.write_close_tag("paginas")
     
     user_pages.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_uservideos_subsection (db, xml, user_guid):
-    user_videos = db.cursor()
+def write_uservideos_subsection (xml, user_guid):
+    user_videos = xml.database.cursor()
     
     # 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",'')
+    xml.write_open_tag("videos",'')
     
     for (post_guid, post_title, post_desc, time)\
         in user_videos:
                     
         # 477 = select * from elgg_metastrings where string='video_url';
-        video_link=qry.post_content(db, post_guid, 477)
+        video_link=qry.post_content(xml.database, post_guid, 477)
         
         prefix='videos/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"video",post_attr)
+        xml.write_open_tag("video",post_attr)
         
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.datestr(time),'')
-        wrt.write_tag(xml,4,"link",'',strf.hrefstr(video_link))
-        wrt.write_tag(xml,4,"descricao",strf.cdata(post_desc),'')
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("link",'',strf.hrefstr(video_link))
+        xml.write_tag("descricao",strf.cdata(post_desc),'')
         
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"video")
+        xml.write_close_tag("video")
         
-    wrt.write_close_tag(xml,2,"videos")
+    xml.write_close_tag("videos")
     
     user_videos.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#
-def write_userevents_subsection (db, xml, user_guid):
-    user_events = db.cursor()
+def write_userevents_subsection (xml, user_guid):
+    user_events = xml.database.cursor()
     
     # 6 = select * from elgg_entity_subtypes where subtype='calendar_event';
     user_events.execute(qry.qry_user_posts, (user_guid, user_guid, 6,))
     
     
-    wrt.write_open_tag(xml,2,"eventos",'')
+    xml.write_open_tag("eventos",'')
     
     for (post_guid, post_title, post_desc, time)\
         in user_events:
             
         # 18 = select * from elgg_metastrings where string='venue';
-        venue=qry.post_content(db, post_guid, 18)
+        venue=qry.post_content(xml.database, post_guid, 18)
         
         # 20 = select * from elgg_metastrings where string='start_date';
-        time_start=qry.post_content(db, post_guid, 20)
+        time_start=qry.post_content(xml.database, post_guid, 20)
 
         # 22 = select * from elgg_metastrings where string='end_date';
-        time_end=qry.post_content(db, post_guid, 22)
+        time_end=qry.post_content(xml.database, post_guid, 22)
         
         # 26 = select * from elgg_metastrings where string='fees';
-        fees=qry.post_content(db, post_guid, 26)
+        fees=qry.post_content(xml.database, post_guid, 26)
         
         # 28 = select * from elgg_metastrings where string='contact';
-        contact=qry.post_content(db, post_guid, 28)
+        contact=qry.post_content(xml.database, post_guid, 28)
         
         # 30 = select * from elgg_metastrings where string='organizer';
-        organizer=qry.post_content(db, post_guid, 30)
+        organizer=qry.post_content(xml.database, post_guid, 30)
         
         prefix='event_calendar/view/'
         post_attr=strf.pidstr(strf.urlparticipa(prefix,str(post_guid)))
-        wrt.write_open_tag(xml,3,"evento",post_attr)
+        xml.write_open_tag("evento",post_attr)
         
-        wrt.write_tag(xml,4,"titulo",post_title,'')
-        wrt.write_tag(xml,4,"data",strf.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",strf.datestr(time_start),'')
-        wrt.write_tag(xml,4,"data_fim",strf.datestr(time_end),'')
-        wrt.write_tag(xml,4,"taxa_participacao",fees,'')
-        wrt.write_tag(xml,4,"descricao",strf.cdata(post_desc),'')
+        xml.write_tag("titulo",post_title,'')
+        xml.write_tag("data",strf.datestr(time),'')
+        xml.write_tag("organizador",organizer,'')
+        xml.write_tag("contato",contact,'')
+        xml.write_tag("endereco",venue,'')
+        xml.write_tag("data_inicio",strf.datestr(time_start),'')
+        xml.write_tag("data_fim",strf.datestr(time_end),'')
+        xml.write_tag("taxa_participacao",fees,'')
+        xml.write_tag("descricao",strf.cdata(post_desc),'')
         
-        wrt.write_comments(db,xml,post_guid)
+        xml.write_comments(post_guid)
         
-        wrt.write_close_tag(xml,3,"evento")
+        xml.write_close_tag("evento")
     
-    wrt.write_close_tag(xml,2,"eventos")
+    xml.write_close_tag("eventos")
     
     user_events.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#    
-def write_users_section (db, xml, \
+def write_users_section (xml, \
     guid, name, username):
 
     prefix='profile/'
     user_attr=strf.uidstr(strf.urlparticipa(prefix,username))
-    wrt.write_open_tag(xml,1,"usuario",user_attr)
+    xml.write_open_tag("usuario",user_attr)
     
     # Write all user's information
-    wrt.write_tag(xml,2,"nome",name,'')
+    xml.write_tag("nome",name,'')
         
     # Write a list of user friend's names
-    write_userfriends_subsection(db, xml, guid)
+    write_userfriends_subsection(xml, guid)
     
     # Write a list of all groups that the user owns or belongs
-    write_usergroups_subsection(db, xml, guid)
+    write_usergroups_subsection(xml, guid)
     
     # Write a list, and all the info, of all posts made by the user
-    write_userfiles_subsection(db, xml, guid)
-    write_userblogs_subsection(db, xml, guid)
-    write_userbookmarks_subsection(db, xml, guid)
-    write_userpages_subsection(db, xml, guid)
-    write_uservideos_subsection(db, xml, guid)
-    write_userevents_subsection(db, xml, guid)
-    
-    wrt.write_close_tag(xml,1,"usuario")
+    write_userfiles_subsection(xml, guid)
+    write_userblogs_subsection(xml, guid)
+    write_userbookmarks_subsection(xml, guid)
+    write_userpages_subsection(xml, guid)
+    write_uservideos_subsection(xml, guid)
+    write_userevents_subsection(xml, guid)
+    
+    xml.write_close_tag("usuario")
 #--------------------------------------------------------------------#    
 
 #--------------------------------------------------------------------#    
@@ -338,21 +339,23 @@ def write_singlefile_users_section (db, dir_results):
     users_info.execute(qry.qry_users_info)
     
     xml_filename=dir_results+strf.date_today()+"_usuarios"+".xml"
-    xml = wrt.open_xml_file(xml_filename)
+    xml = OpendataXML(db,dir_results,xml_filename)
+
+    xml.open_file()
 
-    wrt.write_open_tag(xml,0,"usuarios",'')
+    xml.write_open_tag("usuarios",'')
     
     for (guid, name, username)\
         in users_info:
             
-        write_users_section(db,xml,\
+        write_users_section(xml,\
             guid,name,username)        
     
-    wrt.write_close_tag(xml,0,"usuarios")
+    xml.write_close_tag("usuarios")
     
-    users_info.close()
+    xml.close_file()
     
-    xml.close()
+    users_info.close()
 #--------------------------------------------------------------------#
 
 #--------------------------------------------------------------------#    
@@ -365,12 +368,14 @@ def write_multifile_users_section (db, dir_results):
         in users_info:
         
         xml_filename=dir_results+'/users/'+str(guid)+'.xml'
-        xml = wrt.open_xml_file(xml_filename)
+        xml = OpendataXML(db,dir_results,xml_filename)
+        
+        xml.open_file()
     
-        write_users_section(db,xml,\
+        write_users_section(xml,\
             guid,name,username)        
         
-        xml.close()
+        xml.close_file()
     
     users_info.close()
 #--------------------------------------------------------------------#