diff --git a/edit_own_user_account_permission.module b/edit_own_user_account_permission.module
index 422ef95..e3ce1ae 100644
--- a/edit_own_user_account_permission.module
+++ b/edit_own_user_account_permission.module
@@ -1,4 +1,10 @@
 <?php
+
+/**
+ * @file
+ * Controls access to the user profile edit page
+ */
+
 /**
  * Implements hook_permission().
  */
@@ -6,20 +12,35 @@ function edit_own_user_account_permission_permission() {
   return array(
     'edit own user account' => array(
       'title' => t('Edit own user account'),
-      'description' => t('This module add \'edit own user account\' permission.'),
+      'description' => t('User can edit their own account profile.'),
     ),
   );
 }
 
 /**
- * Implements hook_form_alter().
+ * Implements hook_menu_alter().
+ *
+ * @param $items
+ *   Associative array of menu router definitions returned from hook_menu().
+ */
+function edit_own_user_account_permission_menu_alter(&$items) {
+  $items['user/%user/edit']['access callback'] = 'edit_own_user_account_permission_access';
+}
+
+/**
+ * Access callback for the user edit menu item
+ *
+ * @param $account
+ *   User account object that access is being determined for
+ * @return
+ *   Boolean whether or not the user has access to the menu item
  */
-function edit_own_user_account_permission_form_alter(&$form, &$form_state, $form_id) {
-global $user;
-  if ($form_id == 'user_profile_form' && $user->uid == arg(1) && !user_access('edit own user account')) {
-    $form['account']['name']['#access'] = 0;
-    $form['account']['mail']['#access'] = 0;
-    $form['account']['current_pass']['#access'] = 0;
-    $form['account']['pass']['#access'] = 0;
+function edit_own_user_account_permission_access($account) {
+  global $user;
+  if ((user_access('edit own user account') && $user->uid == $account->uid)
+    || user_access('administer users')) {
+    return TRUE;
   }
-}
\ No newline at end of file
+
+  return FALSE;
+}
