diff --git multistep.module multistep.module
index c859ab5..66b22b2 100644
--- multistep.module
+++ multistep.module
@@ -337,6 +337,10 @@ function multistep_form_alter(&$form, &$form_state, $form_id) {
   }
   // This is removed in favor of the custom ones above
   unset($form['buttons']['submit']);
+  // We need to remove #redirect to prevent redirection to the profile main page
+  if (module_exists('content_profile')) {
+    unset($form['#redirect']);
+  }
 }
 
 /**
@@ -371,6 +375,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);
   $type = $form_state['values']['type'];
@@ -395,8 +400,16 @@ function multistep_submit($form, &$form_state, $action) {
   }
   // If there are steps left, go to the next (or previous) one.
   if ($goto_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'] = array('node/' . $nid . '/edit/' . $goto_step, (isset($_REQUEST['redirect']) ? array('redirect' => $_REQUEST['redirect']) : array()));
   }
+  }
   else {
     // If this was the last step, then exit the form. If there was a destination parameter, honor it now.
     if (isset($_REQUEST['redirect'])) {
@@ -451,6 +464,14 @@ function _multistep_get_current_step($type) {
   && arg(3) <= variable_get('multistep_steps_' . $type, 0)) {
     $step = arg(3);
   }
+  // workaround for content profile
+  elseif (module_exists('content_profile')
+  && arg(0) == 'user' && is_numeric(arg(1)) && arg(2) == 'profile'
+  && arg(3) == $type
+  && is_numeric(arg(4)) && arg(4) >=1
+  && arg(4) <= variable_get('multistep_steps_' . $type, 0)) {
+    $step = arg(4);
+  }
   // Revert back if user does not have permissions to switch display.
   if ($step == 0 && !user_access('toggle multistep')
   && variable_get('multistep_default_' . $type, 'multistep') == 'multistep') {
