diff --git multistep.module multistep.module
index aed4aea..d4ad8dd 100644
--- multistep.module
+++ multistep.module
@@ -230,6 +230,9 @@ function multistep_form_alter(&$form, &$form_state, $form_id) {
     }
     // This is removed in favor of the custom ones above
     unset($form['buttons']['submit']);
+    if (module_exists('content_profile')) {
+      unset($form['#redirect']);
+    }
   }
 }
 
@@ -265,6 +268,7 @@ function multistep_done($form, &$form_state) {
  * Submit the form and redirect to the next appropriate step.
  */
 function multistep_submit($form, &$form_state, $action) {
+  global $user;
   // Submit the actual values.
   node_form_submit($form, $form_state);
   
@@ -285,9 +289,18 @@ function multistep_submit($form, &$form_state, $action) {
   }
 
   // If there are steps left, go to the next (or previous) one.
+  // workaround for content_profile module
   if ($step <= variable_get('multistep_steps_' . $type, 0)) {
+    if (module_exists('content_profile')) {
+      $content_profile_types = content_profile_get_types();
+    }
+    if (isset($content_profile_types[$type])) {
+      $form_state['redirect'] = 'user/' . $user->uid . '/profile/' . $type . '/' . $step;
+    }
+    else {
     $form_state['redirect'] = 'node/' . $form_state['nid'] . '/edit/' . $step;
   }
+  }
   else {
     // If this was the last step, then exit the form.
     $form_state['redirect'] = 'node/' . $form_state['nid'];
@@ -318,5 +331,13 @@ function _multistep_get_current_step($form_type) {
   && arg(3) <= variable_get('multistep_steps_' . $form_type, 0)) {
     $current_step = arg(3);
   }
+  // workaround for content_profile module
+  if (module_exists('content_profile')
+  && arg(0) == 'user' && is_numeric(arg(1)) && arg(2) == 'profile'
+  && arg(3) == $form_type
+  && is_numeric(arg(4)) && arg(4) >=1
+  && arg(4) <= variable_get('multistep_steps_' . $form_type, 0)) {
+    $current_step = arg(4);
+  }
   return $current_step;
 }
