diff --git a/contrib/password_tab/password_policy_password_tab.info b/contrib/password_tab/password_policy_password_tab.info
index 22e4f67..eb99381 100644
--- a/contrib/password_tab/password_policy_password_tab.info
+++ b/contrib/password_tab/password_policy_password_tab.info
@@ -2,5 +2,5 @@ name = Password change tab
 description = Implements a separate password change tab.
 package = Other
 dependencies[] = password_policy
-core = 6.x
+core = 7.x
 
diff --git a/contrib/password_tab/password_policy_password_tab.module b/contrib/password_tab/password_policy_password_tab.module
index d33abbe..abc3232 100644
--- a/contrib/password_tab/password_policy_password_tab.module
+++ b/contrib/password_tab/password_policy_password_tab.module
@@ -12,35 +12,38 @@
  * Implementation of hook_menu().
  */
 function password_policy_password_tab_menu() {
-  return array(
-    'admin/settings/password_policy/password_tab' => array(
-      'title' => 'Password tab',
-      'page callback' => 'drupal_get_form',
-      'page arguments' => array('password_policy_password_tab_admin_settings'),
-      'access arguments' => array('administer site configuration'),
-      'file' => 'password_policy_password_tab.admin.inc',
-    ),
-    'user/%user_category/edit/password' => array(
-      'title' => 'Password',
-      'page callback' => 'drupal_get_form',
-      'page arguments' => array('password_policy_password_tab', 1),
-      'access callback' => 'user_edit_access',
-      'access arguments' => array(1),
-      'type' => MENU_LOCAL_TASK,
-      'file' => 'password_policy_password_tab.pages.inc',
-    ),
+  $items = array();
+
+  $items['admin/config/people/password_policy/password_tab'] = array(
+    'title' => 'Password tab',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('password_policy_password_tab_admin_settings'),
+    'access arguments' => array('administer site configuration'),
+    'file' => 'password_policy_password_tab.admin.inc',
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 10,
+  );
+  $items['user/%user/password'] = array(
+    'title' => 'Password',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('password_policy_password_tab', 1),
+    'access callback' => 'user_edit_access',
+    'access arguments' => array(1),
+    'type' => MENU_LOCAL_TASK,
+    'file' => 'password_policy_password_tab.pages.inc',
   );
+
+  return $items;
 }
 
 /**
  * Implementation of hook_form_alter().
  */
 function password_policy_password_tab_form_alter(&$form, $form_state, $form_id) {
-  switch ($form_id) {
-    case "user_profile_form":
-      // Hide core password field from user edit form.
+  // Hide core password field from user edit form.
+  if ($form_id == 'user_profile_form') {
+      unset($form['account']['current_pass']);
       unset($form['account']['pass']);
-      break;
   }
 }
 
@@ -66,9 +69,10 @@ function password_policy_password_tab_exit($destination = NULL) {
         $processed = TRUE;
         // Change the drupal_goto to our change password tab.
         $path .= '/password';
-        $query = isset($url_parts['query']) ? $url_parts['query'] : NULL;
-        $fragment = isset($url_parts['fragment']) ? $url_parts['fragment'] : NULL;
-        drupal_goto($path, $query, $fragment);
+        $opts = array();
+        if (isset($url_parts['fragment'])) { $opts['fragment'] = $url_parts['fragment']; }
+        if (isset($url_parts['query'])) { parse_str($url_parts['query'], $params); $opts['query'] = $params; }
+        drupal_goto($path, $opts);
       }
     }
   }
diff --git a/contrib/password_tab/password_policy_password_tab.pages.inc b/contrib/password_tab/password_policy_password_tab.pages.inc
index 4342bac..8220df6 100644
--- a/contrib/password_tab/password_policy_password_tab.pages.inc
+++ b/contrib/password_tab/password_policy_password_tab.pages.inc
@@ -8,18 +8,17 @@
 /**
  * Password change form.
  */
-function password_policy_password_tab(&$form_state, $account) {
+function password_policy_password_tab($form, &$form_state, $account) {
   $form['account']['pass'] = array(
     '#type' => 'password_confirm',
-    '#description' => t('To change the current user password, enter the new password in both fields.'),
     '#size' => 25,
+    '#description' => t('To change the current user password, enter the new password in both fields.'),
   );
+  
   $form['#uid'] = $account->uid;
   $form['_account'] = array('#type' => 'value', '#value' => $account);
   $form['submit'] = array('#type' => 'submit', '#value' => t('Change'));
-  $form['#validate'] = array('password_policy_password_tab_validate');
-  $form['#submit'] = array('password_policy_password_tab_submit');
-  password_policy_form_alter($form, array(), 'user_profile_form');
+
   return $form;
 }
 
@@ -43,10 +42,14 @@ function password_policy_password_tab_submit($form, &$form_state) {
   user_module_invoke('submit', $form_state['values'], $account, 'account');
   user_save($account, array('pass' => $form_state['values']['pass']));
   drupal_set_message(t('Password has been changed.'));
+
   if (variable_get('password_policy_password_tab_redirect', '') && !preg_match('/[?&]destination=/', $form['#action'])) {
     global $user;
     $redirect = parse_url(urldecode(strtr(variable_get('password_policy_password_tab_redirect', ''), array('%uid' => $user->uid))));
-    $form_state['redirect'] = array($redirect['path'], isset($redirect['query']) ? $redirect['query'] : NULL, isset($redirect['fragment']) ? $redirect['fragment'] : NULL);
+    $opts = array();
+    if (isset($redirect['fragment'])) { $opts['fragment'] = $redirect['fragment']; }
+    if (isset($redirect['query'])) { parse_str($redirect['query'], $params); $opts['query'] = $params; }
+    $form_state['redirect'] = array($redirect['path'], $opts);
   }
 }
 
