--- sites\all\modules\node_form_rearrange\node_form_rearrange_1.module
+++ sites\all\modules\node_form_rearrange\node_form_rearrange.module
@@ -52,18 +52,66 @@
   ORDER BY v.weight, v.name", 'v', 'vid'), $form['type']['#value']);
       //loop through vocabularies, moving their form element out of the taxonomy fieldset
       while ($vocabulary = db_fetch_object($vocabularies)) {
+
+        $use_vertical_tabs = FALSE;
+
+        // check if current vocabulary should integrate with vertical tabs
+        if (module_exists('vertical_tabs')) {
+          $vertical_tabs_forms = variable_get('vertical_tabs_forms', NULL);
+          if ($vertical_tabs_forms[$form_id]["vocab_$vocabulary->vid"]) {
+            $use_vertical_tabs = TRUE;
+          }
+        }
+
+        /* awkward workaround for content-type settings form.
+         * vertical_tabs.module builds a sample node form to discover
+         * eligible fieldsets, so we must account for this.
+         * @see vertical_tabs_form_node_type_form_alter()
+         * @see vertical_tabs_add_node_type_options()
+         */
+        if ( arg(2) == 'node-type' ) {
+          $use_vertical_tabs = TRUE;
+        }
+
+        // taxonomy fields need to be inside fieldsets for vertical tabs
+        if ($use_vertical_tabs) {
+          // create fieldset for vocab
+          $form["vocab_$vocabulary->vid"] = array(
+            '#type'  => 'fieldset',
+            '#title' => $vocabulary->name,
+            '#group' => 'additional_settings',
+            '#attached' => array(
+              'js' => array(
+                'vertical-tabs' => drupal_get_path('module', 'node_form_rearrange') . '/node_form_rearrange.js',
+              ),
+            ),
+          );
+        }
+
       //check to see if non-tag vocabularies exist
       if (isset($form['taxonomy'][$vocabulary->vid])) {
           $field = $form['taxonomy'][$vocabulary->vid];
           unset($form['taxonomy'][$vocabulary->vid]);
+
+          if ($use_vertical_tabs) {
+            $form["vocab_$vocabulary->vid"]["taxonomy_field_$vocabulary->vid"] = $field;
+          }
+          else {
           $form["taxonomy_field_$vocabulary->vid"] = $field;
         }
+        }
         //check to see if tag vocabularies exist
         if (isset($form['taxonomy']['tags'][$vocabulary->vid])) {
           $field = $form['taxonomy']['tags'][$vocabulary->vid];
           unset($form['taxonomy']['tags'][$vocabulary->vid]);
+
+          if ($use_vertical_tabs) {
+            $form["vocab_$vocabulary->vid"]["taxonomy_field_tags_$vocabulary->vid"] = $field;
+          }
+          else {
           $form["taxonomy_field_tags_$vocabulary->vid"] = $field;
         }
+        }
         // Direct copy from content.module, for setting the weight of fields based on arrangement in admin/content/node-type/[content type]/fields
         $type = content_types($form['type']['#value']);
         foreach ($type['extra'] as $key => $value) {
