diff --git a/MeetingAgendasNotes.wiki b/MeetingAgendasNotes.wiki
index 50966e1..f0fe7ee 100644
--- a/MeetingAgendasNotes.wiki
+++ b/MeetingAgendasNotes.wiki
@@ -13,6 +13,68 @@
 
 <wiki:toc max_depth="2" />
 
+== 12 Jul 2010 Team Conference Call == 
+
+* Chaired by:* Sverre Rabbelier <br/>
+* Notes taken by:* Leo (Chong Liu)<br/>
+
+
+=== Meeting notes 12 Jul 2010 ===
+  * Felix couldn't participate due to issues with his internet connection.
+  * Update on testing project:
+    * Leo solved the problem that coverage does not track the properties definition of Melange models by  using pymox stubout to stub out nose.plugins.cover.Coverage.begin so that it loads Melange before the testing coverage starts.
+    * The test coverage of Melange is now over 50%.
+    * He further worked on various views, e.g. sponsor, program, student, organization, etc.
+    * He will do more view and logic tests and aim to increase the overall code coverage to over 60%.
+  * Update on document editor project:
+    *  Pavel has implemented all functions of revisions, e.g.  "Revert to revision", and uploaded them to his appspot instance.
+    * He managed to make button work with the help of Mario.
+    * He plans to deploy python html diff engine, create view that show diffs for revisions and make code clean-up this week.
+    *  Daniel will send Pavel some feedback later.
+  * Update on social features:
+    * Savitha worked on getting the workflow for the Calendars features and uploaded the latest to my appspot, e.g. Progadmin activates Calendars, Orgadmins get notifications, Orgadmins accept, all users can now view all calendars and events, users can add events by selecting which Calendar they want add to (non-owners such as students and mentors will have to wait for approval).
+    * She will work on user authentication (plain text password and user name are currently used) and the synchronizing of calendar events between Melange and Google Calendar.
+    * She considers GData APIs but needs to figure out a way to get Auth token from the user API with Madhu.
+    * She and Madhu are going to go through the workflow, code and integration.
+  * *Important notes:*
+    * Daniel suggested to take meeting notes on Google Wave and Sverre suggested to still put one copy on the wiki. Leo will have a try.
+    * Felix needs to complete a blog post.
+
+== 5 Jul 2010 Team Conference Call == 
+
+* Chaired by:* Sverre Rabbelier <br/>
+* Notes taken by:* Leo (Chong Liu)<br/>
+
+
+=== Meeting notes 5 Jul 2010 ===
+  * Blog posts: All students have posted their blogs in this week.
+  * Update on data seeder:
+    * The seeder is able to seed models without any references and the data providers work correctly.
+    * Error/progress reporting has been implemented on the backend but not on the web interface frontend.
+    * Mario and Felix think about integrating a client-side HTML templating engine in JavaScript to Melange in order to build HTML on the fly on the client side.
+    * Three options are being considered, i.e. pure, jQuery tempest plugin and DOJO DTL. Mario feels that the third option may be too much messing on the current architecture.
+    * Mario and Felix will further talk about the three options after the meeting, possibly on the list.
+  * Update on testing project:
+    * Leo found that Python coverage does not track the properties definition of models. So, doing model tests adds little testing coverage.
+    * He also found there are not a lot to do logic tests because most methods of other logical are inherited from base logic.
+    * He will focus on doing view tests now, especially on those with low coverage.
+    * He has not done a lot last week due to breakdown of his hard drive and he'll try to do more this week.
+  * Update on document editor project:
+    *  Pavel implemented views that show revision with given revision number and lists all the revisions for the given entity and uploaded them to his GAE instance, which looks good.
+    * He met two problems. The first one is to track different key/value pairs for the params dict. He solved it by using a debugger. The second one is to create configuration JSON for buttons and actions with  list framework. With the help of Daniel, Sverre and Mario and reading the JQGrid documentation, he has started to understand the lists and could even create some buttons and associate behaviour.
+    *  He will do his best to finish views in a couple of days to start implementing diffs before the midterm evaluation.
+  * Update on social features:
+    * Savitha started working on the Calendars/Events feature: she has created the event data model/logic/views (e.g. list events), and uploaded to her GAE instance http://melange-social.appspot.com/site/show/site.
+    * Two types of events are created, one is the local event_entity stored in Melange and the other is the one sent to Google Calendar. They are not synchronized until now and Savitha is working on it.
+    * The UI of the calendars is being discussed on the mailing list and not decided yet. Google Calendar UI is currently used.
+    * User Page has been mostly done. The new CSS designs will be uploaded by this wednesday.
+    * There are no restrictions for different user roles at present, e.g. everyone could create their User Pages and the go on to add events to the Calendar. Savitha is working on it and will get it done hopefully by this weekend.
+    * Savitha decided to get the Key for the JS API maps following Mario's advice.
+  * *Important notes:*
+    * Pavel and Felix found the params mechanism a bit hard to understand, especially combined with other things such as patterns and checking access etc. Felix thinks more documentation is needed. Sverre encourages students to add their findings to the params wiki page http://code.google.com/p/soc/wiki/SocParams .
+    * Sverre suggests Pavel and Mario together with him to create a wiki page for the list framework.
+    * Mario suggests Pavel to add link of JQGrid documentation that it's not yet linked, if any, inside the text of the ListsProtocol wiki page.
+
 == 28 Jun 2010 Team Conference Call == 
 
 * Chaired by:* Sverre Rabbelier <br/>
diff --git a/SocialFeaturesMelangeGSoC2010.wiki b/SocialFeaturesMelangeGSoC2010.wiki
index e67fc2d..17123bc 100644
--- a/SocialFeaturesMelangeGSoC2010.wiki
+++ b/SocialFeaturesMelangeGSoC2010.wiki
@@ -266,6 +266,123 @@
 
 http://www.comp.nus.edu.sg/~savitha/gsoc/calendars_usecase2.png
 
+== Latest Workflow (as of Week 7) ==
+
+=== User Pages ===
+
+  # User Pages features are only accessible for those who have been assigned a role.
+  # The workflow changes slightly based on the different roles Users will have.
+  # User Page entities are Program scoped.
+
+*Student Role* :
+  # Users can Register as a Student
+  # Upon successful registration, they will see a red highlighted "Create User Page" link on the sidebar.
+  # They can click on this to activate the User Pages feature and fill in the User Page forms.
+  # Once they create their User Page entity, it will be listed in the "List User Pages" link and all other users will be able to view their page if they have set their User Pages as "Visible".
+  # Each User may edit their User Page visibility and other information appearing on their User Page at anytime by selecting "Edit User Page".
+
+*Mentor* :
+  # Users can apply to become a mentor for an accepted organization.
+  # The respective org_admin then accepts the user as a mentor.
+  # The user is then notified of his acceptance as a mentor and made to fill out the mentor registration form.
+  # Upon successful registration as mentor, the red highlighted "Create User Page" link will appear.
+  # The steps from this point on are same as the Student Role.
+
+*Org Admin and Program Admin*:
+  # Upon accepting invitation to be org/program admin, they will be fill in the form to register.
+  # Upon successful registration, they will see the red highlighted "Create User Page" link appear on the sidebar.
+  # The steps from this point on are same as the Student Role.
+
+===Calendars===
+
+*Calendar Feature Activation*
+
+  # Once the timeline passes the "Accepted Organization Announced" deadline, the program_admin will see a red highlighted "Activate Calendars for Orgs" link on their sidebar.
+  # Cliking on this will trigger the creation of one calendar for all accepted organizations.
+  # Simultaneously, notifications will be sent to all org_admins about the new feature.
+  # Org_Admins can choose to accept their calendar, upon which time, their user email will be added with 'owner' rights to their organization's Google calendar.
+ 
+*Calendars Feature*
+
+  # Once the Calendar feature is officially "activated" by the program_admin, all users will see "Events", "List Events" and "Add Event" links on their sidebar.
+  # "Events" link will show them the calendars. They may select to view different calendars using a drop down box.
+  # "List Events" will give a list view of events with the respective event tags.
+  # "Add Event" will take them to a form, where users choose the calendar they want to add their event to and the fill in the other event details.
+
+*Event Creation by Owners*:
+
+  # If the user posting the event has 'owner' rights(org_admin or program_admin) to the calendar they are posting to, the event entity will be created on Melange as well as on the actual Google Calendar immidiately.
+                                  
+*Event Creation by Non-Owners*:
+
+  # If the user posting the even does not have 'owner' access to the calendar, the even entity will still be created on Melange with status "Unconfirmed" and will not posted to the Google Calendar. Instead, a notification with the event details will be sent to the 'owner' of the Calendar.
+  # Upon recieving the notification, the owner may choose to accept the event, whereby the event will be posted to the Google Calendar, and the status of the correpoding event entity set to "Confirmed".
+
+
+= Code Work Flow & Documentation =
+
+== User Pages ==
+
+*Main Files*:
+
+*Code*:
+    * User Page View - soc/modules/social/views/models/user_page.py
+    * User Page Model - soc/modules/social/models/user_page.py
+    * User Page Logic - soc/modules/social/logic/models/user_page.py
+
+*Other Files*
+    * edit.html  - soc/templates/modules/social/edit.html
+    * view_page.html - soc/templates/modules/social/view_page.html
+    * userpage.css - soc/content/modules/social/css/userpage.css
+
+*User Page View*:
+    * *__init__* function: 
+          # Access params are set for 'create','edit' and 'list' access for User Pages.
+          # new_params[] is used to set: *(i)* module and url names, *(ii)* templates for create, edit, view_page and list, *(iii)* create,edit and exclude dynaproperties, *(iv)* set public fields to be shown in User Page lists.
+          # Setting url patterns for 'create','edit','list' and 'viewpage'.
+    * *viewpage* function:
+          # sets the template to be used for View Page
+          # calls Logic method to get context, containing User Page entity details.
+    * *_editPost_* function:
+          # used to set User Page properties before User Page entity is created
+          # properties such as *(i)* User reference, *(ii)* link_id, *(iii)* last_modified, *(iv)* role_entity of user, *(v)* calls Logic functions to get Student Projects associated with the role of the User, *(vi)* sets tags associated with user, *(vii)* image property(yet to be fixed) *(viii)* call Logic functions to get additional Work and Education entities added from the POST dictionary.
+    * *_editGet_* function:
+          # sets 'link_id' and 'tags' as a string before going to edit page.
+    * *_edit_* function:
+          # if request method is 'GET', call logic function to get all Work and Education entities associated with User Page to load to edit form.
+          # if request method is 'POST', call logic function to create the additional Work and Education entities added to edit form.
+    * *getExtraMenus* function:
+          # creates Extra menu item called 'User (Community)'
+          # if user if not logged in, shows a 'Sign In' link
+          # if user if logged in, call redirect functions to get links for 'create', 'edit', 'view', and 'list' user pages based on respective access checks.
+    * *list* function:
+          # Filter and list user pages whose status is set to 'Visible'.
+
+*User Page Logic*
+    * *getRoleEntity* function: gets the role entity associated with current user.
+    * *getProjects* function: get student projects associated with current user.
+          # student projects in which current user is participating as student.
+          # student projects in which current user is particiapting as mentor.
+          # if current user is org_admin, all student projects associated with the org.
+    * *getEducation* function:
+          # gets all additional education-related field values from POST dict and updateOrCreates the Education entities.
+    * *getWork* function:
+          # gets all additional work-related field values from POST dict and updateOrCreates the Job entities.
+    * *getUserPageContext* function:
+          # gets the User Page entity, and the addtional education and job entities associated with the user.
+
+*User Page Model*
+    * Contains all the properties of the user page data model.
+
+*edit.html*
+    * *Javascript* functions:
+          # *afterLoad()* function: This function is called upon the loading of the page. It gets the additional education and job entities in the context and calls *getWork()* and *getEducation()* functions to create the additional fields in the form for these entities.
+          # *getWork()* function: for each work entity in the context dictionary, this creates the additional form fields and fills it in with the already existing work entities, if any.
+          # *getEducation()* function: for each education entity in the context dictionary, creates the additional education form feilds and fills it with respective values.
+          # *$('#moreEducation').click* function: Creates a new set of empty education form fields for user to fill. 
+          # *$('#moreWork').click* function: Creates a new set of empty Work form fields for the user to fill.
+    
+
 = Timeline =
   The tentative project timeline will be added here.
 
