diff --git a/includes/recurly.admin.inc b/includes/recurly.admin.inc
index 1994ea7..b8e6149 100644
--- a/includes/recurly.admin.inc
+++ b/includes/recurly.admin.inc
@@ -33,11 +33,6 @@
     '#description' => t("The subdomain of your account including the -test suffix if using the Sandbox."),
     '#default_value' => variable_get('recurly_subdomain', ''),
   );
-  $form['account']['recurly_hosted_payment_pages'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Hosted Payment Pages are enabled for this account.'),
-    '#default_value' => variable_get('recurly_hosted_payment_pages', FALSE),
-  );
 
   // Add form elements to configure default push notification settings.
   $form['push'] = array(
@@ -71,7 +66,6 @@
     '#type' => 'checkboxes',
     '#title' => t('Account integration'),
     '#options' => array(
-      'profile_display' => t('Display Recurly account information on user profile pages, including account management links if Hosted Payment Pages are enabled.'),
       'push_create' => t('Create local account records upon receipt of push notifications linked to users by e-mail address.'),
       'push_update' => t('Update local account records upon receipt of push notifications.'),
     ),
@@ -130,7 +124,7 @@
     }
 
     // Add a purchase link if Hosted Payment Pages are enabled.
-    if (variable_get('recurly_hosted_payment_pages', FALSE)) {
+    if (module_exists('recurly_hosted')) {
       $operations[] = array(
         'title' => t('purchase'),
         'href' => recurly_subscription_plan_purchase_url($plan),
diff --git a/modules/recurly_hosted/recurly_hosted.info b/modules/recurly_hosted/recurly_hosted.info
new file mode 100644
index 0000000..ca981a3
--- /dev/null
+++ b/modules/recurly_hosted/recurly_hosted.info
@@ -0,0 +1,5 @@
+name = Recurly hosted pages
+description = Displays options for managing subscription accounts remotely using Recurly's "hosted pages". This module is only necessary if not using more extensive Recurly integration modules such as Commerce Recurly or RecurlyJS.
+dependencies[] = recurly
+core = 7.x
+package = Recurly
diff --git a/modules/recurly_hosted/recurly_hosted.module b/modules/recurly_hosted/recurly_hosted.module
new file mode 100644
index 0000000..97d8c72
--- /dev/null
+++ b/modules/recurly_hosted/recurly_hosted.module
@@ -0,0 +1,179 @@
+<?php
+/**
+ * @file
+ *
+ * Integrates with Recurly to provide hosted links for Drupal user accounts.
+ *
+ * Enabling this module is not recommended if your site is using Commerce
+ * Recurly or other modules that provide local management of Recurly accounts.
+ */
+
+/**
+ * Implements hook_user_view().
+ *
+ * If enabled, adds Recurly account information and management links to user
+ * profiles linked to accounts.
+ */
+function recurly_hosted_user_view($account, $view_mode, $langcode) {
+  global $user;
+
+  // If account display on user profiles is enabled, this is an authenticated
+  // account, and the current user has access to view its account information...
+  if ($account->uid && recurly_account_access('view', $account)) {
+    // Initialize the Recurly client.
+    recurly_client_initialize();
+
+    // If the account is linked to a Recurly account get an array of values...
+    if ($recurly_account = recurly_account_load(array('uid' => $account->uid))) {
+      // Add it to the content array.
+      $account->content['recurly_account'] = array(
+        '#type' => 'user_profile_category',
+        '#title' => t('Subscription information'),
+        '#weight' => 0,
+      );
+
+      // Build an account holder string based on available data.
+      if (empty($recurly_account['company_name'])) {
+        $account_holder = t('@first_name @last_name', array('@first_name' => $recurly_account['first_name'], '@last_name' => $recurly_account['last_name']));
+      }
+      else {
+        $account_holder = t('@first_name @last_name, @company_name', array('@first_name' => $recurly_account['first_name'], '@last_name' => $recurly_account['last_name'], '@company_name' => $recurly_account['company_name']));
+      }
+
+      $account->content['recurly_account']['account_holder'] = array(
+        '#type' => 'user_profile_item',
+        '#title' => t('Account holder'),
+        '#markup' => $account_holder,
+      );
+
+      // Add the account e-mail address if available.
+      if (!empty($recurly_account['email'])) {
+        $account->content['recurly_account']['account_email'] = array(
+          '#type' => 'user_profile_item',
+          '#title' => t('Account e-mail address'),
+          '#markup' => check_plain($recurly_account['email']),
+        );
+      }
+
+      // Tell the user if the account is closed.
+      if ((empty($recurly_account['state']) && $recurly_account['status'] == 'closed') ||
+        (!empty($recurly_account->state) && $recurly_account['state'] == 'closed')) {
+        $account->content['recurly_account']['account_closed'] = array(
+          '#type' => 'user_profile_item',
+          '#title' => t('Account status'),
+          '#markup' => t('Our records indicate your account is closed. We are not currently billing your for any subscriptions.'),
+        );
+      }
+
+      // Add an appropriate account edit link if the user has access.
+      if (recurly_account_access('edit', $account)) {
+        // Give administrators a link to the back end.
+        if (user_access('administer recurly') || user_access('edit all recurly accounts')) {
+          $account->content['recurly_account']['edit_account_link'] = array(
+            '#type' => 'user_profile_item',
+            '#title' => t('Administer account'),
+            '#markup' => l(t('Edit this account at Recurly.'), recurly_hosted_account_edit_url($recurly_account)),
+          );
+        }
+
+        // If Hosted Payment Pages are enabled, give users a link to their own
+        // account management page if their account is active.
+        if ($user->uid == $account->uid && $recurly_account['state'] == 'active') {
+          // Give users manage links for their own accounts.
+          $account->content['recurly_account']['manage_account_link'] = array(
+            '#type' => 'user_profile_item',
+            '#title' => t('Manage account'),
+            '#markup' => l(t('Update your subscription and billing information at Recurly.'), recurly_hosted_account_manage_url($recurly_account, user_access('edit own recurly account without login'))),
+          );
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Returns an edit URL for a Recurly account.
+ *
+ * @param $recurly_account
+ *   The recurly account values array returned by recurly_account_load.
+ *
+ * @return
+ *   The URL for the plan's edit page at Recurly.
+ */
+function recurly_hosted_account_edit_url($recurly_account) {
+  return recurly_url('accounts/' . $recurly_account['account_code']);
+}
+
+/**
+ * Returns a front end management URL for a Recurly account.
+ *
+ * @param $recurly_account
+ *   The recurly account values array returned by recurly_account_load.
+ * @param $hosted_login_token
+ *   Boolean indicating whether or not to use the hosted login token in the URL
+ *   if it's available in the account object; defaults to FALSE.
+ *
+ * @return
+ *   The URL for the account's front end management page at Recurly; uses the
+ *   hosted login token if specified and it's available.
+ */
+function recurly_hosted_account_manage_url($recurly_account, $hosted_login_token = FALSE) {
+  // Return a URL using the hosted login token if available.
+  if ($hosted_login_token && !empty($recurly_account['hosted_login_token'])) {
+    return recurly_url('account/' . $recurly_account['hosted_login_token']);
+  }
+
+  return recurly_url('account');
+}
+
+/**
+ * Returns a Hosted Payment Page URL for the given subscription plan.
+ *
+ * @param $plan
+ *   The subscription plan object returned by the Recurly client.
+ * @param $settings
+ *   An optional array of settings used to pre-populate the payment form.
+ *   - first_name: the customer's first name
+ *   - last_name: the customer's last name
+ *   - email: the customer's e-mail address
+ *
+ * @return
+ *   The URL for the plan's Hosted Payment Page at Recurly.
+ */
+function recurly_hosted_subscription_plan_purchase_url($plan, $settings = NULL) {
+  $query = '';
+
+  if (!empty($settings)) {
+    $query = '?' . drupal_http_build_query($settings);
+  }
+
+  return recurly_url('subscribe/' . $plan->plan_code . $query);
+}
+
+/**
+ * Returns a form with a submit button that redirects the user to the Hosted
+ * Payment Page for the given plan.
+ *
+ * @param $plan
+ *   A subscription plan object that contains at least a valid plan code.
+ */
+function recurly_hosted_subscription_plan_purchase_redirect_form($form, &$form_state, $plan) {
+  $form['plan'] = array(
+    '#type' => 'value',
+    '#value' => $plan,
+  );
+
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Subscribe'),
+  );
+
+  return $form;
+}
+
+/**
+ * Submit callback: redirect the user to the specified Hosted Payment Page.
+ */
+function recurly_hosted_subscription_plan_purchase_redirect_form_submit($form, &$form_state) {
+  $form_state['redirect'] = recurly_hosted_subscription_plan_purchase_url($form_state['values']['plan']);
+}
diff --git a/recurly.info b/recurly.info
index a981f0d..640718a 100644
--- a/recurly.info
+++ b/recurly.info
@@ -2,3 +2,4 @@
 description = Provides API integration with Recurly using their PHP client library.
 dependencies[] = libraries
 core = 7.x
+package = Recurly
diff --git a/recurly.install b/recurly.install
index 9e00ca2..750775f 100644
--- a/recurly.install
+++ b/recurly.install
@@ -100,7 +100,6 @@
 function recurly_uninstall() {
   // Remove the site-wide account settings.
   variable_del('recurly_subdomain');
-  variable_del('recurly_hosted_payment_pages');
   variable_del('recurly_api_key');
   variable_del('recurly_private_key');
 
diff --git a/recurly.module b/recurly.module
index f4cc766..da3d443 100644
--- a/recurly.module
+++ b/recurly.module
@@ -108,162 +108,6 @@
 }
 
 /**
- * Implements hook_user_view().
- *
- * If enabled, adds Recurly account information and management links to user
- * profiles linked to accounts.
- */
-function recurly_user_view($account, $view_mode, $langcode) {
-  global $user;
-
-  // If account display on user profiles is enabled, this is an authenticated
-  // account, and the current user has access to view its account information...
-  if (recurly_integration_option_enabled('account', 'profile_display') &&
-    $account->uid &&
-    recurly_account_access('view', $account)) {
-    // Initialize the Recurly client.
-    recurly_client_initialize();
-
-    // If the account is linked to a Recurly account...
-    if ($recurly_account = recurly_account_load(array('uid' => $account->uid))) {
-      // Add it to the content array.
-      $account->content['recurly_account'] = array(
-        '#type' => 'user_profile_category',
-        '#title' => t('Subscription information'),
-        '#weight' => 0,
-      );
-
-      // Build an account holder string based on available data.
-      if (empty($recurly_account->company_name)) {
-        $account_holder = t('@first_name @last_name', array('@first_name' => $recurly_account->first_name, '@last_name' => $recurly_account->last_name));
-      }
-      else {
-        $account_holder = t('@first_name @last_name, @company_name', array('@first_name' => $recurly_account->first_name, '@last_name' => $recurly_account->last_name, '@company_name' => $recurly_account->company_name));
-      }
-
-      $account->content['recurly_account']['account_holder'] = array(
-        '#type' => 'user_profile_item',
-        '#title' => t('Account holder'),
-        '#markup' => $account_holder,
-      );
-
-      // Add the account e-mail address if available.
-      if (!empty($recurly_account->email)) {
-        $account->content['recurly_account']['account_email'] = array(
-          '#type' => 'user_profile_item',
-          '#title' => t('Account e-mail address'),
-          '#markup' => check_plain($recurly_account->email),
-        );
-      }
-
-      // Tell the user if the account is closed.
-      if ((empty($recurly_account->state) && $recurly_account->status == 'closed') ||
-        (!empty($recurly_account->state) && $recurly_account->state == 'closed')) {
-        $account->content['recurly_account']['account_closed'] = array(
-          '#type' => 'user_profile_item',
-          '#title' => t('Account status'),
-          '#markup' => t('Our records indicate your account is closed. We are not currently billing your for any subscriptions.'),
-        );
-      }
-
-      // Add an appropriate account edit link if the user has access.
-      if (recurly_account_access('edit', $account)) {
-        // Give administrators a link to the back end.
-        if (user_access('administer recurly') || user_access('edit all recurly accounts')) {
-          $account->content['recurly_account']['edit_account_link'] = array(
-            '#type' => 'user_profile_item',
-            '#title' => t('Administer account'),
-            '#markup' => l(t('Edit this account at Recurly.'), recurly_account_edit_url($recurly_account)),
-          );
-        }
-
-        // If Hosted Payment Pages are enabled, give users a link to their own
-        // account management page if their account is active.
-        if (variable_get('recurly_hosted_payment_pages', FALSE) &&
-          $user->uid == $account->uid &&
-          $recurly_account->state == 'active') {
-          // Give users manage links for their own accounts.
-          $account->content['recurly_account']['manage_account_link'] = array(
-            '#type' => 'user_profile_item',
-            '#title' => t('Manage account'),
-            '#markup' => l(t('Update your subscription and billing information at Recurly.'), recurly_account_manage_url($recurly_account, user_access('edit own recurly account without login'))),
-          );
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_filter_info().
- */
-function recurly_filter_info() {
-  $filters = array();
-
-  $filters['recurly_subscription_plan_tokens'] = array(
-    'title' => t('Token replacement for Recurly subscription plans'),
-    'description' => t('Converts tokens to URLs and submit buttons redirecting to Recurly Hosted Payment Pages for subscription plans using the default account settings.'),
-    'tips callback' => 'recurly_filter_recurly_subscription_plan_tokens_tips',
-    'process callback' => 'recurly_filter_recurly_subscription_plan_tokens_process',
-    'cache' => FALSE,
-  );
-
-  return $filters;
-}
-
-/**
- * Tips callback: provides help for using Recurly subscription plan tokens.
- */
-function recurly_filter_recurly_subscription_plan_tokens_tips($filter, $format, $long) {
-  if ($long) {
-    return t('Recurly subscription plan tokens using the format [recurly-subscribe-url:<em>code</em>] and [recurly-subscribe-button:<em>code</em>] will be converted to URLs and buttons respectively. Replace <em>code</em> with a valid subscription plan code for your default Recurly account.');
-  }
-  else {
-    return t('Recurly subscription plan tokens will be converted to URLs / submit buttons.');
-  }
-}
-
-/**
- * Process callback: replaces Recurly subscription link and submit button tokens.
- */
-function recurly_filter_recurly_subscription_plan_tokens_process($text, $filter, $format, $langcode, $cache, $cache_id) {
-  // If the default account support Hosted Payment Pages and we detect the
-  // presence of what appears to be a valid token...
-  if (variable_get('recurly_hosted_payment_pages', FALSE) &&
-    strpos($text, '[recurly-subscribe-') !== FALSE) {
-    // Initialize the Recurly client with the default account.
-    recurly_client_initialize();
-
-    // Perform the token replacement using a callback that properly returns a
-    // URL or a rendered form.
-    $text = preg_replace_callback('/\[recurly-subscribe-(url|button):[A-Za-z0-9_\-\+]+\]/', '_recurly_filter_recurly_subscription_plan_tokens_process', $text);
-  }
-
-  return $text;
-}
-
-/**
- * Returns the replacement for a token match to preg_replace_callback().
- */
-function _recurly_filter_recurly_subscription_plan_tokens_process($matches) {
-  $plan = new stdClass;
-
-  // Extract the code from the token into a pseudo subscription plan object. We
-  // use the pseudo object to avoid the lag from attempting to load the whole
-  // object.
-  list(, $plan->plan_code) = explode(':', trim($matches[0], '[]'));
-
-  // Return the appropriate replacement based on the type of token.
-  switch ($matches[1]) {
-    case 'url':
-      return recurly_subscription_plan_purchase_url($plan);
-
-    case 'button':
-      return drupal_render(drupal_get_form('recurly_subscription_plan_purchase_redirect_form', $plan));
-  }
-}
-
-/**
  * Determines whether or not the specified point of integration is enabled.
  *
  * @param $integration
@@ -271,9 +115,7 @@
  *   - account: integration with Recurly accounts
  * @param $option
  *   The name of the option to check to see if it's enabled based on the type of
- *   integration, including:
- *   - account:
- *     - profile_display: show Recurly account information on user profiles
+ *   integration.
  *
  * @return
  *   Boolean indicating whether or not the point of integration is enabled.
@@ -662,104 +504,4 @@
   $subdomain = variable_get('recurly_subdomain', '');
 
   return url('https://' . $subdomain . '.recurly.com/' . $path);
-}
-
-/**
- * Returns an edit URL for a Recurly account.
- *
- * @param $recurly_account
- *   The account object returned by the Recurly client.
- *
- * @return
- *   The URL for the plan's edit page at Recurly.
- */
-function recurly_account_edit_url($recurly_account) {
-  return recurly_url('accounts/' . $recurly_account->account_code);
-}
-
-/**
- * Returns a front end management URL for a Recurly account.
- *
- * @param $recurly_account
- *   The account object returned by the Recurly client.
- * @param $hosted_login_token
- *   Boolean indicating whether or not to use the hosted login token in the URL
- *   if it's available in the account object; defaults to FALSE.
- *
- * @return
- *   The URL for the account's front end management page at Recurly; uses the
- *   hosted login token if specified and it's available.
- */
-function recurly_account_manage_url($recurly_account, $hosted_login_token = FALSE) {
-  // Return a URL using the hosted login token if available.
-  if ($hosted_login_token && !empty($recurly_account->hosted_login_token)) {
-    return recurly_url('account/' . $recurly_account->hosted_login_token);
-  }
-
-  return recurly_url('account');
-}
-
-/**
- * Returns an edit URL for a subscription plan.
- *
- * @param $plan
- *   The subscription plan object returned by the Recurly client.
- *
- * @return
- *   The URL for the plan's edit page at Recurly.
- */
-function recurly_subscription_plan_edit_url($plan) {
-  return recurly_url('company/plans/' . $plan->plan_code);
-}
-
-/**
- * Returns a Hosted Payment Page URL for the given subscription plan.
- *
- * @param $plan
- *   The subscription plan object returned by the Recurly client.
- * @param $settings
- *   An optional array of settings used to pre-populate the payment form.
- *   - first_name: the customer's first name
- *   - last_name: the customer's last name
- *   - email: the customer's e-mail address
- *
- * @return
- *   The URL for the plan's Hosted Payment Page at Recurly.
- */
-function recurly_subscription_plan_purchase_url($plan, $settings = NULL) {
-  $query = '';
-
-  if (!empty($settings)) {
-    $query = '?' . drupal_http_build_query($settings);
-  }
-
-  return recurly_url('subscribe/' . $plan->plan_code . $query);
-}
-
-/**
- * Returns a form with a submit button that redirects the user to the Hosted
- * Payment Page for the given plan.
- *
- * @param $plan
- *   A subscription plan object that contains at least a valid plan code.
- */
-function recurly_subscription_plan_purchase_redirect_form($form, &$form_state, $plan) {
-  $form['plan'] = array(
-    '#type' => 'value',
-    '#value' => $plan,
-  );
-
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Subscribe'),
-  );
-
-  return $form;
-}
-
-/**
- * Submit callback: redirect the user to the specified Hosted Payment Page.
- */
-function recurly_subscription_plan_purchase_redirect_form_submit($form, &$form_state) {
-  $form_state['redirect'] = recurly_subscription_plan_purchase_url($form_state['values']['plan']);
 }