Index: branches/release-30/lib/MT/CMS/User.pm
===================================================================
--- branches/release-30/lib/MT/CMS/User.pm (revision 1369)
+++ branches/release-30/lib/MT/CMS/User.pm (revision 1378)
@@ -1171,4 +1171,57 @@
 }
 
+sub dialog_select_author {
+    my $app = shift;
+
+    my $hasher = sub {
+        my ( $obj, $row ) = @_;
+        $row->{label}       = $row->{name};
+        $row->{description} = $row->{nickname};
+    };
+
+    $app->listing(
+        {
+            type  => 'author',
+            terms => {
+                type   => MT::Author::AUTHOR(),
+                status => MT::Author::ACTIVE(),
+            },
+            args => {
+                sort => 'name',
+                join => MT::Permission->join_on(
+                    'author_id',
+                    {
+                        permissions => "\%'create_post'\%",
+                        blog_id     => $app->blog->id,
+                    },
+                    { 'like' => { 'permissions' => 1 } }
+                ),
+            },
+            code     => $hasher,
+            template => 'dialog/select_users.tmpl',
+            params   => {
+                dialog_title =>
+                  $app->translate("Select a entry author"),
+                items_prompt =>
+                  $app->translate("Selected author"),
+                search_prompt => $app->translate(
+                    "Type a username to filter the choices below."),
+                panel_label       => $app->translate("Entry author"),
+                panel_description => $app->translate("Name"),
+                panel_type        => 'author',
+                panel_multi       => defined $app->param('multi')
+                ? $app->param('multi')
+                : 0,
+                panel_searchable => 1,
+                panel_first      => 1,
+                panel_last       => 1,
+                list_noncron     => 1,
+                idfield          => $app->param('idfield'),
+                namefield        => $app->param('namefield'),
+            },
+        }
+    );
+}
+
 sub dialog_select_sysadmin {
     my $app = shift;
Index: branches/release-30/lib/MT/CMS/Entry.pm
===================================================================
--- branches/release-30/lib/MT/CMS/Entry.pm (revision 1369)
+++ branches/release-30/lib/MT/CMS/Entry.pm (revision 1378)
@@ -1936,33 +1936,5 @@
     my ( $date_format, $datetime_format );
 
-    ## Load list of users for display in filter pulldown (and selection
-    ## pulldown on power edit page).
-    my ( @a_data, %authors );
     if ($is_power_edit) {
-
-        # FIXME: Scaling issue for lots of authors on one blog
-        my $auth_iter = MT::Author->load_iter(
-            { type => MT::Author::AUTHOR() },
-            {
-                'join' => MT::Permission->join_on(
-                    'author_id', { blog_id => $blog_id }
-                ),
-                limit => 51,
-            }
-        );
-        while ( my $author = $auth_iter->() ) {
-            $authors{ $author->id } = $author->name;
-            push @a_data,
-              {
-                author_id   => $author->id,
-                author_name => encode_js( $author->name )
-              };
-        }
-        @a_data = sort { $a->{author_name} cmp $b->{author_name} } @a_data;
-        my $i = 0;
-        for my $row (@a_data) {
-            $row->{author_index} = $i++;
-        }
-        $param->{author_loop} = \@a_data;
         $date_format          = "%Y.%m.%d";
         $datetime_format      = "%Y-%m-%d %H:%M:%S";
@@ -1973,10 +1945,9 @@
     }
 
-    my ( @cat_list, @auth_list );
+    my @cat_list;
     if ($is_power_edit) {
         @cat_list =
           sort { $cats{$a}->{category_index} <=> $cats{$b}->{category_index} }
           keys %cats;
-        @auth_list = sort { $authors{$a} cmp $authors{$b} } keys %authors;
     }
 
@@ -2080,27 +2051,14 @@
             $row->{row_category_loop} = \@this_c_data;
 
-            my @this_a_data;
-            my $this_author_id = $obj->author_id;
-            for my $a_id (@auth_list) {
-                push @this_a_data,
-                  {
-                    author_name => $authors{$a_id},
-                    author_id   => $a_id
-                  };
-                $this_a_data[-1]{author_is_selected} = $this_author_id
-                  && $this_author_id == $a_id ? 1 : 0;
-            }
-            unless ( $obj->author ) {
-                push @this_a_data,
-                  {
-                    author_name => $app->translate(
-                        '(user deleted - ID:[_1])',
-                        $obj->author_id
-                    ),
-                    author_id          => $obj->author_id,
-                    author_is_selected => 1,
-                  };
-            }
-            $row->{row_author_loop} = \@this_a_data;
+            if ( $obj->author ) {
+                $row->{row_author_name} = $obj->author->name;
+                $row->{row_author_id}   = $obj->author->id;
+            } else {
+                $row->{row_author_name} = $app->translate(
+                    '(user deleted - ID:[_1])',
+                    $obj->author_id
+                );
+                $row->{row_author_id} = $obj->author_id,
+             }
         }
         if ( my $blog = $blogs{ $obj->blog_id } ||=
