diff --git a/campaignmonitor.module b/campaignmonitor.module
index 6bca928..d324b09 100644
--- a/campaignmonitor.module
+++ b/campaignmonitor.module
@@ -370,17 +370,14 @@ function campaignmonitor_subscribe_form($form, &$form_state, $list_id) {
     '#type' => 'submit',
     '#value' => t('Subscribe'),
   );
-  $form['#validate'][] = 'campaignmonitor_subscribe_form_validate';
 
   return $form;
 }
 
 /**
- * Subscribe form validation handler, which calls the API. It's done in the
- * validation handler to provide better user feedback on failure.
- *
+ * Subscribe form submit handler, which calls the API.
  */
-function campaignmonitor_subscribe_form_validate($form, &$form_state) {
+function campaignmonitor_subscribe_form_submit($form, &$form_state) {
   // Get a campaign monitor object.
   $cm = CampaignMonitor::getConnector();
 
@@ -415,7 +412,8 @@ function campaignmonitor_subscribe_form_validate($form, &$form_state) {
   // Update subscriber information or add new subscriber to the list.
   if (!$cm->subscribe($list_id, $email, $name, $custom_fields)) {
     form_set_error('', t('You were not subscribed to the list, please try again.'));
-    return FALSE;
+    $form_state['redirect'] = FALSE;
+    return;
   }
 
   $lists = $cm->getLists();
@@ -432,4 +430,4 @@ function campaignmonitor_subscribe_form_validate($form, &$form_state) {
 function campaignmonitor_is_list_enabled($list_id) {
   $list_options = variable_get('campaignmonitor_list_' . $list_id, FALSE);
   return isset($list_options['status']['enabled']) ? $list_options['status']['enabled'] : 1;
-}
\ No newline at end of file
+}
