diff --git a/includes/recurly.admin.inc b/includes/recurly.admin.inc
index dcd66e9..9f93af0 100644
--- a/includes/recurly.admin.inc
+++ b/includes/recurly.admin.inc
@@ -5,7 +5,6 @@
  * Recurly settings forms and administration page callbacks.
  */
 
-
 /**
  * Returns the site-wide Recurly settings form.
  */
@@ -14,20 +13,9 @@ function recurly_settings_form($form, &$form_state) {
   $form['account'] = array(
     '#type' => 'fieldset',
     '#title' => t('Default account settings'),
-    '#description' => t('Configure these settings based on your Company Settings and API Credentials settings in the Recurly administration interface.'),
+    '#description' => t('Configure this information based on the "API Credentials" section within the Recurly administration interface.'),
     '#collapsible' => TRUE,
   );
-  $form['account']['recurly_subdomain'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subdomain'),
-    '#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),
-  );
   $form['account']['recurly_api_key'] = array(
     '#type' => 'textfield',
     '#title' => t('API Key'),
@@ -39,6 +27,17 @@ function recurly_settings_form($form, &$form_state) {
     '#description' => t('Optional: Recurly Private Key - enter this if needed for transparent post/recurly.js verifications.'),
     '#default_value' => variable_get('recurly_private_key', ''),
   );
+  $form['account']['recurly_subdomain'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Subdomain'),
+    '#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(
@@ -123,14 +122,30 @@ function recurly_subscription_plans_overview() {
       );
     }
 
-    $rows[] = array(
-      t('@name <small>(Plan code: @code)</small>', array('@name' => $plan->name, '@code' => $plan->plan_code)) . $description,
-      t('@unit_price per @interval_length @interval_unit', array('@unit_price' => number_format($plan->unit_amount_in_cents / 100, 2), '@interval_length' => $plan->plan_interval_length, '@interval_unit' => $plan->plan_interval_unit)),
-      t('@setup_fee', array('@setup_fee' => number_format($plan->setup_fee_in_cents / 100, 2))),
-      t('@trial_length @trial_unit', array('@trial_length' => $plan->trial_interval_length, '@trial_unit' => $plan->trial_interval_unit)),
-      format_date($plan->created_at),
-      theme('links', array('links' => $operations, 'attributes' => array('class' => array('links', 'inline')))),
-    );
+    // TODO: Remove reset() calls once Recurly_CurrencyList implements Iterator.
+    // See https://github.com/recurly/recurly-client-php/issues/37
+    $unit_amounts = in_array('Iterator', class_implements($plan->unit_amount_in_cents)) ? $plan->unit_amount_in_cents : reset($plan->unit_amount_in_cents);
+    $setup_fees = in_array('Iterator', class_implements($plan->setup_fee_in_cents)) ? $plan->setup_fee_in_cents : reset($plan->setup_fee_in_cents);
+
+    $row = array();
+    $row[] = check_plain($plan->name) . ' <small>(' . t('Plan code: @code', array('@code' => $plan->plan_code)) . ')</small>' . $description;
+
+    $amount_strings = array();
+    foreach ($unit_amounts as $unit_amount) {
+      $amount_strings[] = t('@unit_price per @interval_length @interval_unit', array('@unit_price' => number_format($unit_amount->amount(), 2) . ' ' . $unit_amount->currencyCode, '@interval_length' => $plan->plan_interval_length, '@interval_unit' => $plan->plan_interval_unit));
+    }
+    $row[] = implode('<br />', $amount_strings);
+
+    $setup_strings = array();
+    foreach ($setup_fees as $setup_fee) {
+      $setup_strings[] = check_plain(number_format($unit_amount->amount(), 2) . ' ' . $unit_amount->currencyCode);
+    }
+    $row[] = implode('<br />', $setup_strings);
+
+    $row[] = t('@trial_length @trial_unit', array('@trial_length' => $plan->trial_interval_length, '@trial_unit' => $plan->trial_interval_unit));
+    $row[] = format_date($plan->created_at->format('U'));
+    $row[] = theme('links', array('links' => $operations, 'attributes' => array('class' => array('links', 'inline'))));
+    $rows[] = $row;
   }
 
   if (empty($rows)) {
diff --git a/recurly.module b/recurly.module
index 158dc8e..8e9e5d4 100644
--- a/recurly.module
+++ b/recurly.module
@@ -326,7 +326,7 @@ function recurly_process_push_notification($key, $subdomain = NULL) {
 
     // Retrieve the POST XML and create a notification object from it.
     $post_xml = file_get_contents('php://input');
-    $notification = new RecurlyPushNotification($post_xml);
+    $notification = new Recurly_PushNotification($post_xml);
 
     // Bail if this is an empty or invalid notification.
     if (empty($notification) || empty($notification->type)) {
@@ -343,7 +343,13 @@ function recurly_process_push_notification($key, $subdomain = NULL) {
     if ((recurly_integration_option_enabled('account', 'push_create') || recurly_integration_option_enabled('account', 'push_update')) &&
       in_array($notification->type, array('new_account_notification', 'canceled_account_notification', 'billing_info_updated_notification'))) {
       // Retrieve the full account record from Recurly.
-      $recurly_account = RecurlyAccount::getAccount($notification->account->account_code);
+      try {
+        $recurly_account = Recurly_Account::get($notification->account->account_code);
+      }
+      catch (Recurly_NotFoundError $e) {
+        drupal_set_message(t('Account not found'));
+        watchdog_exception('recurly', $e);
+      }
 
       // If we couldn't get anything, just attempt to use the submitted data.
       if (empty($recurly_account)) {
@@ -406,10 +412,15 @@ function recurly_client_initialize($settings = NULL) {
 
   // If we can find a path in the libraries directory to the Recurly PHP client
   // library...
-  if (($path = libraries_get_path('recurly')) && file_exists($path . '/library/recurly.php')) {
+  $path = libraries_get_path('recurly');
+  if (($path = libraries_get_path('recurly')) && file_exists($path . '/lib/recurly.php')) {
     // Include the library files and configure authentication.
-    require_once $path . '/library/recurly.php';
-    RecurlyClient::SetAuth($settings['api_key'], $settings['subdomain'], $settings['private_key']);
+    require_once $path . '/lib/recurly.php';
+
+    // Required for the API
+    Recurly_Client::$apiKey = $settings['api_key'];
+    // Optional for Recurly.js:
+    Recurly_js::$privateKey = $settings['private_key'];
   }
   else {
     watchdog('recurly', 'Could not find the Recurly PHP client library in sites/all/libraries/recurly.', array(), WATCHDOG_ERROR);
@@ -504,7 +515,7 @@ function recurly_account_load($conditions = array(), $local = FALSE) {
 
   // Attempt to load the full account from Recurly.
   try {
-    $recurly_account = RecurlyAccount::getAccount($data->account_code);
+    $recurly_account = Recurly_Account::get($data->account_code);
 
     // Return the orphaned data if no account was found at Recurly.
     if (empty($recurly_account)) {
@@ -554,14 +565,15 @@ function recurly_account_save($recurly_account, $uid, $data = array(), $export =
   // record that does not match a record at Recurly.
   if ($export) {
     // Check to see if the record already exists.
-    $remote_account = RecurlyAccount::getAccount($recurly_account->account_code);
+    $remote_account = Recurly_Account::getAccount($recurly_account->account_code);
 
     // If it does, then update the account.
     if (!empty($remote_account)) {
       try {
         $recurly_account->update();
       }
-      catch (Exception $e) {
+      catch (Recurly_NotFoundError $e) {
+        watchdog_exception('recurly', $e);
         return FALSE;
       }
     }
@@ -570,7 +582,8 @@ function recurly_account_save($recurly_account, $uid, $data = array(), $export =
       try {
         $recurly_account->create();
       }
-      catch (Exception $e) {
+      catch (Recurly_NotFoundError $e) {
+        watchdog_exception('recurly', $e);
         return FALSE;
       }
     }
@@ -621,7 +634,7 @@ function recurly_subscription_plans($reset_cache = FALSE) {
   // If we haven't specified a cache reset, attempt to retrieve plans from the
   // cache before getting them from Recurly.
   if (!$reset_cache) {
-    $plans = cache_get('recurly-subscription-plans:' . RecurlyClient::$subdomain);
+    $plans = cache_get('recurly-subscription-plans:' . variable_get('recurly_subdomain', ''));
 
     // If plans were found, return them now.
     if (!empty($plans->data)) {
@@ -630,11 +643,11 @@ function recurly_subscription_plans($reset_cache = FALSE) {
   }
 
   // Retrieve the subscription plans from Recurly.
-  $plans = RecurlyPlan::getPlans();
+  $plans = Recurly_PlanList::get();
 
   // If data was actually returned, cache it for the current subdomain.
   if (!empty($plans)) {
-    cache_set('recurly-subscription-plans:' . RecurlyClient::$subdomain, $plans, 'cache', CACHE_TEMPORARY);
+    cache_set('recurly-subscription-plans:' . variable_get('recurly_subdomain', ''), $plans, 'cache', CACHE_TEMPORARY);
   }
 
   return $plans;
@@ -646,7 +659,7 @@ function recurly_subscription_plans($reset_cache = FALSE) {
  */
 function recurly_url($path = '') {
   // Generate the subdomain to use for the current account.
-  $subdomain = RecurlyClient::$subdomain;
+  $subdomain = variable_get('recurly_subdomain', '');
 
   return url('https://' . $subdomain . '.recurly.com/' . $path);
 }
