diff --git a/plugins/messages/actions/delete.php b/plugins/messages/actions/delete.php
new file mode 100644
index 0000000000000000000000000000000000000000..243b8d017773cb82071aca8371eb173ee2b34e46
--- /dev/null
+++ b/plugins/messages/actions/delete.php
@@ -0,0 +1,73 @@
+<?php
+
+    /**
+	 * Elgg delete a message action page
+	 * It is worth noting that due to the nature of a messaging system and the fact 2 people access
+	 * the same message, messages don't actually delete, they are just removed from view for the user who deletes
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+	 
+	// Need to be logged in to do this
+	    gatekeeper();
+ 
+    // grab details sent from the form
+        $message_id_array = get_input('message_id');
+        if (!array($message_id_array)) $message_id_array = array($message_id_array);
+        $type = get_input('type'); // sent message or inbox
+        $success = true;
+        $submit = get_input('submit');
+        $offset = get_input('offset');
+        
+        foreach($message_id_array as $message_id) {
+        
+	    // get the message object
+	        $message = get_entity($message_id);
+	        
+	    // Make sure we actually have permission to edit and that the object is of sub-type messages
+			if ($message->getSubtype() == "messages") {
+	    		
+				if ($submit == elgg_echo('delete')) {
+					if ($message->delete()) {
+					} else {
+						$success = false;
+					}
+				} else {
+					if ($message->readYet = 1) {
+					} else {
+						$success = false;
+					}
+				}
+	            
+	        }else{
+	            
+	            // display the error message
+	            $success = false;
+				
+			}
+		
+        }
+        
+        if ($success) {
+        	if ($submit == elgg_echo('delete')) {
+        		system_message(elgg_echo("messages:deleted"));
+        	} else {
+        		system_message(elgg_echo("messages:markedread"));
+        	}
+			// check to see if it is a sent message to be deleted
+		    if($type == 'sent'){
+			    forward("mod/messages/sent.php?offset={$offset}");
+		    }else{
+    		    forward("mod/messages/?username=" . $_SESSION['user']->username . "&offset={$offset}");
+		    }
+        } else {
+        	register_error(elgg_echo("messages:nopermission"));
+        	forward("mod/messages/?offset={$offset}&username=" . $_SESSION['user']->username);
+        }
+                 
+    
+?>
\ No newline at end of file
diff --git a/plugins/messages/actions/send.php b/plugins/messages/actions/send.php
new file mode 100644
index 0000000000000000000000000000000000000000..7958213496026e5d53657d80d3628805c6849b26
--- /dev/null
+++ b/plugins/messages/actions/send.php
@@ -0,0 +1,53 @@
+<?php
+
+    /**
+	 * Elgg send a message action page
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+	 
+	 // Make sure we're logged in (send us to the front page if not)
+		if (!isloggedin()) forward();
+     
+    // Get input data
+		$title = get_input('title'); // message title
+        $message_contents = get_input('message'); // the message
+        $send_to = get_input('send_to'); // this is the user guid to whom the message is going to be sent
+        $reply = get_input('reply',0); // this is the guid of the message replying to
+        
+        $user = get_user($send_to);
+        if (!$user) {
+        	register_error(elgg_echo("messages:user:nonexist"));
+        	forward();
+        }
+        
+    // Make sure the message field, send to field and title are not blank
+		if (empty($message_contents) || empty($send_to) || empty($title)) {
+			register_error(elgg_echo("messages:blank"));
+			forward("mod/messages/send.php");
+			
+	// Otherwise, 'send' the message 
+		} else {
+    		
+			$result = messages_send($title,$message_contents,$send_to,0,$reply);
+			
+	    // Save 'send' the message
+			if (!$result) {
+				register_error(elgg_echo("messages:error"));
+				forward("mod/messages/send.php");
+			} 
+			
+        // Success message
+			system_message(elgg_echo("messages:posted"));
+	
+        // Forward to the users sentbox
+			forward('pg/messages/' . $_SESSION['user']->username);	
+    
+        } // end of message check if statement
+     
+    
+?>
\ No newline at end of file
diff --git a/plugins/messages/graphics/icon_notifications_site.gif b/plugins/messages/graphics/icon_notifications_site.gif
new file mode 100644
index 0000000000000000000000000000000000000000..ca243a116816a4b9dd6cc948812c6c752f2a1327
Binary files /dev/null and b/plugins/messages/graphics/icon_notifications_site.gif differ
diff --git a/plugins/messages/index.php b/plugins/messages/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..03ed75b838aecc8be056c30d43f9e67ab0734099
--- /dev/null
+++ b/plugins/messages/index.php
@@ -0,0 +1,47 @@
+<?php
+
+    /**
+	 * Elgg messages inbox page
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+	 
+	 // Load Elgg engine
+		require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+		
+	// You need to be logged in!
+		gatekeeper();
+		
+	// Get offset
+		$offset = get_input('offset',0);
+	
+	// Set limit
+		$limit = 10;
+		
+	// Get the logged in user, you can't see other peoples messages so use session id
+		$page_owner = $_SESSION['user'];
+		set_page_owner($page_owner->getGUID());
+		
+    // Get the user's inbox, this will be all messages where the 'toId' field matches their guid 
+		$messages = get_entities_from_metadata("toId", $page_owner->getGUID(), "object", "messages", $page_owner->guid, $limit + 1, $offset);
+
+	// Set the page title
+	    $area2 = elgg_view_title(elgg_echo("messages:inbox"));
+	    
+	// Display them. The last variable 'page_view' is to allow the view page to know where this data is coming from,
+	// in this case it is the inbox, this is necessary to ensure the correct display
+	    // $area2 .= elgg_view("messages/view",array('entity' => $messages, 'page_view' => "inbox", 'limit' => $limit, 'offset' => $offset));
+	    $area2 .= elgg_view("messages/forms/view",array('entity' => $messages, 'page_view' => "inbox", 'limit' => $limit, 'offset' => $offset));
+		
+	// format
+	    $body = elgg_view_layout("two_column_left_sidebar", '', $area2);
+
+	
+	// Draw page
+		page_draw(sprintf(elgg_echo('messages:user'),$page_owner->name),$body);
+	 
+?>
\ No newline at end of file
diff --git a/plugins/messages/languages/en.php b/plugins/messages/languages/en.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d3e2972bbc30a565b63509b908867be58e6362f
--- /dev/null
+++ b/plugins/messages/languages/en.php
@@ -0,0 +1,86 @@
+<?php
+
+	$english = array(
+	
+		/**
+		 * Menu items and titles
+		 */
+	
+			'messages' => "Messages",
+            'messages:back' => "back to messages",
+			'messages:user' => "Your inbox",
+			'messages:sentMessages' => "Sent messages",
+			'messages:posttitle' => "%s's messages: %s",
+			'messages:inbox' => "Inbox",
+			'messages:send' => "Send a message",
+			'messages:sent' => "Sent messages",
+			'messages:message' => "Message",
+			'messages:title' => "Title",
+			'messages:to' => "To",
+            'messages:from' => "From",
+			'messages:fly' => "Let it fly",
+			'messages:replying' => "Message replying to",
+			'messages:inbox' => "Inbox",
+			'messages:sendmessage' => "Send a message",
+			'messages:compose' => "Send a message",
+			'messages:sentmessages' => "Sent messages",
+			'messages:recent' => "Recent messages",
+            'messages:original' => "Original message",
+            'messages:yours' => "Your message",
+            'messages:answer' => "Reply",
+			'messages:toggle' => 'Toggle all',
+			'messages:markread' => 'Mark read',
+			
+			'messages:new' => 'New message',
+	
+			'notification:method:site' => 'Site',
+	
+			'messages:error' => 'There was a problem saving your message. Please try again.',
+	
+			'item:object:messages' => 'Messages',
+	
+		/**
+		 * Status messages
+		 */
+	
+			'messages:posted' => "Your message was successfully sent.",
+			'messages:deleted' => "Your messages were successfully deleted.",
+			'messages:markedread' => "Your messages were successfully marked as read.",
+	
+		/**
+		 * Email messages
+		 */
+	
+			'messages:email:subject' => 'You have a new message!',
+			'messages:email:body' => "You have a new message from %s. It reads:
+
+			
+%s
+
+
+To view your messages, click here:
+
+	%s
+
+To send %s a message, click here:
+
+	%s
+
+You cannot reply to this email.",
+	
+		/**
+		 * Error messages
+		 */
+	
+			'messages:blank' => "Sorry; you need to actually put something in the message body before we can save it.",
+			'messages:notfound' => "Sorry; we could not find the specified message.",
+			'messages:notdeleted' => "Sorry; we could not delete this message.",
+			'messages:nopermission' => "You do not have permission to alter that message.",
+			'messages:nomessages' => "There are no messages to display.",
+			'messages:user:nonexist' => "We could not find the recipient in the user database.",
+	
+	);
+					
+	add_translation("en",$english);
+
+?>
\ No newline at end of file
diff --git a/plugins/messages/manifest.xml b/plugins/messages/manifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37cc7307495b996e843d973c90c4c40893680450
--- /dev/null
+++ b/plugins/messages/manifest.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest>
+        <field key="author" value="Curverider" />
+        <field key="version" value="1.5" />
+        <field key="description" value="Elgg internal messages plugin. This plugin lets user send each other messages." />
+        <field key="website" value="http://www.elgg.org/" />
+        <field key="copyright" value="(C) Curverider 2008-2009" />
+        <field key="licence" value="GNU Public License version 2" />
+        <field key="elgg_version" value="2009030702" />
+</plugin_manifest>
diff --git a/plugins/messages/read.php b/plugins/messages/read.php
new file mode 100644
index 0000000000000000000000000000000000000000..6dca2f6f548e9bf8108b8139239e799f9d2ee4cd
--- /dev/null
+++ b/plugins/messages/read.php
@@ -0,0 +1,52 @@
+<?php
+
+	/**
+	 * Elgg read a message page
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+
+	// Load Elgg engine
+		require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+		
+	// If we're not logged in, forward to the front page
+		gatekeeper();
+		
+	// Get the full message object to read
+	    $message = get_entity(get_input("message"));
+	    
+	// If the message is being read from the inbox, mark it as read, otherwise don't.
+	// This stops a user who checks out a message they have sent having it being marked 
+	// as read for the recipient
+	    if(get_input('type') != "sent"){
+    	    
+            // Mark the message as being read now
+	        if ($message->getSubtype() == "messages") {
+    	    
+    	        //set the message metadata to 1 which equals read
+    	        $message->readYet = 1;
+    	    
+	        }
+	        
+        }
+        
+    // Get the logged in user
+		$page_owner = $_SESSION['user'];
+		set_page_owner($page_owner->getGUID());
+	    
+    // Display it
+	    $area2 = elgg_view("messages/messages",array(
+											'entity' => $message,
+											'entity_owner' => $page_owner,
+											'full' => true
+											));
+	    $body = elgg_view_layout("two_column_left_sidebar", '', $area2);
+
+	// Display page
+		page_draw(sprintf(elgg_echo('messages:message')),$body);
+		
+?>
\ No newline at end of file
diff --git a/plugins/messages/readme.txt b/plugins/messages/readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d058786dfe9755867a4db0714d31d802db90279a
--- /dev/null
+++ b/plugins/messages/readme.txt
@@ -0,0 +1,24 @@
+/**
+	 * Elgg readme
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Dave Tosh <dave@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+*/
+
+Install: drop the plugin into your mod folder, that is it.
+
+Notes:
+
+Each message has a series of metadata which is used to control how the message displays.
+
+The metadata toggles are:
+
+hiddenFrom - used to 'delete' from the sentbox
+hiddenTo - used to 'delete' from the inbox
+readYet - 0 means no, 1 means yes it has been read
+
+This is actually a tricky little plugin as there is only ever one instance of a message, how it is viewed 
+depends on who is looked at and in what context.
\ No newline at end of file
diff --git a/plugins/messages/send.php b/plugins/messages/send.php
new file mode 100644
index 0000000000000000000000000000000000000000..70dcdaaf47503fb5cb0fe37be3fcc0863ec8c9de
--- /dev/null
+++ b/plugins/messages/send.php
@@ -0,0 +1,41 @@
+<?php
+
+	/**
+	 * Elgg send a message page
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+
+	// Load Elgg engine
+		require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+		
+	// If we're not logged in, forward to the front page
+		gatekeeper(); // if (!isloggedin()) forward();
+		
+    // Get the current page's owner
+		$page_owner = page_owner_entity();
+		if ($page_owner === false || is_null($page_owner)) {
+			$page_owner = $_SESSION['user'];
+			set_page_owner($page_owner->getGUID());
+		} 
+		
+    // Get the users friends; this is used in the drop down to select who to send the message to
+         $friends = $_SESSION['user']->getFriends('', 9999);
+        
+    // Set the page title
+	    $area2 = elgg_view_title(elgg_echo("messages:sendmessage"));
+        
+    // Get the send form
+		$area2 .= elgg_view("messages/forms/message",array('friends' => $friends));
+
+	// Format
+		$body = elgg_view_layout("two_column_left_sidebar", '', $area2);
+		
+	// Draw page
+		page_draw(sprintf(elgg_echo('messages:send'),$page_owner->name),$body);
+		
+?>
\ No newline at end of file
diff --git a/plugins/messages/sent.php b/plugins/messages/sent.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc27b5465a72544e5bacba9f68f633b2fbc40221
--- /dev/null
+++ b/plugins/messages/sent.php
@@ -0,0 +1,46 @@
+<?php
+
+	/**
+	 * Elgg sent messages page
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+
+	// Load Elgg engine
+		require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+		
+	// If we're not logged in, forward to the front page
+		if (!isloggedin()) forward(); 
+		
+	// Get the logged in user
+		$page_owner = $_SESSION['user'];
+		set_page_owner($page_owner->guid);
+		
+	// Get offset
+		$offset = get_input('offset',0);
+	
+	// Set limit
+		$limit = 10;
+		
+    // Display all the messages a user owns, these will make up the sentbox
+		$messages = get_entities_from_metadata('fromId',$_SESSION['user']->guid,'object','messages', $page_owner->guid, $limit, $offset); 
+		//$page_owner->getObjects('messages');
+		
+    // Set the page title
+	    $area2 = elgg_view_title(elgg_echo("messages:sentmessages"));
+		
+	// Set content
+		// $area2 .= elgg_view("messages/view",array('entity' => $messages, 'page_view' => "sent", 'limit' => $limit, 'offset' => $offset));
+		$area2 .= elgg_view("messages/forms/view",array('entity' => $messages, 'page_view' => "sent", 'limit' => $limit, 'offset' => $offset));
+
+	// Format
+		$body = elgg_view_layout("two_column_left_sidebar", '', $area2);
+		
+	// Draw page
+		page_draw(sprintf(elgg_echo('messages:sentMessages'),$page_owner->name),$body);
+		
+?>
\ No newline at end of file
diff --git a/plugins/messages/start.php b/plugins/messages/start.php
new file mode 100644
index 0000000000000000000000000000000000000000..37c2851974209f8428b9ecf86f6fa89fbe4b741d
--- /dev/null
+++ b/plugins/messages/start.php
@@ -0,0 +1,338 @@
+<?php
+
+	/**
+	 * Elgg internal messages plugin
+	 * This plugin lets user send each other messages.
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+
+	/**
+	 * Messages initialisation
+	 *
+	 * These parameters are required for the event API, but we won't use them:
+	 * 
+	 * @param unknown_type $event
+	 * @param unknown_type $object_type
+	 * @param unknown_type $object
+	 */
+	 
+	    function messages_init() {
+    	    
+    	    // Load system configuration
+				global $CONFIG;
+				
+			//add submenu options
+				if (get_context() == "messages") {
+					add_submenu_item(elgg_echo('messages:inbox'), $CONFIG->wwwroot . "pg/messages/" . $_SESSION['user']->username);
+					add_submenu_item(elgg_echo('messages:compose'), $CONFIG->wwwroot . "mod/messages/send.php");
+					add_submenu_item(elgg_echo('messages:sentmessages'), $CONFIG->wwwroot . "mod/messages/sent.php");
+				}
+				
+			// Extend system CSS with our own styles, which are defined in the shouts/css view
+				extend_view('css','messages/css');
+				
+			// Extend the elgg topbar
+				extend_view('elgg_topbar/extend','messages/topbar');
+			
+			// Register a page handler, so we can have nice URLs
+				register_page_handler('messages','messages_page_handler');
+				
+			// Register a URL handler for shouts posts
+				register_entity_url_handler('messages_url','object','messages');
+				
+	        // Extend hover-over and profile menu	
+				extend_view('profile/menu/links','messages/menu');
+				
+			// Register a notification handler for site messages
+				register_notification_handler("site", "messages_site_notify_handler");
+				register_plugin_hook('notify:entity:message','object','messages_notification_msg');
+				if (is_callable('register_notification_object'))
+					register_notification_object('object','messages',elgg_echo('messages:new'));
+				
+		    // Shares widget
+			  //  add_widget_type('messages',elgg_echo("messages:recent"),elgg_echo("messages:widget:description"));
+			    
+			// Override metadata permissions
+			    register_plugin_hook('permissions_check:metadata','object','messages_can_edit_metadata');
+		}
+		
+		/**
+		 * Override the canEditMetadata function to return true for messages
+		 *
+		 */
+		function messages_can_edit_metadata($hook_name, $entity_type, $return_value, $parameters) {
+
+			global $messagesendflag;
+			
+			if ($messagesendflag == 1) {
+				$entity = $parameters['entity'];
+				if ($entity->getSubtype() == "messages") {
+					return true;
+				}
+			}
+			
+			return $return_value;
+			
+		}
+		
+		/**
+		 * Override the canEdit function to return true for messages within a particular context.
+		 *
+		 */
+		function messages_can_edit($hook_name, $entity_type, $return_value, $parameters) {
+			
+			global $messagesendflag;
+			
+			if ($messagesendflag == 1) {
+				$entity = $parameters['entity'];
+				if ($entity->getSubtype() == "messages") {
+					return true;
+				}
+			}
+			
+			return $return_value;
+			
+		}
+		
+		/**
+		 * We really don't want to send a notification message when a message is sent, if the method is messages ...
+		 *
+		 */
+		function messages_notification_msg($hook_name, $entity_type, $return_value, $parameters) {
+
+			global $CONFIG, $messages_pm;
+			
+			if ($parameters['entity'] instanceof ElggEntity) {
+				
+				if ($parameters['entity']->getSubtype() == 'messages') {
+					
+					return false;
+					/*if (!$messages_pm) return false;
+					if ($parameters['method'] == 'email') {
+						return sprintf(
+									elgg_echo('messages:email:body'),
+									get_loggedin_user()->name,
+									strip_tags($parameters['entity']->description),
+									$CONFIG->wwwroot . "pg/messages/" . $user->username,
+									get_loggedin_user()->name,
+									$CONFIG->wwwroot . "mod/messages/send.php?send_to=" . get_loggedin_user()->guid
+								);
+					} else if ($parameters['method'] == 'site') return false;*/
+				}
+			}
+			return null;
+			
+		}
+		
+		/**
+		 * Override the canEdit function to return true for messages within a particular context.
+		 *
+		 */
+		function messages_can_edit_container($hook_name, $entity_type, $return_value, $parameters) {
+			
+			global $messagesendflag;
+			
+			if ($messagesendflag == 1) {
+				return true;
+			}
+			
+			return $return_value;
+			
+		}
+		
+		/**
+		 * Send an internal message
+		 *
+		 * @param string $subject The subject line of the message
+		 * @param string $body The body of the mesage
+		 * @param int $send_to The GUID of the user to send to
+		 * @param int $from Optionally, the GUID of the user to send from
+		 * @param int $reply The GUID of the message to reply from (default: none)
+		 * @param true|false $notify Send a notification (default: true)
+		 * @param true|false $add_to_sent If true (default), will add a message to the sender's 'sent' tray
+		 * @return true|false Depending on success
+		 */
+		function messages_send($subject, $body, $send_to, $from = 0, $reply = 0, $notify = true, $add_to_sent = true) {
+			
+				global $messagesendflag;
+				$messagesendflag = 1;
+				
+				global $messages_pm;
+				if ($notify) {
+					$messages_pm = 1;
+				} else {
+					$messages_pm = 0;
+				}
+				
+			// If $from == 0, set to current user
+					if ($from == 0)
+						$from = (int) get_loggedin_user()->guid;
+						
+		    // Initialise a new ElggObject
+					$message_to = new ElggObject();
+					$message_sent = new ElggObject();
+			// Tell the system it's a message
+					$message_to->subtype = "messages";
+					$message_sent->subtype = "messages";
+			// Set its owner to the current user
+					// $message_to->owner_guid = $_SESSION['user']->getGUID();
+					$message_to->owner_guid = $send_to;
+					$message_to->container_guid = $send_to;
+					$message_sent->owner_guid = $from;
+					$message_sent->container_guid = $from;
+			// For now, set its access to public (we'll add an access dropdown shortly)
+					$message_to->access_id = ACCESS_PUBLIC;
+					$message_sent->access_id = ACCESS_PUBLIC;
+			// Set its description appropriately
+					$message_to->title = $subject;
+					$message_to->description = $body;
+					$message_sent->title = $subject;
+					$message_sent->description = $body;
+		    // set the metadata
+		            $message_to->toId = $send_to; // the user receiving the message
+		            $message_to->fromId = $from; // the user receiving the message
+		            $message_to->readYet = 0; // this is a toggle between 0 / 1 (1 = read)
+		            $message_to->hiddenFrom = 0; // this is used when a user deletes a message in their sentbox, it is a flag
+		            $message_to->hiddenTo = 0; // this is used when a user deletes a message in their inbox
+		            $message_sent->toId = $send_to; // the user receiving the message
+		            $message_sent->fromId = $from; // the user receiving the message
+		            $message_sent->readYet = 0; // this is a toggle between 0 / 1 (1 = read)
+		            $message_sent->hiddenFrom = 0; // this is used when a user deletes a message in their sentbox, it is a flag
+		            $message_sent->hiddenTo = 0; // this is used when a user deletes a message in their inbox
+		            
+		            $message_to->msg = 1;
+		            $message_sent->msg = 1;
+		            
+			    // Save the copy of the message that goes to the recipient
+					$success = $message_to->save();
+					
+				// Save the copy of the message that goes to the sender
+					if ($add_to_sent) $success2 = $message_sent->save();
+					
+					$message_to->access_id = ACCESS_PRIVATE;
+					$message_to->save();
+					
+					if ($add_to_sent) {
+						$message_sent->access_id = ACCESS_PRIVATE;
+						$message_sent->save();
+					}
+					
+			    // if the new message is a reply then create a relationship link between the new message
+			    // and the message it is in reply to
+			        if($reply && $success){
+		    	        $create_relationship = add_entity_relationship($message_sent->guid, "reply", $reply);		    	        
+			        }
+			        
+			        
+			        global $CONFIG;
+					$message_contents = strip_tags($body);
+					if ($send_to != get_loggedin_user() && $notify)
+					notify_user($send_to, get_loggedin_user()->guid, elgg_echo('messages:email:subject'), 
+						sprintf(
+									elgg_echo('messages:email:body'),
+									get_loggedin_user()->name,
+									$message_contents,
+									$CONFIG->wwwroot . "pg/messages/" . $user->username,
+									get_loggedin_user()->name,
+									$CONFIG->wwwroot . "mod/messages/send.php?send_to=" . get_loggedin_user()->guid
+								)
+					);
+					
+			    	$messagesendflag = 0;    
+			        return $success;
+			
+		}
+		
+		/**
+		 * messages page handler; allows the use of fancy URLs
+		 *
+		 * @param array $page From the page_handler function
+		 * @return true|false Depending on success
+		 */
+		function messages_page_handler($page) {
+			
+			// The first component of a messages URL is the username
+			if (isset($page[0])) {
+				set_input('username',$page[0]);
+			}
+			
+			// The second part dictates what we're doing
+			if (isset($page[1])) {
+				switch($page[1]) {
+					case "read":		set_input('message',$page[2]);
+										@include(dirname(__FILE__) . "/read.php");
+										return true;
+										break;
+				}
+			// If the URL is just 'messages/username', or just 'messages/', load the standard messages index
+			} else {
+				@include(dirname(__FILE__) . "/index.php");
+				return true;
+			}
+			
+			return false;
+			
+		}
+
+		function messages_url($message) {
+			
+			global $CONFIG;
+			return $CONFIG->url . "pg/messages/" . $message->getOwnerEntity()->username . "/read/" . $message->getGUID();
+			
+		}
+		
+    // A simple function to count the number of messages that are unread in a user's inbox
+        function count_unread_messages() {
+            
+            //get the users inbox messages
+		    //$num_messages = get_entities_from_metadata("toId", $_SESSION['user']->getGUID(), "object", "messages", 0, 10, 0, "", 0, false);
+		    $num_messages = get_entities_from_metadata_multi(array(
+		    							'toId' => $_SESSION['user']->guid,
+		    							'readYet' => 0,
+		    							'msg' => 1
+		    									   ),"object", "messages", $_SESSION['user']->guid, 9999, 0, "", 0, false);
+		
+			if (is_array($num_messages))
+				$counter = sizeof($num_messages);
+			else
+				$counter = 0;
+				
+		    return $counter;
+            
+        }
+        
+        function messages_site_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message, array $params = NULL)
+		{
+			global $CONFIG;
+			
+			if (!$from)
+				throw new NotificationException(sprintf(elgg_echo('NotificationException:MissingParameter'), 'from'));
+				 
+			if (!$to)
+				throw new NotificationException(sprintf(elgg_echo('NotificationException:MissingParameter'), 'to'));
+				
+			global $messages_pm;
+			if (!$messages_pm)
+				return messages_send($subject,$message,$to->guid,$from->guid,0,false,false);
+			else return true;
+			
+		}
+	
+		
+	// Make sure the messages initialisation function is called on initialisation
+		register_elgg_event_handler('init','system','messages_init');
+		
+		register_plugin_hook('permissions_check','object','messages_can_edit');
+		register_plugin_hook('container_permissions_check','object','messages_can_edit_container');
+		
+	// Register actions
+		global $CONFIG;
+		register_action("messages/send",false,$CONFIG->pluginspath . "messages/actions/send.php");
+		register_action("messages/delete",false,$CONFIG->pluginspath . "messages/actions/delete.php");
+	 
+?>
\ No newline at end of file
diff --git a/plugins/messages/views/default/messages/css.php b/plugins/messages/views/default/messages/css.php
new file mode 100644
index 0000000000000000000000000000000000000000..1888c87f6d8c1fa8a8a297faf70dcf72117d93c7
--- /dev/null
+++ b/plugins/messages/views/default/messages/css.php
@@ -0,0 +1,234 @@
+<?php
+
+	/**
+	 * Elgg Messages CSS extender
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+
+?>
+
+/*-------------------------------
+MESSAGING PLUGIN
+-------------------------------*/
+#messages {
+	margin:0 10px 0 10px;
+}
+.actiontitle {
+	font-weight: bold;
+	font-size: 110%;
+	margin: 0 0 10px 0;
+}
+#messages .pagination {
+	margin:5px 0 5px 0;
+}
+#messages input[type="checkbox"] {
+	margin:0;
+	padding:0;
+	border:none;
+}
+.messages_buttonbank {
+	-webkit-border-radius: 8px; 
+	-moz-border-radius: 8px;
+	background:white;
+	margin:5px 10px;
+	padding:5px;
+	text-align: right;
+}
+.messages_buttonbank input {
+	margin:0 0 0 10px;
+}
+.messages_buttonbank input[type="button"] {
+	font: 12px/100% Arial, Helvetica, sans-serif;
+	font-weight: bold;
+	color: #4690D6;
+	background:#dddddd;
+	border: 1px solid #999999;
+	-webkit-border-radius: 4px; 
+	-moz-border-radius: 4px;
+	width: auto;
+	height: 25px;
+	padding: 2px 6px 2px 6px;
+	margin:0 0 0 10px;
+	cursor: pointer;
+}
+.messages_buttonbank input[type="button"]:hover {
+	background: #0054a7;
+	border: 1px solid #0054a7;
+	color:white;
+}
+
+#messages td {
+	text-align: left;
+	vertical-align:middle;
+	padding: 5px;
+}
+#messages .message_sent {
+	-webkit-border-radius: 5px; 
+	-moz-border-radius: 5px;
+	margin-bottom: 5px;
+	background: white;
+	border:1px solid #cccccc; 	
+}
+#messages .message_notread {
+	-webkit-border-radius: 5px; 
+	-moz-border-radius: 5px;
+	margin-bottom: 5px;
+	background: #F7DAD8;
+	border:1px solid #ff6c7c; 
+}
+#messages .message_read {
+	-webkit-border-radius: 5px; 
+	-moz-border-radius: 5px;
+	margin-bottom: 5px;
+	background: white;
+	border:1px solid #cccccc; 
+}
+#messages .message_notread td {
+
+}
+#messages .message_read td {
+
+}
+
+#messages .delete_msg a {
+	display:block;
+	cursor: pointer;
+	width:14px;
+	height:14px;
+	margin:0;
+	background: url("<?php echo $vars['url']; ?>_graphics/icon_customise_remove.png") no-repeat right 0;
+	text-indent: -9000px;
+	float:right;
+}
+#messages .delete_msg a:hover {
+	background-position: right -16px;
+}
+/* IE6 */
+* html #messages .delete_msg a { background-position: right 4px; }
+* html #messages .delete_msg a:hover { background-position: right 4px; } 
+
+#messages .usericon,
+#messages .groupicon {
+	float: left;
+	margin: 0 15px 0 0;
+}
+
+#messages .msgsender {
+	color:#666666;
+	line-height: 1em;
+	margin:0;
+	padding:0;
+	float:left;
+}
+#messages .msgsender small {
+	color:#AAAAAA;
+}
+
+
+#messages .msgsubject {
+	font-size: 120%;
+	line-height: 100%;
+}
+
+.msgsubject {
+	font-weight:bold;
+}
+
+.messages_single_icon  {
+	float: left;
+	width:110px;
+}
+
+.messages_single_icon .usericon,
+.messages_single_icon .groupicon {
+	float: left;
+	margin: 0 10px 10px 0;
+}
+
+/* view and reply to message view */
+.message_body {
+	margin-left: 120px;
+}
+.message_body .messagebody {
+	padding:0;
+	margin:10px 0 10px 0;
+	font-size: 120%;
+	border-bottom:1px solid #cccccc;
+}
+
+/* drop down message reply form */
+#message_reply_form { display:none; }
+
+.new_messages_count {
+	color:#666666;
+}
+/* tinyMCE container */
+#message_reply_editor #message_tbl {
+	width:680px !important;
+}
+/* IE6 */
+* html #message_reply_editor #message_tbl { width:676px !important;}
+
+#messages_return {
+	margin:4px 0 4px 10px;
+}
+#messages_return p {
+	margin:0;
+}
+.messages_single {
+	background: white;
+	-webkit-border-radius: 8px; 
+	-moz-border-radius: 8px;
+	margin:0 10px 10px 10px;
+	padding:10px;	
+}
+/* when displaying original msg in reply view */
+.previous_message {
+    background:#dedede;
+	-webkit-border-radius: 5px; 
+	-moz-border-radius: 5px;
+    padding:10px;
+    margin:0 0 20px 0;
+}
+.previous_message p {
+    padding:0;
+    margin:0 0 5px 0;
+    font-size: 100%;
+}
+
+
+
+
+#notificationstable td.sitetogglefield {
+	width:50px;
+	text-align: center;
+	vertical-align: middle;
+}
+#notificationstable td.sitetogglefield input {
+	margin-right:36px;
+	margin-top:5px;
+}
+#notificationstable td.sitetogglefield a {
+	width:46px;
+	height:24px;
+	cursor: pointer;
+	display: block;
+	outline: none;
+}
+#notificationstable td.sitetogglefield a.sitetoggleOff {
+	background: url(<?php echo $vars['url']; ?>mod/messages/graphics/icon_notifications_site.gif) no-repeat right 2px;
+}
+#notificationstable td.sitetogglefield a.sitetoggleOn {
+	background: url(<?php echo $vars['url']; ?>mod/messages/graphics/icon_notifications_site.gif) no-repeat right -36px;
+}
+
+
+
+
+
+
diff --git a/plugins/messages/views/default/messages/forms/message.php b/plugins/messages/views/default/messages/forms/message.php
new file mode 100644
index 0000000000000000000000000000000000000000..d32cff0be6fee596b620f6ad4fc1cdd8d73f9353
--- /dev/null
+++ b/plugins/messages/views/default/messages/forms/message.php
@@ -0,0 +1,80 @@
+<?php
+
+    /**
+	 * Elgg send a message page
+	 *
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 *
+	 * @uses $vars['friends'] This is an array of a user's friends and is used to populate the list of
+	 * people the user can message
+	 *
+	 */
+	 
+	 //grab the user id to send a message to. This will only happen if a user clicks on the 'send a message'
+	 //link on a user's profile or hover-over menu
+	 $send_to = get_input('send_to');
+	 
+?>
+	<div class="contentWrapper">
+	<form action="<?php echo $vars['url']; ?>action/messages/send" method="post" name="messageForm">
+			
+	    <?php
+			    
+	        //check to see if the message recipient has already been selected
+			if($send_to){
+    			
+    			//get the user object  
+    	        $user = get_user($send_to);
+    	        
+    	        //draw it
+    			echo "<label>" . elgg_echo("messages:to") . ":</label><div class=\"messages_single_icon\">" . elgg_view("profile/icon",array('entity' => $user, 'size' => 'tiny')) . $user->username;
+    			echo "</div><br class=\"clearfloat\" />";
+    			//set the hidden input field to the recipients guid
+    	        echo "<input type=\"hidden\" name=\"send_to\" value=\"{$send_to}\" />";
+    	        
+    			    
+	        }else{
+    	            
+        ?>
+    	   		
+            <p><label><?php echo elgg_echo("messages:to"); ?>: </label>
+    	    <select name='send_to'>
+    	    <?php 
+    			//make the first option blank
+    	    	echo "<option value=''></option>";
+    	        foreach($vars['friends'] as $friend){
+        			   
+        	        //populate the send to box with a user's friends
+    			    echo "<option value='{$friend->guid}'>" . $friend->name . "</option>";
+    			        
+    		    }
+    		        
+            ?>
+    		</select></p>
+    		    
+        <?php
+    		
+	        }//end send_to if statement
+		        
+	    ?>
+	    
+		<p><label><?php echo elgg_echo("messages:title"); ?>: <br /><input type='text' name='title' value='' class="input-text" /></label></p>
+		<p class="longtext_editarea"><label><?php echo elgg_echo("messages:message"); ?>: <br />
+		<?php
+
+				    echo elgg_view("input/longtext", array(
+									"internalname" => "message",
+									"value" => '',
+													));
+			
+		?>
+		</label></p>
+		<p><input type="submit" class="submit_button" value="<?php echo elgg_echo("messages:fly"); ?>!" /></p>
+	
+	</form>
+	</div>
\ No newline at end of file
diff --git a/plugins/messages/views/default/messages/forms/reply.php b/plugins/messages/views/default/messages/forms/reply.php
new file mode 100644
index 0000000000000000000000000000000000000000..26a8bd0779ab6cdeedff1bc8c438c6dbe10c98ed
--- /dev/null
+++ b/plugins/messages/views/default/messages/forms/reply.php
@@ -0,0 +1,46 @@
+<?php
+
+    /**
+	 * Elgg reply to a message form
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 *
+	 * @uses $vars['entity'] This is the message being replied to
+	 *
+	 */
+	 
+?>
+
+<form action="<?php echo $vars['url']; ?>action/messages/send" method="post" name="messageForm">
+
+    <!-- populate the title space with the orginal message title, inserting re: before it -->						        
+	<p><label><?php echo elgg_echo("messages:title"); ?>: <br /><input type='text' name='title' class="input-text" value='RE:<?php echo $vars['entity']->title; ?>' /></label></p>
+	<p><label><?php echo elgg_echo("messages:message"); ?>: <br /><textarea name='message' value='' class="input-textarea" /></textarea></label></p>
+		
+	<p>
+	    <?php
+                
+	        //pass across the guid of the message being replied to
+    	    echo "<input type='hidden' name='reply' value='" . $vars['entity']->getGUID() . "' />";
+    	    //pass along the owner of the message being replied to
+    	    echo "<input type='hidden' name='send_to' value='BAAA" . $vars['entity']->fromId . "' />";
+	
+	    ?>
+	    <input type="submit" class="submit_button" value="<?php echo elgg_echo("messages:fly"); ?>!" />
+	</p>
+	
+</form>
+	
+	<?php
+        //display the message you are replying to
+		if (isset($vars['entity'])) {
+    		
+    		echo "<h3>" . elgg_echo("messages:replying") . "</h3>";
+    		echo $vars['entity']->description;
+    		
+		}
+    ?>
\ No newline at end of file
diff --git a/plugins/messages/views/default/messages/forms/view.php b/plugins/messages/views/default/messages/forms/view.php
new file mode 100644
index 0000000000000000000000000000000000000000..57483ed3a4b03a833515f883aff8e9170f86af48
--- /dev/null
+++ b/plugins/messages/views/default/messages/forms/view.php
@@ -0,0 +1,15 @@
+<?php
+
+	$body = elgg_view("messages/view",$vars);
+	
+	$body .= '<div class="messages_buttonbank">';
+	$body .= '<input type="hidden" name="type" value="'.$vars['page_view'].'" />';
+	$body .= '<input type="hidden" name="offset" value="'.$vars['offset'].'" />';
+	$body .= '<input type="submit" name="submit" value="'.elgg_echo('delete').'" /> ';
+	$body .= '<input type="submit" name="submit" value="'.elgg_echo('messages:markread').'" /> ';
+	$body .= '<input type="button" onclick="javascript:$(\'input[@type=checkbox]\').click();" value="'.elgg_echo('messages:toggle').'" />';
+	$body .= '</div>';
+	
+	echo elgg_view('input/form',array('body' => $body, 'action' => $vars['url'] . 'action/messages/delete', 'method' => 'post'));
+
+?>
\ No newline at end of file
diff --git a/plugins/messages/views/default/messages/menu.php b/plugins/messages/views/default/messages/menu.php
new file mode 100644
index 0000000000000000000000000000000000000000..45af2e6c43acd81a20affd9e8b6a0b2087d2ce4c
--- /dev/null
+++ b/plugins/messages/views/default/messages/menu.php
@@ -0,0 +1,26 @@
+<?php
+
+	/**
+	 * Elgg hoverover extender for messages
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+	 
+	 //need to be logged in to send a message
+	 if (isloggedin()) {
+
+?>
+
+	<p class="user_menu_messages">
+		<a href="<?php echo $vars['url']; ?>mod/messages/send.php?send_to=<?php echo $vars['entity']->guid; ?>"><?php echo elgg_echo("messages:sendmessage"); ?></a>	
+	</p>
+	
+<?php
+
+	}
+
+?>
\ No newline at end of file
diff --git a/plugins/messages/views/default/messages/messages.php b/plugins/messages/views/default/messages/messages.php
new file mode 100644
index 0000000000000000000000000000000000000000..21846535677549a5da046c97a986c1b1d6bd3a8c
--- /dev/null
+++ b/plugins/messages/views/default/messages/messages.php
@@ -0,0 +1,162 @@
+<?php
+
+	/**
+	 * Elgg messages individual view
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 *
+	 * 
+	 * @uses $vars['entity'] Optionally, the message to view
+	 * @uses get_input('type') If the user accesses the message from their sentbox, this variable is passed
+	 * and used to make sure the correct icon and name is displayed
+	 */
+	 
+    // set some variables to use below
+	if(get_input("type") == "sent"){
+    	
+        // send back to the users sentbox
+        $url = $vars['url'] . "mod/messages/sent.php";
+        
+        //this is used on the delete link so we know which type of message it is 
+        $type = "sent";
+        
+    } else {
+        
+        //send back to the users inbox
+        $url = $vars['url'] . "pg/messages/" . $vars['user']->username;
+        
+        //this is used on the delete link so we know which type of message it is 
+        $type = "inbox";
+        
+    }
+	 
+    if (isloggedin())
+    if (isset($vars['entity'])) {
+    	if ($vars['entity']->toID == $vars['user']->guid
+    		|| $vars['entity']->owner_guid == $vars['user']->guid) {
+    		
+?>
+    <!-- get the correct return url -->
+    <div id="messages_return"><!-- start of messages_return div -->
+         <p><a href="<?php echo $url; ?>">&laquo; <?php echo elgg_echo('messages:back'); ?></a></p>
+    </div><!-- end of messages_return div -->
+    
+    <div class="messages_single"><!-- start of the message div -->
+    
+        <div class="messages_single_icon"><!-- start of the message_user_icon div -->
+            <!-- get the user icon, name and date -->
+            <?php
+                // we need a different user icon and name depending on whether the user is reading the message
+                // from their inbox or sentbox. If it is the inbox, then the icon and name will be the person who sent
+                // the message. If it is the sentbox, the icon and name will be the user the message was sent to
+                if($type == "sent"){
+                    //get an instance of the user who the message has been sent to so we can access the name and icon
+                    $user_object = get_entity($vars['entity']->toId);
+                    //get the icon
+                    echo " " . elgg_view("profile/icon",array('entity' => $user_object, 'size' => 'tiny'));
+                    //get the name
+                    echo "<br class=\"clearfloat\" /><p>".elgg_echo('messages:to').": <b>" . $user_object->name . "</b><br />";
+                }else{
+                    //get the icon
+                    echo " " . elgg_view("profile/icon",array('entity' => get_entity($vars['entity']->fromId), 'size' => 'tiny'));
+                    //get the name
+                    echo "<br class=\"clearfloat\" /><p>".elgg_echo('messages:from').": <b>" . get_entity($vars['entity']->fromId)->name . "</b><br />";
+                }
+            ?>
+            <!-- get the time the message was sent -->
+            <small><?php echo friendly_time($vars['entity']->time_created); ?></small>
+            </p>
+        </div><!-- end of the message_user_icon div -->
+        
+        <div class="message_body"><!-- start of div message_body -->
+        
+        <?php
+		    //if the message is a reply, display the message the reply was for
+		    //I need to figure out how to get the description out using -> (anyone?)
+		    if($main_message = $vars['entity']->getEntitiesFromRelationship("reply")){
+        		
+    		    if($type == "sent"){
+        		    echo "<div class='previous_message'><h3>".elgg_echo('messages:original').":</h3><p>";
+    		    }else{
+    		        echo "<div class='previous_message'><h3>".elgg_echo('messages:yours').":</h3><p>";
+		        }
+		        
+    		    echo $main_message[0][description] . "</p></div>";
+        			
+    	    }
+    	?>
+        
+        <!-- display the title -->
+        <div class="actiontitle">
+		<h3><?php echo $vars['entity']->title; ?></h3>
+		</div>
+		
+		<!-- display the message -->
+		<div class="messagebody">
+		<p><?php echo elgg_view('output/longtext',array('value' => $vars['entity']->description)); ?></p>
+		</div>
+		
+		<!-- display the edit options, reply and delete -->
+		<div class="message_options"><!-- start of the message_options div -->
+		
+		<script type="text/javascript">	
+		$(document).ready(function () {
+			// click function to toggle reply panel
+			$('a.message_reply').click(function () {
+				$('div#message_reply_form').slideToggle("medium");
+				return false;
+			}); 
+		});
+		</script>	
+		
+		
+		    <p><?php if($type != "sent")echo "<a href=\"javascript:void(0);\" class='message_reply'>".elgg_echo('messages:answer')."</a> &nbsp; "; ?> <?php echo elgg_view("output/confirmlink", array(
+																'href' => $vars['url'] . "action/messages/delete?message_id=" . $vars['entity']->getGUID() . "&type={$type}&submit=" . elgg_echo('delete'),
+																'text' => elgg_echo('delete'),
+																'confirm' => elgg_echo('deleteconfirm'),
+															)); ?>
+		    </p>
+		</div><!-- end of the message_options div -->
+		
+		</div><!-- end of div message_body -->
+              
+		<!-- display the reply form -->
+		<div id="message_reply_form">
+			<form action="<?php echo $vars['url']; ?>action/messages/send" method="post" name="messageForm">
+				<!-- populate the title space with the orginal message title, inserting re: before it -->						        
+				<p><label><?php echo elgg_echo("messages:title"); ?>: <br /><input type='text' name='title' class="input-text" value='RE: <?php echo $vars['entity']->title; ?>' /></label></p>
+				<p class="longtext_editarea"><label><?php echo elgg_echo("messages:message"); ?>:</label></p>
+				<div id="message_reply_editor">
+				<?php
+
+				    echo elgg_view("input/longtext", array(
+									"internalname" => "message",
+									"value" => '',
+													));
+			
+		        ?></div>
+				
+				<p>
+	        			<?php
+                
+	            				//pass across the guid of the message being replied to
+    	        				echo "<input type='hidden' name='reply' value='" . $vars['entity']->getGUID() . "' />";
+    	        				//pass along the owner of the message being replied to
+    	        				echo "<input type='hidden' name='send_to' value='" . $vars['entity']->fromId . "' />";
+	
+	        			?>
+	        			<input type="submit" class="submit_button" value="<?php echo elgg_echo("messages:fly"); ?>!" />
+				</p>
+			</form>
+		</div><!-- end of div reply_form -->
+
+    </div><!-- end of the message div -->
+	
+<?php
+    		}
+    }
+?>
\ No newline at end of file
diff --git a/plugins/messages/views/default/messages/topbar.php b/plugins/messages/views/default/messages/topbar.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f5da12471e64491b55f04d8223180ef46ddeea3
--- /dev/null
+++ b/plugins/messages/views/default/messages/topbar.php
@@ -0,0 +1,38 @@
+<?php
+
+	/**
+	 * Elgg messages topbar extender
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 */
+	 
+	 //need to be logged in to send a message
+	 gatekeeper();
+
+	//get unread messages
+	$num_messages = count_unread_messages();
+	if($num_messages){
+		$num = $num_messages;
+	} else {
+		$num = 0;
+	}
+
+	if($num == 0){
+
+?>
+
+	<a href="<?php echo $vars['url']; ?>pg/messages/<?php echo $_SESSION['user']->username; ?>" class="privatemessages" >&nbsp;</a>
+	
+<?php
+    }else{
+?>
+
+    <a href="<?php echo $vars['url']; ?>pg/messages/<?php echo $_SESSION['user']->username; ?>" class="privatemessages_new" >[<?php echo $num; ?>]</a>
+	
+<?php
+    }
+?>
\ No newline at end of file
diff --git a/plugins/messages/views/default/messages/view.php b/plugins/messages/views/default/messages/view.php
new file mode 100644
index 0000000000000000000000000000000000000000..215e621ba7138efe805b7740b967f3843fb05417
--- /dev/null
+++ b/plugins/messages/views/default/messages/view.php
@@ -0,0 +1,153 @@
+<?php
+
+	/**
+	 * Elgg messages view page
+	 * 
+	 * @package ElggMessages
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @author Curverider Ltd <info@elgg.com>
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.com/
+	 * 
+	 * @uses $vars['entity'] An array of messages to view
+	 * @uses $vars['page_view'] This is the page the messages are being accessed from; inbox or sentbox
+	 * 
+	 */
+	 
+	$limit = $vars['limit']; if (empty($limit)) $limit = 10;
+	$offset = $vars['offset']; if (!isset($offset)) $offset = 0;
+
+	// If there are any messages to view, view them
+	if (isloggedin())
+    if (is_array($vars['entity']) && sizeof($vars['entity']) > 0) {
+    		
+?>
+    <div id="messages" /><!-- start the main messages wrapper div -->
+            
+<?php
+    		
+    		// get the correct display for the inbox view
+    		if($vars['page_view'] == "inbox") {
+
+    			$counter = 0;
+    			
+    			foreach($vars['entity'] as $message) {
+    				if ($message->owner_guid == $vars['user']->guid
+    					|| $message->toID == $vars['user']->guid) {
+        			
+        			//make sure to only display the messages that have not been 'deleted' (1 = deleted)
+    				if($message->hiddenFrom != 1){
+        				
+        				// check to see if the message has been read, if so, get the correct background color
+        			    if($message->readYet == 1){
+                            echo "<div class=\"message_read\" />";
+                        }else{
+                            echo "<div class=\"message_notread\" />";
+                        }
+                        
+                        //set the table
+        				echo "<table width=\"100%\" cellspacing='0'><tr>";       
+                        //get the icon of the user who owns the message
+                        $from = get_entity($message->fromId);
+        				echo "<td width='200px'>" . elgg_view("profile/icon",array('entity' => $from, 'size' => 'tiny')) . "<div class='msgsender'><b>" . $from->name . "</b><br /><small>" . friendly_time($message->time_created) . "</small></div></td>";
+        				//display the message title
+    				    echo "<td><div class='msgsubject'>";
+    				    echo "<input type=\"checkbox\" name=\"message_id[]\" value=\"{$message->guid}\" /> ";
+    				    echo "<a href=\"{$message->getURL()}\">" . $message->title . "</a></div></td>";
+    				    //display the link to 'delete'
+    				    
+    				    echo "<td width='70px'>";
+    				    echo "<div class='delete_msg'>" . elgg_view("output/confirmlink", array(
+																'href' => $vars['url'] . "action/messages/delete?message_id=" . $message->getGUID() . "&type=inbox&submit=" . urlencode(elgg_echo('delete')),
+																'text' => elgg_echo('delete'),
+																'confirm' => elgg_echo('deleteconfirm'),
+															)) . "</div>";								
+															
+		                echo "</td></tr></table>";
+		                echo "</div>"; // close the message background div
+		                
+    			    }//end of hiddenFrom if statement
+    				} // end of user check 
+    				
+    				$counter++;
+    				if ($counter == $limit) break;
+    				
+    			}//end of for each loop
+    			
+			}//end of inbox if statement
+			
+			// get the correct display for the sentbox view
+			if($vars['page_view'] == "sent") {
+    			
+				$counter = 0;
+				
+    			foreach($vars['entity'] as $message) {
+        			
+        			//make sure to only display the messages that have not been 'deleted' (1 = deleted)
+    				if($message->hiddenTo != 1){
+        				
+        				//get the correct user entity
+        				$user = get_entity($message->toID);
+        				echo "<div class=\"message_sent\" />";
+        				echo "<table width=\"100%\" cellspacing='0'><tr>";
+        				
+        				//get the icon for the user the message was sent to
+        				echo "<tr><td width='200px'>" . elgg_view("profile/icon",array('entity' => $user, 'size' => 'tiny')) . "<div class='msgsender'><b>" . $user->name . "</b><br /><small>" . friendly_time($message->time_created) . "</small></div></td>";
+        				//display the message title
+    				    echo "<td><div class='msgsubject'>";
+    				    echo "<input type=\"checkbox\" name=\"message_id[]\" value=\"{$message->guid}\" /> ";
+    				    echo "<a href=\"{$message->getURL()}?type=sent\">" . $message->title . "</a></div></td>";
+        				//display the link to 'delete'
+        				
+        				echo "<td width='70px'>";
+							echo "<div class='delete_msg'>" . elgg_view("output/confirmlink", array(
+							'href' => $vars['url'] . "action/messages/delete?message_id=" . $message->getGUID() . "&type=sent&submit=" . urlencode(elgg_echo('delete')),
+							'text' => elgg_echo('delete'),
+							'confirm' => elgg_echo('deleteconfirm'),
+						)) . "</div>";
+ 						echo "</td></tr></table></div>";
+						
+    			    }//close hiddeTo if statement
+    				
+    			    $counter++;
+    			    if ($counter == $limit) break;
+    			    
+    			}//close foreach
+    			
+			}//close page_view sent if statement
+			
+			$baseurl = $_SERVER['REQUEST_URI'];
+			$baseurl = $baseurl = preg_replace('/[\&\?]offset\=[0-9]*/',"",$baseurl); 
+			
+			$nav = '';
+			
+			if (sizeof($vars['entity']) > $limit) {
+				$newoffset = $offset + $limit;
+				$urladdition = 'offset='.$newoffset;
+				if (substr_count($baseurl,'?')) $nexturl=$baseurl . '&' . $urladdition; else $nexturl=$baseurl . '?' . $urladdition;
+				
+				$nav .= '<a class="pagination_previous" href="'.$nexturl.'">&laquo; ' . elgg_echo('previous') . '</a> ';
+			}
+				
+			if ($offset > 0) {
+				$newoffset = $offset - $limit;
+				if ($newoffset < 0) $newoffset = 0;
+				$urladdition = 'offset='.$newoffset;
+				if (substr_count($baseurl,'?')) $prevurl=$baseurl . '&' . $urladdition; else $prevurl=$baseurl . '?' . $urladdition;
+				
+				$nav .= '<a class="pagination_next" href="'.$prevurl.'">' . elgg_echo('next') . ' &raquo;</a> ';
+			}
+		 
+			
+			if (!empty($nav)) {
+				echo '<div class="pagination"><p>'.$nav.'</p><div class="clearfloat"></div></div>';
+			}
+				
+			echo "</div>"; // close the main messages wrapper div
+			
+    } else {
+        
+    	"<p class='messages_nomessage_message'>" . elgg_echo("messages:nomessages") . "</p>";
+    		
+	}//end of the first if statement
+?>
\ No newline at end of file
diff --git a/plugins/messages/views/default/object/messages.php b/plugins/messages/views/default/object/messages.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/plugins/messages/views/default/widgets/messages/edit.php b/plugins/messages/views/default/widgets/messages/edit.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/plugins/messages/views/default/widgets/messages/view.php b/plugins/messages/views/default/widgets/messages/view.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4d138562de4d92d8ac5cf3eb259450f5ede86aa
--- /dev/null
+++ b/plugins/messages/views/default/widgets/messages/view.php
@@ -0,0 +1,13 @@
+
+	<?php
+	
+	    $num_messages = count_unread_messages();
+	    
+        if($num_messages  == 0)
+		    echo "<h3 class=\"new_messages_count\">You have no new messages.</h3>";
+		else {
+		    echo "<h3 class=\"new_messages_count\">" . $num_messages . " new message(s).</h3>";
+		    echo "<a href=\"" . $vars['url'] . "pg/messages/" . $_SESSION['user']->username ."\">check them out</a>";
+	    }
+
+	?>