Index: /branches/release-34/lib/MT/CMS/Dashboard.pm
===================================================================
--- /branches/release-34/lib/MT/CMS/Dashboard.pm (revision 1738)
+++ /branches/release-34/lib/MT/CMS/Dashboard.pm (revision 1857)
@@ -379,4 +379,58 @@
 }
 
+sub mt_blog_stats_tag_cloud_tab {
+    my ($app, $tmpl, $param) = @_;
+
+    my $blog = $app->blog;
+    my $blog_id = $blog->id if $blog;
+
+    my $terms = {};
+    $terms->{blog_id} = $blog_id if $blog_id;
+    $terms->{object_datasource} = 'entry';
+    my $args = {};
+    $args->{group} = [ 'tag_id' ];
+    $args->{sort} = 'count(*)';
+    $args->{direction} = 'descend';
+    $args->{limit} = 100;
+
+    my $iter = MT::ObjectTag->count_group_by($terms, $args);
+    my @tag_loop;
+    my $ntags = 0;
+    my $min = undef;
+    my $max = undef;
+    while (my ($count, $tag_id) = $iter->()) {
+        my $tag = MT::Tag->load($tag_id) or next;
+        next if $tag->is_private; # weed these from the dashboard
+        $ntags += $count;
+        $min = defined $min ? ($count < $min ? $count : $min) : $count;
+        $max = defined $max ? ($count > $max ? $count : $max) : $count;
+        push @tag_loop, { name => $tag->name, count => $count };
+    }
+
+    my $factor;
+    if ($max - $min == 0) {
+        $min -= 6;
+        $factor = 1;
+    } else {
+        $factor = 5 / log($max - $min + 1);
+    }
+    $factor *= ($ntags / 6) if $ntags < 6;
+
+    foreach my $tag (@tag_loop) {
+        # now calc rank
+        my $rank;
+        my $count = $tag->{count};
+        if ($count - $min + 1 == 0) {
+            $rank = 0;
+        } else {
+            $rank = 6 - int(log($count - $min + 1) * $factor);
+        }
+        $tag->{rank} = $rank;
+    }
+
+    @tag_loop = sort { $a->{name} cmp $b->{name} } @tag_loop;
+    $param->{tag_loop} = \@tag_loop;
+}
+
 sub mt_blog_stats_widget_comment_tab {
     my ($app, $tmpl, $param) = @_;
Index: /branches/release-34/lib/MT/App/CMS.pm
===================================================================
--- /branches/release-34/lib/MT/App/CMS.pm (revision 1852)
+++ /branches/release-34/lib/MT/App/CMS.pm (revision 1857)
@@ -308,4 +308,5 @@
         tag_cloud => {
             label    => 'Tag Cloud',
+            handler  => "${pkg}Dashboard::mt_blog_stats_tag_cloud_tab",
             template => 'widget/blog_stats_tag_cloud.tmpl',
         },
Index: /branches/release-34/tmpl/cms/widget/blog_stats_tag_cloud.tmpl
===================================================================
--- /branches/release-34/tmpl/cms/widget/blog_stats_tag_cloud.tmpl (revision 1103)
+++ /branches/release-34/tmpl/cms/widget/blog_stats_tag_cloud.tmpl (revision 1857)
@@ -1,5 +1,3 @@
-<mt:if name="blog_id"><mt:setvar name="blog_scope" value="$blog_id"><mt:else><mt:setvar name="blog_scope" value="all"></mt:if>
-<mt:setvar name="tag_cloud" value="0"><MTTags blog_ids="$blog_scope" limit="1"><mt:setvar name="tag_cloud" value="1"></MTTags>
-<mt:if name="tag_cloud">
+<mt:if name="tag_loop">
     <mt:setvarblock name="tabs" append="1">
         <li id="tag-tab" class="tab <mt:if name="tab" eq="tag">selected-tab</mt:if>" mt:tab="tag" mt:command="select-tab" onclick="return blogStatsTabSelect('tag');"><a href="javascript:void(0);"><span><__trans phrase="Tags"></span></a></li>
@@ -9,7 +7,7 @@
         <div id="tag-cloud">
             <ul id="tag-cloud-list">
-            <MTTags blog_ids="$blog_scope" top="100" sort_by="name">
-                <li class="tag-<$MTTagRank$>"><a href="javascript:void(0)" onclick="recentEntriesForTag('<MTTagName escape="js">', 'tag-cloud-recent-entries'); return false"><$MTTagName$></a></li>
-            </MTTags>
+            <mt:loop name="tag_loop">
+                <li class="tag-<$mt:var name="rank"$>"><a href="javascript:void(0)" onclick="recentEntriesForTag('<mt:var name="name" escape="js">', 'tag-cloud-recent-entries'); return false"><$mt:var name="name"$></a></li>
+            </mt:loop>
             </ul>
         </div>
