diff --git a/includes/webform.submissions.inc b/includes/webform.submissions.inc
index 14316fc..ce3d572 100644
--- a/includes/webform.submissions.inc
+++ b/includes/webform.submissions.inc
@@ -41,15 +41,15 @@ function webform_submission_data($node, $submitted) {
 /**
  * Given set of $form_state values, prepare a psuedo-submission.
  */
-function webform_submission_create($node, $account, $form_state) {
+function webform_submission_create($node, $account, $form_state, $is_preview = FALSE) {
   $submission = (object) array(
     'nid' => $node->nid,
     'uid' => $account->uid,
     'submitted' => REQUEST_TIME,
     'remote_addr' => ip_address(),
     'is_draft' => TRUE,
-    'preview' => FALSE,
-    'serial' => _webform_submission_serial_next_value($node->nid),
+    'preview' => $is_preview,
+    'serial' => _webform_submission_serial_next_value($node->nid, !$is_preview),
     'data' => webform_submission_data($node, $form_state['values']['submitted']),
   );
   drupal_alter('webform_submission_create', $submission, $node, $account, $form_state);
diff --git a/webform.module b/webform.module
index 6027bbf..d950a31 100644
--- a/webform.module
+++ b/webform.module
@@ -2318,8 +2318,7 @@ function webform_client_form($form, &$form_state, $node, $submission = FALSE, $i
 
     // Add the preview if needed.
     if ($node->webform['preview'] && $page_num === $page_count) {
-      $preview_submission = webform_submission_create($node, $user, $form_state);
-      $preview_submission->preview = TRUE;
+      $preview_submission = webform_submission_create($node, $user, $form_state, TRUE);
       $preview_message = $node->webform['preview_message'];
       $submit_button_text = empty($node->webform['submit_text']) ? t('Submit') : t($node->webform['submit_text']);
       if (strlen(trim(strip_tags($preview_message))) === 0) {
