diff --git a/i18n_taxonomy/i18n_taxonomy.module b/i18n_taxonomy/i18n_taxonomy.module
index 6ff5bec..a383832 100644
--- a/i18n_taxonomy/i18n_taxonomy.module
+++ b/i18n_taxonomy/i18n_taxonomy.module
@@ -144,7 +144,10 @@ function i18n_taxonomy_menu_alter(&$items) {
     $items['taxonomy/term/%taxonomy_term']['file'] = 'i18n_taxonomy.pages.inc';
     $items['taxonomy/term/%taxonomy_term']['module'] = 'i18n_taxonomy';
   }
-
+  //translate vocabulary in menu
+  $items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name']['title callback'] = 'i18n_taxonomy_vocabulary_name';
+  $items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name']['title arguments'] = array(3, i18n_language()->language);
+  
   // Localize autocomplete
   $items['taxonomy/autocomplete']['page callback'] = 'i18n_taxonomy_autocomplete_field';
   $items['taxonomy/autocomplete']['file'] = 'i18n_taxonomy.pages.inc';
@@ -399,6 +402,7 @@ function i18n_taxonomy_i18n_translate_path($path) {
   }
 }
 
+
 /**
  * Implements hook_theme().
  */
@@ -791,6 +795,145 @@ function i18n_taxonomy_form_term_submit($form, &$form_state) {
   }
 }
 
+
+/** copied from taxonomy module and extended
+ * Submit handler for terms overview form.
+ *
+ * Rather than using a textfield or weight field, this form depends entirely
+ * upon the order of form elements on the page to determine new weights.
+ *
+ * Because there might be hundreds or thousands of taxonomy terms that need to
+ * be ordered, terms are weighted from 0 to the number of terms in the
+ * vocabulary, rather than the standard -10 to 10 scale. Numbers are sorted
+ * lowest to highest, but are not necessarily sequential. Numbers may be skipped
+ * when a term has children so that reordering is minimal when a child is
+ * added or removed from a term.
+ *
+ * @see taxonomy_overview_terms()
+ */
+
+function i18n_taxonomy_taxonomy_overview_terms_submit($form, &$form_state) {
+  if ($form_state['triggering_element']['#value'] == t('Reset to alphabetical')) {
+    // Execute the reset action.
+    if ($form_state['values']['reset_alphabetical'] === TRUE) {
+      return taxonomy_vocabulary_confirm_reset_alphabetical_submit($form, $form_state);
+    }
+    // Rebuild the form to confirm the reset action.
+    $form_state['rebuild'] = TRUE;
+    $form_state['confirm_reset_alphabetical'] = TRUE;
+    return;
+  }
+  //
+  // Sort term order based on weight.
+  uasort($form_state['values'], 'drupal_sort_weight');
+  $vocabulary = $form['#vocabulary'];
+  $vocabulary = i18n_string_object_translate('taxonomy_vocabulary', $form['#vocabulary'], array('langcode' => $vocabulary->language));
+  $hierarchy = 0; // Update the current hierarchy type as we go.
+
+  $changed_terms = array();
+  $tree = taxonomy_get_tree($vocabulary->vid);
+
+  if (empty($tree)) {
+    return;
+  }
+
+  // Build a list of all terms that need to be updated on previous pages.
+  $weight = 0;
+  $term = (array) $tree[0];
+  while ($term['tid'] != $form['#first_tid']) {
+    if ($term['parents'][0] == 0 && $term['weight'] != $weight) {
+      $term['parent'] = $term['parents'][0];
+      $term['weight'] = $weight;
+      $changed_terms[$term['tid']] = $term;
+    }
+    $weight++;
+    $hierarchy = $term['parents'][0] != 0 ? 1 : $hierarchy;
+    $term = (array) $tree[$weight];
+  }
+
+  // Renumber the current page weights and assign any new parents.
+  $level_weights = array();
+  foreach ($form_state['values'] as $tid => $values) {
+    if (isset($form[$tid]['#term'])) {
+      $term = $form[$tid]['#term'];
+      // Give terms at the root level a weight in sequence with terms on previous pages.
+      if ($values['parent'] == 0 && $term['weight'] != $weight) {
+        $term['weight'] = $weight;
+        $changed_terms[$term['tid']] = $term;
+      }
+      // Terms not at the root level can safely start from 0 because they're all on this page.
+      elseif ($values['parent'] > 0) {
+        $level_weights[$values['parent']] = isset($level_weights[$values['parent']]) ? $level_weights[$values['parent']] + 1 : 0;
+        if ($level_weights[$values['parent']] != $term['weight']) {
+          $term['weight'] = $level_weights[$values['parent']];
+          $changed_terms[$term['tid']] = $term;
+        }
+      }
+      // Update any changed parents.
+      if ($values['parent'] != $term['parent']) {
+        $term['parent'] = $values['parent'];
+        $changed_terms[$term['tid']] = $term;
+      }
+      $hierarchy = $term['parent'] != 0 ? 1 : $hierarchy;
+      $weight++;
+    }
+  }
+
+  // Build a list of all terms that need to be updated on following pages.
+  for ($weight; $weight < count($tree); $weight++) {
+    $term = (array) $tree[$weight];
+    if ($term['parents'][0] == 0 && $term['weight'] != $weight) {
+      $term['parent'] = $term['parents'][0];
+      $term['weight'] = $weight;
+      $changed_terms[$term['tid']] = $term;
+    }
+    $hierarchy = $term['parents'][0] != 0 ? 1 : $hierarchy;
+  }
+
+  // Save all updated terms.
+  foreach ($changed_terms as $changed) {
+    $term = (object) $changed;
+    // Update term_hierachy and term_data directly since we don't have a
+    // fully populated term object to save.
+    db_update('taxonomy_term_hierarchy')
+      ->fields(array('parent' => $term->parent))
+      ->condition('tid', $term->tid, '=')
+      ->execute();
+
+    db_update('taxonomy_term_data')
+      ->fields(array('weight' => $term->weight))
+      ->condition('tid', $term->tid, '=')
+      ->execute();
+  }
+
+  // Update the vocabulary hierarchy to flat or single hierarchy.
+  if ($vocabulary->hierarchy != $hierarchy) {
+    $vocabulary->hierarchy = $hierarchy;
+    taxonomy_vocabulary_save($vocabulary);
+  }
+  drupal_set_message(t('The configuration options have been saved.'));
+}
+
+/**copied from taxonomy module
+ * Submit handler for vocabularies overview. Updates changed vocabulary weights.
+ *
+ * @see taxonomy_overview_vocabularies()
+ */
+
+function i18n_taxonomy_taxonomy_overview_vocabularies_submit($form, &$form_state) {
+  foreach ($form_state['values'] as $vid => $weight) {
+    if (is_numeric($vid) && $form[$vid]['#vocabulary']->weight != $form_state['values'][$vid]['weight']) {
+      $form[$vid]['#vocabulary']->weight = $form_state['values'][$vid]['weight'];
+      //added code:
+      $vocabulary = $form[$vid]['#vocabulary'];
+      $vocabulary = i18n_string_object_translate('taxonomy_vocabulary', $vocabulary, array('langcode' => $vocabulary->language));
+      taxonomy_vocabulary_save($vocabulary);
+    }
+  }
+  drupal_set_message(t('The configuration options have been saved.'));
+}
+
+
 /**
  * Implements hook_form_alter().
  *
@@ -801,8 +944,13 @@ function i18n_taxonomy_form_term_submit($form, &$form_state) {
 function i18n_taxonomy_form_alter(&$form, $form_state, $form_id) {
   switch ($form_id) {
     case 'taxonomy_overview_vocabularies':
+      $form['#submit'][] = 'i18n_taxonomy_taxonomy_overview_vocabularies_submit';
       $vocabularies = taxonomy_get_vocabularies();
-      foreach ($vocabularies as $vocabulary) {
+      foreach ($vocabularies as $vocabulary) { 
+        //added the following 3 lines
+        $vocabulary = i18n_string_object_translate('taxonomy_vocabulary', $vocabulary);
+        $form[$vocabulary->vid]['#vocabulary'] = $vocabulary;
+        $form[$vocabulary->vid]['name'] = array('#markup' => check_plain($vocabulary->name)); 
         if (i18n_object_langcode($vocabulary)) {
           $form[$vocabulary->vid]['name']['#markup'] .= ' ('. i18n_language_name($vocabulary->language) .')';
         }
@@ -810,9 +958,28 @@ function i18n_taxonomy_form_alter(&$form, $form_state, $form_id) {
       break;
 
     case 'taxonomy_overview_terms':
-      // We check for vocabulary object first, because when confirming alphabetical ordering it uses the same form
+        $form['#submit'][] = 'i18n_taxonomy_taxonomy_overview_terms_submit';
+       // We check for vocabulary object first, because when confirming alphabetical ordering it uses the same form
+       //added the following lines:
+       $vocabulary = i18n_string_object_translate('taxonomy_vocabulary', $form['#vocabulary']);
+       $form['#vocabulary'] = $vocabulary;
+       $term_deltas = array();
+       $tree = taxonomy_get_tree($vocabulary->vid);
+       foreach ($tree as $key => $term) {
+ 
+         $term_deltas[$term->tid] = isset($term_deltas[$term->tid]) ? $term_deltas[$term->tid] + 1 : 0;
+         $key = 'tid:' . $term->tid . ':' . $term_deltas[$term->tid];
+         $term = i18n_taxonomy_localize_terms($term);
+         $term->parent = $form[$key]['#term']['parent'];
+         unset($term->parents);
+         $form[$key]['#term'] =  (array) $term;
+         $form[$key]['view'] = array('#type' => 'link', '#title' => $term->name, '#href' => "taxonomy/term/$term->tid");
+       }
+       //end of added lines
+       
       if (!empty($form['#vocabulary']) && i18n_taxonomy_vocabulary_mode($form['#vocabulary']->vid) & I18N_MODE_TRANSLATE) {
         foreach (element_children($form) as $key) {
+          
           if (isset($form[$key]['#term']) && ($lang = i18n_object_langcode($form[$key]['#term']))) {
             $form[$key]['view']['#suffix'] = ' ('. i18n_language_name($lang) .')';
           }
