diff --git a/privatemsg.module b/privatemsg.module
old mode 100644
new mode 100755
index f0c193d..5d0b9ae
--- a/privatemsg.module
+++ b/privatemsg.module
@@ -272,8 +272,8 @@ function privatemsg_menu() {
     'page callback'    => 'privatemsg_list_page',
     'page arguments'   => array('list', 1),
     'file'             => 'privatemsg.pages.inc',
-    'access callback'  => 'privatemsg_user_access',
-    'access arguments' => array('read all private messages'),
+    'access callback'  => 'privatemsg_tab_access',
+    'access arguments' => array(1),
     'type' => MENU_LOCAL_TASK,
   );
 
@@ -301,6 +301,34 @@ function privatemsg_menu_local_tasks_alter(&$data, $router_item, $root_path) {
 }
 
 /**
+ * Access callback for "Messages" tab on user profile (user/%/messages).
+ * 
+ * @param $account_id
+ *   User ID of the message tab to be viewed
+ */
+function privatemsg_tab_access($account_id){
+  global $user;
+  if (!$user->uid){
+    // Disallow anonymous access, regardless of permissions
+    return FALSE;
+  } 
+
+  if (!user_access('read privatemsg', $user)) {
+    // Disallow access, if permission to read messages is not given
+    return FALSE;
+  }
+  
+  if (($user->uid == $account_id) || user_access('read all private messages')) {
+    // Allow access if user wants to access own messages page OR user has 
+    // permission to read all messages
+    return TRUE;
+  }
+  else {
+    return FALSE;
+  };
+}
+
+/**
  * Privatemsg  wrapper for user_access.
  *
  * Never allows anonymous user access as that doesn't makes sense.
