diff --git a/userpoints_nodelimit/README.txt b/userpoints_nodelimit/README.txt
index d320df3..624f092 100644
--- a/userpoints_nodelimit/README.txt
+++ b/userpoints_nodelimit/README.txt
@@ -4,7 +4,7 @@ Eric Wright, eric.wright@bluevestconsulting.com
 INSTALLATION
 
 1. Extract to the site/all/modules
-2. Enable in Administer > Modules (admin/build/modules).
+2. Enable in Administer > Modules (admin/modules).
 
 CONFIGURATION
 
diff --git a/userpoints_nodelimit/userpoints_nodelimit.info b/userpoints_nodelimit/userpoints_nodelimit.info
index c9d6ac5..5768289 100644
--- a/userpoints_nodelimit/userpoints_nodelimit.info
+++ b/userpoints_nodelimit/userpoints_nodelimit.info
@@ -1,5 +1,6 @@
 name = User Points Node Limit
 description = Limits the creation of specific nodes based on the available number of userpoints
 package = Userpoints
-core = 6.x
+core = 7.x
+configure = admin/config/people/userpoints/settings
 dependencies[] = userpoints
diff --git a/userpoints_nodelimit/userpoints_nodelimit.install b/userpoints_nodelimit/userpoints_nodelimit.install
index fa861da..9928edd 100644
--- a/userpoints_nodelimit/userpoints_nodelimit.install
+++ b/userpoints_nodelimit/userpoints_nodelimit.install
@@ -1,32 +1,41 @@
-<?php
-
-/**
-* Implementation of hook_install().
-*/
-function userpoints_nodelimit_install() {
-	
-	db_query("UPDATE {system} SET weight = 5 WHERE name = 'userpoints_nodelimit'");
-  drupal_set_message(t('User Points Node Limit has been successfully installed.'));
-  drupal_set_message(t('You can configure the User Points Node Limit module on the <a href="@url">Content Types settings page</a>.', array('@url' => url('admin/content/types/list'))));
-}
-
-
-
-/**
- * Implementation of hook_uninstall().
- */
-function userpoints_nodelimit_uninstall() {
-  foreach (node_get_types('names') as $type => $type_name) {
-    variable_del('userpoints_nodelimit_'. $type);
-    variable_del('userpoints_nodelimit_nodepoints_'. $type);
-  }
-}
-
-/**
- * make sure hooks are invoked after cck main hooks
- */
-function userpoints_nodelimit_update_1() {
-  $ret = array();
-  $ret[] = update_sql("UPDATE {system} SET weight = 5 WHERE name = 'userpoints_nodelimit'");
-  return $ret;
-}
\ No newline at end of file
+<?php
+
+/**
+ * @file
+ * Installs userpoints node limit.
+ */
+
+/**
+ * Implements hook_install().
+ */
+function userpoints_nodelimit_install() {
+  db_update('system')
+    ->fields(array(
+      'weight' => 5,
+    ))
+    ->condition('name', 'userpoints_nodelimit')
+    ->execute();
+}
+
+/**
+ * Implements hook_uninstall().
+ */
+function userpoints_nodelimit_uninstall() {
+  foreach (node_type_get_types('names') as $type => $type_name) {
+    variable_del('userpoints_nodelimit_' . $type);
+    variable_del('userpoints_nodelimit_nodepoints_' . $type);
+    variable_del('userpoints_nodelimit_category_' . $type);
+  }
+  variable_del('userpoints_nodelimit');
+  variable_del('userpoints_nodelimit_nodepoints');
+  variable_del('userpoints_nodelimit_category');
+}
+
+/**
+ * Implements hook_update_last_removed().
+ */
+function userpoints_nodelimit_update_last_removed() {
+  // Removed the legacy update_1, that set the weight of nodelimit.
+  // The next update function is userpoints_nodelimit_update_7100().
+  return 1;
+}
diff --git a/userpoints_nodelimit/userpoints_nodelimit.js b/userpoints_nodelimit/userpoints_nodelimit.js
new file mode 100644
index 0000000..da3a0cc
--- /dev/null
+++ b/userpoints_nodelimit/userpoints_nodelimit.js
@@ -0,0 +1,28 @@
+(function ($) {
+  Drupal.behaviors.userpointsNodelimitFieldsetSummaries = {
+    attach: function (context) {
+      // This is both for the userpoints settings and the node type settings
+      // vertical tab.
+      $('fieldset#edit-userpoints-nodelimit', context).drupalSetSummary(function (context) {
+        var params = {
+          '@points': $('#edit-userpoints-nodelimit-nodepoints', context).val(),
+          '%category': $('select#edit-userpoints-nodelimit-category :selected', context).text()
+        }
+
+        if ($("input[name='userpoints_nodelimit']").is(':checked')) {
+          return Drupal.t('Enabled, @points (%category) required.', params);
+        }
+        else {
+          // If disabled on the node type settings, the other settings don't
+          // matter so we don't display them.
+          if ($('form#node-type-form').length) {
+            return Drupal.t('Disabled.');
+          }
+          else {
+            return Drupal.t('Disabled, @points (%category) required.', params);
+          }
+        }
+      })
+    }
+  };
+})(jQuery);
diff --git a/userpoints_nodelimit/userpoints_nodelimit.module b/userpoints_nodelimit/userpoints_nodelimit.module
index e73013a..0d32731 100644
--- a/userpoints_nodelimit/userpoints_nodelimit.module
+++ b/userpoints_nodelimit/userpoints_nodelimit.module
@@ -1,150 +1,208 @@
 <?php
 
 /**
+ * @file
+ * Implements userpoints node limit.
+ */
+
+/**
  * Enables a limit on node creation based on user's current user points.
  * Can't create the node if the points for the node is negative and would
  * bring the user below 0 points.
  *
- * 
+ *
  * @author Eric Wright, eric.wright@bluevestconsulting.com
- * 
+ *
  * Many thanks to Jesse Mortenson for the original 5.x version &
  * Wolfgang Ziegler for auto_nodetitle which I leaned on heavily
  *
+ * Updated to Drupal 7 by Bastlynn ( bastlynn@gmail.com )
  */
 
 define('USERPOINTS_NODELIMIT_DISABLED', 0);
 define('USERPOINTS_NODELIMIT_ENABLED', 1);
 
 /**
- * Implementation of hook_form_alter().
+ * Implements hook_form_FORM_ID_alter().
  */
-function userpoints_nodelimit_form_alter(&$form, $form_state, $form_id) {
-
-  if (isset($form['#node_type']) && 'node_type_form' == $form_id) {
-    userpoints_nodelimit_node_settings_form($form);
-  }
-  else {
-    if (isset($form['#node']) && isset($form['#method']) && $form['#node']->type .'_node_form' == $form_id) {
-      $type = $form['#node']->type;
-      // This is a node form; user is either adding a new node or editing an existing one.
-      // Don't check if user is editing node.  Access check has happened already, so user is assumed to have access to edit / create this node type.
-      if (userpoints_nodelimit_get_setting($type) == USERPOINTS_NODELIMIT_ENABLED) {
-        // check the number of available user points against the requirements for this node
-        // Only check when user is adding a new node.  $form['#node']->nid is unset when adding a new node.
-        if (!isset($form['#node']->nid) && !userpoints_nodelimit_check($type)) {
-          $friendly_name = node_get_types('name', $form['#node']); 
-          drupal_set_message(theme('userpoints_nodelimit_insufficent_points_message', $type, $friendly_name), 'error');
-      	  //destroy the form
-      	  $form = NULL;
-      	  //return a simple hidden field so that function doesn't fail
-      	  $form['dummy'] = array(
-       		  '#type' => 'hidden',
-        	  '#default_value' => '',
-      	  );
-        }
-        else {
-     		  // add a validate function as the points may change between the opening for the form  
-     		  // and the submission of the form, so we should check again prior to submission
-				  $form['#validate'][] = 'userpoints_nodelimit_validate';
-			  }
-      }
-    }
-  }
-}
-
-/**
-  * Form validation
-  */ 
-function userpoints_nodelimit_validate($form, &$form_state) {
-  // check the user points and confirm they have enough
-  $type = $form['#node']->type;
-  // check the number of available user points against the requirements for this node
-  // Only check when user is adding a new node.  $form['#node']->nid is unset when adding a new node.
-  if (!isset($form['#node']->nid) && !userpoints_nodelimit_check($type)) {
-    $friendly_name = node_get_types('name', $form['#node']); 
-    form_set_error('userpoints_nodelimit_details', theme('userpoints_nodelimit_insufficent_points_message',$type, $friendly_name));
-  }
-}
-
-/**
-  * Node Limit Error Message
-  */
-function theme_userpoints_nodelimit_insufficent_points_message($node_type, $friendly_name) {
-	$html_message =	t('You do not have enough !points to create @friendly content.<br />You currently have @user_points !points, you need @node_points !points to create a @friendly.', 
-    array_merge(userpoints_translation(), 
-    array('@user_points' => userpoints_get_current_points($user->uid), 
-      '@node_points' => variable_get('userpoints_nodelimit_nodepoints_'.$node_type, '?'),
-      '@friendly' => $friendly_name,
-      '@type' => $node_type
-      ) 
-    )
-  );
-  return $html_message;
-}
-
-/**
-  * Helper function for hook_form_alter() renders the settings per node-type.
-  */
-function userpoints_nodelimit_node_settings_form(&$form) {
+function userpoints_nodelimit_form_node_type_form_alter(&$form, &$form_state, $form_id) {
   $form['userpoints_nodelimit'] = array(
     '#type' => 'fieldset',
-    '#title' => t('User points node limit settings'),
-    '#weight' => 0,
+    '#title' => t('!Points node limit settings', userpoints_translation()),
     '#collapsible' => TRUE,
     '#collapsed' => TRUE,
+    '#access' => user_access('administer userpoints'),
+    '#weight' => 25,
+    '#group' => 'additional_settings',
+    '#attached' => array(
+      'js' => array(
+        'userpoints_nodelimit' => drupal_get_path('module', 'userpoints_nodelimit') . '/userpoints_nodelimit.js',
+      ),
+    ),
   );
-  
   $form['userpoints_nodelimit']['userpoints_nodelimit'] = array(
     '#type' => 'checkbox',
-    '#title' => t('Enable User Points Node Limit for this type.'),
-    '#description' => t('Node Limit will check to ensure users trying to create this node type have the required number of user points.'),
-    '#default_value' => userpoints_nodelimit_get_setting($form['#node_type']->type),
+    '#title' => t('Enable !points node limit for this type.', userpoints_translation()),
+    '#description' => t('Node limit will check to ensure users trying to create this node type have the required number of !points.', userpoints_translation()),
+    '#default_value' => variable_get('userpoints_nodelimit_' . $form['#node_type']->type, userpoints_nodelimit_get_setting($form['#node_type']->type)),
   );
-    
   $form['userpoints_nodelimit']['userpoints_nodelimit_nodepoints'] = array(
     '#type' => 'textfield',
-    '#title' => t('User Points Required'),
-    '#description' => t('Enter the number of user points required to create a new node of this type.'),
-    '#default_value' => variable_get('userpoints_nodelimit_nodepoints_'. $form['#node_type']->type, '0'),
+    '#title' => t('!Points required', userpoints_translation()),
+    '#description' => t('Enter the number of !points required to create a new node of this type.', userpoints_translation()),
+    '#default_value' => variable_get('userpoints_nodelimit_nodepoints_' . $form['#node_type']->type, variable_get('userpoints_nodelimit_nodepoints', 0)),
+  );
+  $form['userpoints_nodelimit']['userpoints_nodelimit_category'] = array(
+    '#type' => 'select',
+    '#title' => t('!Points category for new content', userpoints_translation()),
+    '#description' => t('Choose the category of !points to be required when a user adds new content.', userpoints_translation()),
+    '#options' => userpoints_get_categories(),
+    '#default_value' => variable_get('userpoints_nodelimit_category', variable_get('userpoints_nodelimit_category', 0)),
   );
 }
 
 /**
- * Gets the userpoints node limit setting associated with the given content type.
+ * Implements hook_node_type_delete().
  */
-function userpoints_nodelimit_get_setting($type) {
-  return variable_get('userpoints_nodelimit_'. $type, USERPOINTS_NODELIMIT_DISABLED);
+function userpoints_nodelimit_node_type_delete($info) {
+  variable_del('userpoints_nodelimit_' . $info->type);
+  variable_del('userpoints_nodelimit_nodepoints_' . $info->type);
+  variable_del('userpoints_nodelimit_category_' . $info->type);
 }
 
 /**
- * Implementation of hook_node_type().
+ * Implements hook_node_type_update().
  */
-function userpoints_nodelimit_node_type($op, $info) {
-  switch ($op) {
-    case 'delete':
-      variable_del('userpoints_nodelimit_'. $info->type);
-      variable_del('userpoints_nodelimit_nodepoints_'. $info->type);
-      break;
-    case 'update':
-      if (!empty($info->old_type) && $info->old_type != $info->type) {
-        variable_set('userpoints_nodelimit_'. $info->type, userpoints_nodelimit_get_setting($info->old_type));
-        variable_set('userpoints_nodelimit_nodepoints_'. $info->type, variable_get('userpoints_nodelimit_nodepoints_'. $info->old_type, ''));
-        variable_del('userpoints_nodelimit_'. $info->old_type);
-        variable_del('userpoints_nodelimit_nodepoints_'. $info->old_type);
+function userpoints_nodelimit_node_type_update($info) {
+  if (!empty($info->old_type) && $info->old_type != $info->type) {
+    variable_set('userpoints_nodelimit_' . $info->type, userpoints_nodelimit_get_setting($info->old_type));
+    variable_set('userpoints_nodelimit_nodepoints_' . $info->type, variable_get('userpoints_nodelimit_nodepoints_' . $info->old_type, ''));
+    variable_set('userpoints_nodelimit_category_' . $info->type, variable_get('userpoints_nodelimit_category_' . $info->old_type, ''));
+    variable_del('userpoints_nodelimit_' . $info->old_type);
+    variable_del('userpoints_nodelimit_nodepoints_' . $info->old_type);
+    variable_del('userpoints_nodelimit_category_' . $info->old_type);
+  }
+}
+
+/**
+ * Implements hook_form_alter().
+ */
+function userpoints_nodelimit_form_alter(&$form, &$form_state, $form_id) {
+  if (isset($form['#node']) && $form['#node']->type . '_node_form' == $form_id) {
+    // This is a node form; user is either adding a new node or editing an
+    // existing one.
+    // Don't check if user is editing node. Access check has happened already,
+    //so user is assumed to have access to edit / create this node type.
+    if (userpoints_nodelimit_get_setting($form['#node']->type) == USERPOINTS_NODELIMIT_ENABLED) {
+      // Check the number of available user points against the requirements for
+      // this node.
+      // Only check when user is adding a new node. $form['#node']->nid is unset
+      // when adding a new node.
+      if (!isset($form['#node']->nid) && !userpoints_nodelimit_check($form['#node']->type)) {
+        drupal_set_message(userpoints_nodelimit_insufficent_points_message($form['#node']->type), 'error');
+        // Return no access to the form. This allows other modules to override
+        // this value as needed.
+        $form['#access'] = FALSE;
       }
+      else {
+        // Add a validate function as the points may change during submission.
+        // (With Rules for example.)
+        $form['#validate'][] = 'userpoints_nodelimit_validate';
+      }
+    }
+  }
+}
+
+/**
+ * Form validation for node submission.
+ */
+function userpoints_nodelimit_validate($form, &$form_state) {
+  // Check the number of available user points against the requirements for
+  // this node.
+  // Only check when user is adding a new node. $form['#node']->nid is unset
+  // when adding a new node.
+  if (!isset($form['#node']->nid) && !userpoints_nodelimit_check($form['#node']->type)) {
+    form_set_error('userpoints_nodelimit_details', userpoints_nodelimit_insufficent_points_message($form['#node']->type));
+  }
+}
+
+/**
+ * Implements hook_userpoints().
+ */
+function userpoints_nodelimit_userpoints($op, $params = array()) {
+  switch ($op) {
+    case 'setting':
+      $form['userpoints_nodelimit'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Node limit'),
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+        '#access' => user_access('administer userpoints'),
+        '#weight' => 25,
+        '#group' => 'settings_additional',
+        '#attached' => array(
+          'js' => array(
+            'userpoints_nodelimit' => drupal_get_path('module', 'userpoints_nodelimit') . '/userpoints_nodelimit.js',
+          ),
+        ),
+      );
+      $form['userpoints_nodelimit']['userpoints_nodelimit'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Enabled by default.'),
+        '#default_value' => variable_get('userpoints_nodelimit', TRUE),
+        '#description' => t('If checked, all content types require !points by default. This can be overridden for each content type on the content type edit page.', userpoints_translation()),
+      );
+      $form['userpoints_nodelimit']['userpoints_nodelimit_nodepoints'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Default !points for new content', userpoints_translation()),
+        '#description' => t('Set the default number of !points to be required when a user adds new content. This can be overridden for each content type.', userpoints_translation()),
+        '#default_value' => variable_get('userpoints_nodelimit_nodepoints', 0),
+        '#size' => 5,
+        '#maxlength' => 5,
+      );
+      $form['userpoints_nodelimit']['userpoints_nodelimit_category'] = array(
+        '#type' => 'select',
+        '#title' => t('Default !points category for new content', userpoints_translation()),
+        '#description' => t('Choose the category of !points to be required by default when a user adds new content. This can be overridden for each content type.', userpoints_translation()),
+        '#options' => userpoints_get_categories(),
+        '#default_value' => variable_get('userpoints_nodelimit_category', 0),
+      );
+      return $form;
       break;
   }
 }
 
 /**
- * Check if user has sufficient points to create a node of a certain type
+ * Helper function to return the node limit error mesage.
  */
-function userpoints_nodelimit_check($nodetype) {
+function userpoints_nodelimit_insufficent_points_message($node_type) {
   global $user;
+  $html_message = t('You do not have enough !points to create @human_type content.<br />You currently have @user_points !points, you need @node_points !points to create a @human_type.',
+    array_merge(userpoints_translation(), array(
+      '@user_points' => userpoints_get_current_points($user->uid),
+      '@node_points' => variable_get('userpoints_nodelimit_nodepoints_' . $node_type, '?'),
+      '@human_type' => node_type_get_name($node_type),
+      )
+    )
+  );
+  return $html_message;
+}
+
+/**
+ * Helper function to get the userpoints node limit setting associated with the given content type.
+ */
+function userpoints_nodelimit_get_setting($type) {
+  return variable_get('userpoints_nodelimit_' . $type, variable_get('userpoints_nodelimit', USERPOINTS_NODELIMIT_DISABLED));
+}
 
-  $current_points = userpoints_get_current_points($user->uid);
-  $node_points = variable_get('userpoints_nodelimit_nodepoints_'. $nodetype, 0);
+/**
+ * Helper function to check if user has sufficient points to create a node of a certain type.
+ */
+function userpoints_nodelimit_check($type) {
+  global $user;
+  $category = variable_get('userpoints_nodelimit_category_' . $type, variable_get('userpoints_nodelimit_category', 0));
+  $node_points = variable_get('userpoints_nodelimit_nodepoints_' . $type, variable_get('userpoints_nodelimit_nodepoints', 0));
+  $current_points = userpoints_get_current_points($user->uid, $category);
   if ($current_points >= $node_points) {
     return TRUE;
   }
@@ -152,14 +210,3 @@ function userpoints_nodelimit_check($nodetype) {
     return FALSE;
   }
 }
-
-/**
- * Implementation of hook_theme()
- */
-
-function userpoints_nodelimit_theme($existing, $type, $theme, $path) {
-  return array(
-    'userpoints_nodelimit_insufficent_points_message' => array(
-      'arguments' => array('node_type' => NULL, 'friendly_name' => NULL),
-      ));
-}
\ No newline at end of file
