diff --git a/globe/index.php b/globe/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..9bb18aadc1007af68e4b554622b1daad43212f53
--- /dev/null
+++ b/globe/index.php
@@ -0,0 +1,31 @@
+<?php
+	/**
+	 * Elgg globe plugin
+	 * 
+	 * @package ElggGlobe
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Eric Rasmussen
+	 * @copyright UNL 2009
+	 * @link http://planetred.unl.edu/
+	 */
+
+	require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+	
+	$limit = get_input("limit", 10);
+	$offset = get_input("offset", 0);
+	
+	$title = sprintf(elgg_echo("groups:owned"),page_owner_entity()->name);
+
+	// Get objects
+	$area2 = elgg_view_title($title);
+	
+	set_context('search');
+	$objects = list_entities("group", "", page_owner(), $limit, false);
+	set_context('groups');
+	
+	$area2 .= $objects;
+	$body = elgg_view_layout('two_column_left_sidebar',$area1, $area2);
+	
+	// Finally draw the page
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/globe/start.php b/globe/start.php
new file mode 100644
index 0000000000000000000000000000000000000000..c746ab3c44e04e581d72b123d99e694853ac25ea
--- /dev/null
+++ b/globe/start.php
@@ -0,0 +1,565 @@
+<?php
+	/**
+	 * Elgg globe plugin
+	 * 
+	 * @package ElggGlobe
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Eric Rasmussen
+	 * @copyright UNL 2009
+	 * @link http://planetred.unl.edu/
+	 */
+
+	/**
+	 * Initialise the groups plugin.
+	 * Register actions, set up menus
+	 */
+	function groups_init()
+	{
+    	
+    	global $CONFIG;
+		
+		// Set up the menu for logged in users
+		if (isloggedin()) 
+		{
+			add_menu(elgg_echo('groups'), $CONFIG->wwwroot . "pg/groups/world/");
+			//add_menu(elgg_echo('groups:alldiscussion'),$CONFIG->wwwroot."mod/groups/discussions.php");
+		}
+		else
+		{
+			add_menu(elgg_echo('groups'), $CONFIG->wwwroot . "pg/groups/world/");
+		}
+		
+		// Register a page handler, so we can have nice URLs
+		register_page_handler('groups','groups_page_handler');
+		
+		// Register a URL handler for groups and forum topics
+		register_entity_url_handler('groups_url','group','all');
+		register_entity_url_handler('groups_groupforumtopic_url','object','groupforumtopic');
+		
+		// Register an icon handler for groups
+		register_page_handler('groupicon','groups_icon_handler');
+		
+		// Register some actions
+		register_action("groups/edit",false, $CONFIG->pluginspath . "groups/actions/edit.php");
+		register_action("groups/delete",false, $CONFIG->pluginspath . "groups/actions/delete.php");
+		register_action("groups/join",false, $CONFIG->pluginspath . "groups/actions/join.php");
+		register_action("groups/leave",false, $CONFIG->pluginspath . "groups/actions/leave.php");
+		register_action("groups/joinrequest",false, $CONFIG->pluginspath . "groups/actions/joinrequest.php");
+		register_action("groups/killrequest",false,$CONFIG->pluginspath . "groups/actions/groupskillrequest.php");
+		register_action("groups/addtogroup",false, $CONFIG->pluginspath . "groups/actions/addtogroup.php");
+		register_action("groups/invite",false, $CONFIG->pluginspath . "groups/actions/invite.php");
+		
+		// Use group widgets
+		use_widgets('groups');
+		
+		// Add a page owner handler
+		add_page_owner_handler('groups_page_owner_handler');
+		
+		// Add some widgets
+		add_widget_type('a_users_groups',elgg_echo('groups:widget:membership'), elgg_echo('groups:widgets:description'));
+		
+		
+		//extend some views
+		extend_view('profile/icon','groups/icon');
+		extend_view('css','groups/css');
+		
+		// Access permissions
+		register_plugin_hook('access:collections:write', 'all', 'groups_write_acl_plugin_hook');
+		//register_plugin_hook('access:collections:read', 'all', 'groups_read_acl_plugin_hook');
+		
+		// Notification hooks
+		if (is_callable('register_notification_object'))
+			register_notification_object('object', 'groupforumtopic', elgg_echo('groupforumtopic:new'));
+		register_plugin_hook('object:notifications','object','group_object_notifications_intercept');
+		
+		// Listen to notification events and supply a more useful message
+		register_plugin_hook('notify:entity:message', 'object', 'groupforumtopic_notify_message');
+		
+		// add the forum tool option
+		add_group_tool_option('forum',elgg_echo('groups:enableforum'),true);
+		
+		// Now override icons
+		register_plugin_hook('entity:icon:url', 'group', 'groups_groupicon_hook');
+	}
+	
+	/**
+	 * Event handler for group forum posts
+	 *
+	 */
+	function group_object_notifications($event, $object_type, $object) {
+		
+		static $flag;
+		if (!isset($flag)) $flag = 0;
+		
+		if (is_callable('object_notifications'))
+		if ($object instanceof ElggObject) {
+			if ($object->getSubtype() == 'groupforumtopic') {
+				//if ($object->countAnnotations('group_topic_post') > 0) {
+				if ($flag == 0) {
+					$flag = 1;
+					object_notifications($event, $object_type, $object);
+				}
+				//}
+			}
+		}
+		
+	}
+	
+	/**
+	 * Intercepts the notification on group topic creation and prevents a notification from going out
+	 * (because one will be sent on the annotation)
+	 *
+	 * @param unknown_type $hook
+	 * @param unknown_type $entity_type
+	 * @param unknown_type $returnvalue
+	 * @param unknown_type $params
+	 * @return unknown
+	 */
+		function group_object_notifications_intercept($hook, $entity_type, $returnvalue, $params) {
+			if (isset($params)) {
+				if ($params['event'] == 'create' && $params['object'] instanceof ElggObject) {
+					if ($params['object']->getSubtype() == 'groupforumtopic') {
+						return true;
+					}
+				}
+			}
+			return null;
+		}
+	
+		/**
+		 * Returns a more meaningful message
+		 *
+		 * @param unknown_type $hook
+		 * @param unknown_type $entity_type
+		 * @param unknown_type $returnvalue
+		 * @param unknown_type $params
+		 */
+		function groupforumtopic_notify_message($hook, $entity_type, $returnvalue, $params)
+		{
+			$entity = $params['entity'];
+			$to_entity = $params['to_entity'];
+			$method = $params['method'];
+			if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'groupforumtopic'))
+			{
+
+				$descr = $entity->description;
+				$title = $entity->title;
+				global $CONFIG;
+				$url = $entity->getURL();
+
+				$msg = get_input('topicmessage');
+				if (empty($msg)) $msg = get_input('topic_post');
+				if (!empty($msg)) $msg = $msg . "\n\n"; else $msg = '';
+				
+				$owner = get_entity($entity->container_guid);
+				if ($method == 'sms') {
+					return elgg_echo("groupforumtopic:new") . ': ' . $url . " ({$owner->name}: {$title})";
+				} else {
+					return $_SESSION['user']->username . ' ' . elgg_echo("groups:viagroups") . ': ' . $title . "\n\n" . $msg . "\n\n" . $entity->getURL();
+				}
+
+			}
+			return null;
+		}
+	
+	/**
+	 * This function loads a set of default fields into the profile, then triggers a hook letting other plugins to edit
+	 * add and delete fields.
+	 *
+	 * Note: This is a secondary system:init call and is run at a super low priority to guarantee that it is called after all
+	 * other plugins have initialised.
+	 */
+	function groups_fields_setup()
+	{
+		global $CONFIG;
+		
+		$profile_defaults = array(
+		
+			'name' => 'text',
+			'description' => 'longtext',
+			'briefdescription' => 'text',
+			'interests' => 'tags',
+			'website' => 'url',
+							   
+		);
+		
+		$CONFIG->group = trigger_plugin_hook('profile:fields', 'group', NULL, $profile_defaults);
+	}
+	
+	/**
+	 * Sets up submenus for the groups system.  Triggered on pagesetup.
+	 *
+	 */
+	function groups_submenus() {
+		
+		global $CONFIG;
+		
+		// Get the page owner entity
+			$page_owner = page_owner_entity();
+		
+		// Submenu items for all group pages
+			if ($page_owner instanceof ElggGroup && get_context() == 'groups') {
+				if (isloggedin()) {
+					if ($page_owner->canEdit()) {
+						add_submenu_item(elgg_echo('groups:edit'),$CONFIG->wwwroot . "mod/groups/edit.php?group_guid=" . $page_owner->getGUID(), '1groupsactions');
+						add_submenu_item(elgg_echo('groups:invite'),$CONFIG->wwwroot . "mod/groups/invite.php?group_guid={$page_owner->getGUID()}", '1groupsactions');
+						if (!$page_owner->isPublicMembership())
+							add_submenu_item(elgg_echo('groups:membershiprequests'),$CONFIG->wwwroot . "mod/groups/membershipreq.php?group_guid={$page_owner->getGUID()}", '1groupsactions');
+					}
+					if ($page_owner->isMember($_SESSION['user'])) {
+						if ($page_owner->getOwner() != $_SESSION['guid'])
+							add_submenu_item(elgg_echo('groups:leave'), $CONFIG->wwwroot . "action/groups/leave?group_guid=" . $page_owner->getGUID(), '1groupsactions');
+					} else {
+						if ($page_owner->isPublicMembership())
+						{
+							add_submenu_item(elgg_echo('groups:join'),$CONFIG->wwwroot . "action/groups/join?group_guid={$page_owner->getGUID()}", '1groupsactions');		
+						}
+						else
+						{
+							add_submenu_item(elgg_echo('groups:joinrequest'),$CONFIG->wwwroot . "action/groups/joinrequest?group_guid={$page_owner->getGUID()}", '1groupsactions');		
+						}
+					}
+				}
+				
+				if($page_owner->forum_enable != "no"){ 
+				    add_submenu_item(elgg_echo('groups:forum'),$CONFIG->wwwroot . "pg/groups/forum/{$page_owner->getGUID()}/", '1groupslinks');
+			    }
+					
+			}
+		
+		// Add submenu options
+			if (get_context() == 'groups' && !($page_owner instanceof ElggGroup)) {
+				if (isloggedin()) {
+					add_submenu_item(elgg_echo('groups:new'), $CONFIG->wwwroot."pg/groups/new/", '1groupslinks');
+					add_submenu_item(elgg_echo('groups:owned'), $CONFIG->wwwroot . "pg/groups/owned/" . $_SESSION['user']->username, '1groupslinks');
+					add_submenu_item(elgg_echo('groups:yours'), $CONFIG->wwwroot . "pg/groups/member/" . $_SESSION['user']->username, '1groupslinks');
+				}
+				add_submenu_item(elgg_echo('groups:all'), $CONFIG->wwwroot . "pg/groups/world/", '1groupslinks');
+			}
+		
+	}
+	
+	/**
+	 * Set a page owner handler.
+	 *
+	 */
+	function groups_page_owner_handler()
+	{
+		$group_guid = get_input('group_guid');
+		if ($group_guid)
+		{
+			$group = get_entity($group_guid);
+			if ($group instanceof ElggGroup)
+				return $group->owner_guid;
+		}
+		
+		return false;
+	}
+	
+	/**
+	 * Group page handler
+	 *
+	 * @param array $page Array of page elements, forwarded by the page handling mechanism
+	 */
+	function groups_page_handler($page) 
+	{
+		global $CONFIG;
+		
+		
+		if (isset($page[0]))
+		{
+			// See what context we're using
+			switch($page[0])
+			{
+				case "new" :
+					include($CONFIG->pluginspath . "groups/new.php");
+          		break;
+    			case "world":  
+					set_context('groups');
+					set_page_owner(0);
+   					include($CONFIG->pluginspath . "groups/all.php");
+          		break;
+          		case "forum":
+          		    set_input('group_guid', $page[1]);
+   					include($CONFIG->pluginspath . "groups/forum.php");	
+          		break;
+    			case "owned" :
+    				// Owned by a user
+    				if (isset($page[1]))
+    					set_input('username',$page[1]);
+    					
+    				include($CONFIG->pluginspath . "groups/index.php");	
+    			break;
+    			case "member" :
+    				// User is a member of
+    				if (isset($page[1]))
+    					set_input('username',$page[1]);
+    					
+    				include($CONFIG->pluginspath . "groups/membership.php");	
+    			break;    				
+    			default:
+    				set_input('group_guid', $page[0]);
+    				include($CONFIG->pluginspath . "groups/groupprofile.php");
+    			break;
+			}
+		}
+		
+	}
+	
+	/**
+	 * Handle group icons.
+	 *
+	 * @param unknown_type $page
+	 */
+	function groups_icon_handler($page) {
+			
+		global $CONFIG;
+		
+		// The username should be the file we're getting
+		if (isset($page[0])) {
+			set_input('group_guid',$page[0]);
+		}
+		if (isset($page[1])) {
+			set_input('size',$page[1]);
+		}
+		// Include the standard profile index
+		include($CONFIG->pluginspath . "groups/graphics/icon.php");
+		
+	}
+	
+	/**
+	 * Populates the ->getUrl() method for group objects
+	 *
+	 * @param ElggEntity $entity File entity
+	 * @return string File URL
+	 */
+	function groups_url($entity) {
+		
+		global $CONFIG;
+		
+		$title = friendly_title($entity->name);
+		
+		return $CONFIG->url . "pg/groups/{$entity->guid}/$title/";
+		
+	}
+	
+	function groups_groupforumtopic_url($entity) {
+		
+		global $CONFIG;
+		return $CONFIG->url . 'mod/groups/topicposts.php?topic='. $entity->guid .'&group_guid=' . $entity->container_guid;
+		
+	}
+	
+	/**
+	 * Groups created, so add users to access lists.
+	 */
+	function groups_create_event_listener($event, $object_type, $object)
+	{
+		//if (($event == 'create') && ($object_type == 'group') && ($object instanceof ElggGroup))
+		//{
+			$group_id = create_access_collection(elgg_echo('groups:group') . ": " . $object->name);
+			if ($group_id)
+			{
+				 $object->group_acl = $group_id;
+			}
+			else
+				return false;
+		//}
+		
+		return true;
+	}
+	
+	/**
+	 * Hook to listen to read access control requests and return all the groups you are a member of.
+	 */
+	function groups_read_acl_plugin_hook($hook, $entity_type, $returnvalue, $params)
+	{
+		//error_log("READ: " . var_export($returnvalue));
+		$user = $_SESSION['user'];
+		if ($user)
+		{
+			// Not using this because of recursion.
+			// Joining a group automatically add user to ACL, 
+			// So just see if they're a member of the ACL.
+			//$membership = get_users_membership($user->guid);
+			
+			$members = get_members_of_access_collection($group->group_acl);
+			print_r($members);
+			exit;
+			
+			if ($membership)
+			{					
+				foreach ($membership as $group)
+					$returnvalue[$user->guid][$group->group_acl] = elgg_echo('groups:group') . ": " . $group->name; 
+				return $returnvalue;
+			}
+		}
+	}
+	
+	/**
+	 * Return the write access for the current group if the user has write access to it.
+	 */
+	function groups_write_acl_plugin_hook($hook, $entity_type, $returnvalue, $params)
+	{
+		$page_owner = page_owner_entity();
+		// get all groups if logged in
+		if ($loggedin = get_loggedin_user()) {
+			$groups = get_entities_from_relationship('member', $loggedin->getGUID());
+			if (is_array($groups)) {
+				foreach ($groups as $group) {
+					$returnvalue[$group->group_acl] = elgg_echo('groups:group') . ': ' . $group->name;
+				}
+			}
+		}
+		
+		// This doesn't seem to do anything.
+		// There are no hooks to override container permissions for groups
+//		
+//		if ($page_owner instanceof ElggGroup)
+//		{
+//			if (can_write_to_container())
+//			{
+//				$returnvalue[$page_owner->group_acl] = elgg_echo('groups:group') . ": " . $page_owner->name;
+//			}
+//		}
+		return $returnvalue;
+	}
+	
+	/**
+	 * Groups deleted, so remove access lists.
+	 */
+	function groups_delete_event_listener($event, $object_type, $object)
+	{
+		delete_access_collection($object->group_acl);
+		
+		return true;
+	}
+	
+	/**
+	 * Listens to a group join event and adds a user to the group's access control
+	 *
+	 */
+	function groups_user_join_event_listener($event, $object_type, $object) {
+		
+		$group = $object['group'];
+		$user = $object['user'];
+		$acl = $group->group_acl;
+
+		add_user_to_access_collection($user->guid, $acl);
+		
+		return true;
+		
+	}
+	
+	/**
+	 * Listens to a group leave event and removes a user from the group's access control
+	 *
+	 */
+	function groups_user_leave_event_listener($event, $object_type, $object) {
+		
+		$group = $object['group'];
+		$user = $object['user'];
+		$acl = $group->group_acl;
+
+		remove_user_from_access_collection($user->guid, $acl);
+		
+		return true;
+		
+	}
+
+	/**
+	 * This hooks into the getIcon API and provides nice user icons for users where possible.
+	 *
+	 * @param unknown_type $hook
+	 * @param unknown_type $entity_type
+	 * @param unknown_type $returnvalue
+	 * @param unknown_type $params
+	 * @return unknown
+	 */
+	function groups_groupicon_hook($hook, $entity_type, $returnvalue, $params)
+	{
+		global $CONFIG;
+		
+		if ((!$returnvalue) && ($hook == 'entity:icon:url') && ($params['entity'] instanceof ElggGroup))
+		{
+			$entity = $params['entity'];
+			$type = $entity->type;
+			$viewtype = $params['viewtype'];
+			$size = $params['size'];
+			
+			if ($icontime = $entity->icontime) {
+				$icontime = "{$icontime}";
+			} else {
+				$icontime = "default";
+			}
+			
+			$filehandler = new ElggFile();
+			$filehandler->owner_guid = $entity->owner_guid;
+			$filehandler->setFilename("groups/" . $entity->guid . $size . ".jpg");
+			
+			if ($filehandler->exists()) {
+				$url = $CONFIG->url . "pg/groupicon/{$entity->guid}/$size/$icontime.jpg";
+			
+				return $url;
+			}
+		}
+	}
+	
+	/**
+	 * A simple function to see who can edit a group discussion post
+	 * @param the comment $entity
+	 * @param user who owns the group $group_owner
+	 * @return boolean
+	 */
+	function groups_can_edit_discussion($entity, $group_owner)
+	{
+		
+		//logged in user
+		$user = $_SESSION['user']->guid;
+		
+		if (($entity->owner_guid == $user) || $group_owner == $user || isadminloggedin()) {
+        	return true;
+    	}else{
+			return false;
+		}
+		
+	}
+	
+	/**
+	 * Overrides topic post getURL() value.
+	 *
+	 */
+	function group_topicpost_url($annotation) {
+		if ($parent = get_entity($annotation->entity_guid)) {
+			global $CONFIG;
+			return $CONFIG->wwwroot . 'mod/groups/topicposts.php?topic='.$parent->guid.'&amp;group_guid='.$parent->container_guid.'#' . $annotation->id;
+		}
+	}
+	
+	register_extender_url_handler('group_topicpost_url','annotation', 'group_topic_post');
+	
+	// Register a handler for create groups
+	register_elgg_event_handler('create', 'group', 'groups_create_event_listener');
+
+	// Register a handler for delete groups
+	register_elgg_event_handler('delete', 'group', 'groups_delete_event_listener');
+	
+	// Make sure the groups initialisation function is called on initialisation
+	register_elgg_event_handler('init','system','groups_init');
+	register_elgg_event_handler('init','system','groups_fields_setup', 10000); // Ensure this runs after other plugins
+	register_elgg_event_handler('join','group','groups_user_join_event_listener');
+	register_elgg_event_handler('leave','group','groups_user_leave_event_listener');
+	register_elgg_event_handler('pagesetup','system','groups_submenus');
+	register_elgg_event_handler('annotate','all','group_object_notifications');
+	
+	// Register actions
+    global $CONFIG;
+	register_action("groups/addtopic",false,$CONFIG->pluginspath . "groups/actions/forums/addtopic.php");
+	register_action("groups/deletetopic",false,$CONFIG->pluginspath . "groups/actions/forums/deletetopic.php");
+	register_action("groups/addpost",false,$CONFIG->pluginspath . "groups/actions/forums/addpost.php");
+	register_action("groups/edittopic",false,$CONFIG->pluginspath . "groups/actions/forums/edittopic.php");
+	register_action("groups/deletepost",false,$CONFIG->pluginspath . "groups/actions/forums/deletepost.php");
+	register_action("groups/featured",false,$CONFIG->pluginspath . "groups/actions/featured.php");
+	register_action("groups/editpost",false,$CONFIG->pluginspath . "groups/actions/forums/editpost.php");
+	
+?>