diff --git a/tagclouds.module b/tagclouds.module
index 6b2f548..c398720 100644
--- a/tagclouds.module
+++ b/tagclouds.module
@@ -218,21 +218,21 @@ function tagclouds_get_tags($vids, $steps = 6, $size = 60, $display = NULL) {
     if (variable_get('tagclouds_language_separation', 0)) $query->condition('n.language', $language->language);
     $query->condition('td.vid', $vids);
     $query->condition('n.status', 1);
-    $query->groupBy('td.tid')->groupBy('td.vid')->groupBy('td.name');    
+    $query->groupBy('td.tid')->groupBy('td.vid')->groupBy('td.name');
     $query->groupBy('td.description HAVING count > 0');
     $query->orderBy('count', 'DESC');
     if ($size > 0) $query->range(0, $size);
     $result = $query->execute();
 
     foreach ($result as $tag) {
-      $tags[$tag->tid] = $tag;  
+      $tags[$tag->tid] = $tag;
     }
     if ($display == NULL) $display = variable_get('tagclouds_display_type', 'style');
     $tags = tagclouds_build_weighted_tags($tags, $steps);
-    
+
     cache_set($cache_name, $tags, 'cache_page', CACHE_TEMPORARY);
   }
-  
+
   return $tags;
 }
 
@@ -289,7 +289,7 @@ function tagclouds_sort_tags($tags, $sort = NULL) {
  else {
    list($sort, $order) = explode(',', $sort);
  }
-  
+
   switch ($sort) {
     case 'title':
       usort($tags, "_tagclouds_sort_by_title");
@@ -324,24 +324,42 @@ function _tagclouds_sort_by_count($a, $b) {
  * @ingroup themable
  */
 function theme_tagclouds_weighted(array $vars) {
-  $terms = $vars['terms'];  
- 
+  $terms = $vars['terms'];
+
   $output = '';
   $display = variable_get('tagclouds_display_type', 'style');
-  
+
+  if (module_exists('i18n_taxonomy')) {
+    $language = i18n_language();
+  }
+
   if ($display=='style') {
     foreach ($terms as $term) {
-      $output .= "<span class='tagclouds-term'>" . tagclouds_display_term_link_weight($term->name, $term->tid, $term->weight, $term->description) . "</span>\n";      
+      if (module_exists('i18n_taxonomy')) {
+        $term_name = i18n_taxonomy_term_name($term, $language->language);
+        $term_desc = tagclouds_i18n_taxonomy_term_description($term, $language->language);
+      } else {
+        $term_name = $term->name;
+        $term_desc = $term->description;
+      }
+      $output .= "<span class='tagclouds-term'>" . tagclouds_display_term_link_weight($term_name, $term->tid, $term->weight, $term_desc) . "</span>\n";
     }
   }
   else {
     foreach ($terms as $term) {
+      if (module_exists('i18n_taxonomy')) {
+        $term_name = i18n_taxonomy_term_name($term, $language->language);
+        $term_desc = tagclouds_i18n_taxonomy_term_description($term, $language->language);
+      } else {
+        $term_name = $term->name;
+        $term_desc = $term->description;
+      }
       $output .= "<span class='tagclouds-term'>";
       if ($term->count==1) {
-         $output .= tagclouds_display_node_link_count($term->name, $term->nid, $term->count, $term->description);
+         $output .= tagclouds_display_node_link_count($term_name, $term->nid, $term->count, $term_desc);
       }
       else {
-         $output .= tagclouds_display_term_link_count($term->name, $term->tid, $term->count, $term->description);
+         $output .= tagclouds_display_term_link_count($term_name, $term->tid, $term->count, $term_desc);
       }
       $output .= " (" . $term->count . ")" . "</span>\n";
     }
@@ -351,12 +369,12 @@ function theme_tagclouds_weighted(array $vars) {
 
 /**
  * Display Single Tag with Style
- * 
+ *
  */
 function tagclouds_display_term_link_weight($name, $tid, $weight, $description) {
   if ($term = taxonomy_term_load($tid)) {
-    $uri = entity_uri('taxonomy_term', $term);    
-	$uri['options']['attributes']['class'][] = 'tagclouds';
+    $uri = entity_uri('taxonomy_term', $term);
+    $uri['options']['attributes']['class'][] = 'tagclouds';
     $uri['options']['attributes']['class'][] = 'level' . $weight;
     $uri['options']['attributes']['rel'] = 'tag';
     $uri['options']['attributes']['title'] = $description;
@@ -366,7 +384,7 @@ function tagclouds_display_term_link_weight($name, $tid, $weight, $description)
 
 /**
  * Display Single Tag with Style
- * 
+ *
  */
 function tagclouds_display_node_link_count($name, $nid, $count, $description) {
   $node_info = entity_get_info('taxonomy_term');
@@ -399,15 +417,27 @@ function tagclouds_display_term_link_count($name, $tid, $count, $description) {
  * @ingroup themable
  */
 function theme_tagclouds_list_box(array $vars) {
+  if (module_exists('i18n_taxonomy')) {
+    $language = i18n_language();
+  }
+
   $vocabulary = $vars['vocabulary'];
   $tags = $vars['tags'];
 
+  if (module_exists('i18n_taxonomy')) {
+    $voc_name = i18n_taxonomy_vocabulary_name($vocabulary, $language->language);
+    $voc_desc = tagclouds_i18n_taxonomy_vocabulary_description($vocabulary, $language->language);
+  } else {
+    $voc_name = $vocabulary->name;
+    $voc_desc = $vocabulary->description;
+  }
+
   $content = theme('tagclouds_weighted', array('terms' => $tags));
   $output = '';
   if ($vocabulary->description) {
-    $content = '<h2></h2><div>' . $vocabulary->description . '</div>' . $content;
+    $content = '<div>' . $voc_desc . '</div>' . $content;
   }
-  $output .= '<h2>' . $vocabulary->name . '</h2><div>' . $content . '</div>';
+  $output .= '<h2>' . $voc_name . '</h2><div>' . $content . '</div>';
 
   return $output;
 }
@@ -431,7 +461,7 @@ function tagclouds_block_info() {
 function tagclouds_block_view($delta = '') {
   $block = array();
   if ($voc = taxonomy_vocabulary_load($delta)) {
-    $blocks['subject'] = variable_get('tagclouds_block_title_' . $delta, t('Tags in @voc', 
+    $blocks['subject'] = variable_get('tagclouds_block_title_' . $delta, t('Tags in @voc',
             array('@voc' => $voc->name)));
     $tags = tagclouds_get_tags(array($delta), variable_get('tagclouds_levels', 6), variable_get('tagclouds_block_tags_' . $delta, 12));
 
@@ -451,7 +481,7 @@ function tagclouds_block_view($delta = '') {
  */
 function tagclouds_block_configure($delta = '') {
   $form = array();
-  
+
   $form['tags'] = array(
     '#type' => 'textfield',
     '#title' => t('Tags to show'),
@@ -484,4 +514,20 @@ function tagclouds_theme() {
  */
 function tagclouds_vocs_load($ids){
   return explode(',',$ids);
-}
\ No newline at end of file
+}
+
+/**
+ * Get localized term description unfiltered.
+ * Adapted from i18n_taxonomy_term_name(). Should moved to i18n.
+ */
+function tagclouds_i18n_taxonomy_term_description($term, $langcode = NULL) {
+  return i18n_taxonomy_vocabulary_mode($term->vid, I18N_MODE_LOCALIZE) ? i18n_string(array('taxonomy', 'term', $term->tid, 'description'), $term->description, array('langcode' => $langcode, 'sanitize' => FALSE)) : $term->description;
+}
+
+/**
+ * Get localized vocabulary description.
+ * Adapted from i18n_taxonomy_vocabulary_name(). Should moved to i18n.
+ */
+function tagclouds_i18n_taxonomy_vocabulary_description($vocabulary, $langcode = NULL) {
+  return i18n_object_langcode($vocabulary) ? $vocabulary->description : i18n_string(array('taxonomy', 'vocabulary', $vocabulary->vid, 'description'), $vocabulary->description, array('langcode' => $langcode));
+}
