diff --git a/components/button.inc b/components/button.inc
new file mode 100644
index 0000000..2abe422
--- /dev/null
+++ b/components/button.inc
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * @file
+ * submit button component
+ * this button can be placed anywhere, and will either perform as a submit
+ * or next page button depending on the action of the main submit/next page
+ * button provided by the webform module
+ */
+
+/**
+ * Implements _webform_defaults_component().
+ */
+function _webform_defaults_button() {
+  $defaults = array(
+    'name' => '',
+    'form_key' => NULL,
+    'pid' => 0,
+    'weight' => 0,
+    'value' => '',
+    'mandatory' => 0,
+    'extra' => array(),
+    );
+  return $defaults;
+}
+
+/**
+ * Implements _webform_render_component().
+ */
+function _webform_render_button($component, $value = NULL, $filter = TRUE) {
+  global $register_fields;
+
+  $element = array(
+    '#type' => 'submit',
+    '#value' => $component['name'],
+    '#weight' => $component['weight'], 
+    );
+
+  return $element;
+}
+
+/**
+ * Add the value of any button components to the list of valid ops
+ * @see webform_client_form_pages()
+ *
+ * @param array $components
+ *  An array of webform components
+ *
+ * @return arra
+ *  An array of button component values
+ */
+
+/**
+ *
+ */
+function _webform_button_component_ops($components) {
+  $button_ops = array();
+  foreach ($components as $component) {
+    if ($component['type'] == 'button') {
+      $button_ops[] = $component['name'];
+    }
+  }
+  return $button_ops;
+}
diff --git a/webform.module b/webform.module
index 09397df..bdac4d1 100644
--- a/webform.module
+++ b/webform.module
@@ -712,6 +712,16 @@ function webform_element_info() {
  */
 function webform_webform_component_info() {
   return array(
+    'button' => array(
+      'label' => t('Button'),
+      'description' => t('An additional submit/next page button.'),
+      'file' => 'components/button.inc',
+      'features' => array(
+        'title_display' => FALSE,
+        'title_inline' => FALSE,
+        'conditional' => FALSE,
+      ),
+    ),
     'date' => array(
       'label' => t('Date'),
       'description' => t('Presents month, day, and year fields.'),
@@ -2101,7 +2111,8 @@ function webform_client_form_pages($form, &$form_state) {
   // Check for a multi-page form that is not yet complete.
   $submit_op = !empty($form['actions']['submit']['#value']) ? $form['actions']['submit']['#value'] : t('Submit');
   $draft_op = !empty($form['actions']['draft']['#value']) ? $form['actions']['draft']['#value'] : t('Save Draft');
-  if (!in_array($form_state['values']['op'], array($submit_op, $draft_op))) {
+  $button_ops = _webform_button_component_ops($form_state['storage']['component_tree']['children']);
+  if (!in_array($form_state['values']['op'], array_merge(array($submit_op, $draft_op), $button_ops))) {
     // Checkboxes need post-processing to maintain their values.
     _webform_client_form_submit_process($node, $form_state['values']['submitted'], array('select', 'grid'));
 
