diff --git a/lang/en_utf8/forum.php b/lang/en_utf8/forum.php
index bbde533..cf7519a 100644
--- a/lang/en_utf8/forum.php
+++ b/lang/en_utf8/forum.php
@@ -25,6 +25,7 @@ $string['anonno'] = 'No, never';
 $string['anonoptional'] = 'Optional (let the user decide)';
 $string['anonyes'] = 'Yes, all posts';
 $string['anonymouspost'] = 'Post anonymously';
+$string['anonymousname'] = 'Anonymous user name';
 $string['anyfile'] = 'Any file';
 $string['attachment'] = 'Attachment';
 $string['blockafter'] = 'Post threshold for blocking';
@@ -35,6 +36,7 @@ $string['cannotviewpostyet'] = 'You cannot read other students questions in this
 $string['cannotadddiscussion'] = 'Adding discussions to this forum requires group membership.';
 $string['cannotadddiscussionall'] = 'You do not have permission to add a new discussion topic for all participants.';
 $string['cleanreadtime'] = 'Mark old posts as read hour';
+$string['configanonymousname'] = 'The user name to display on anonymous forum posts.';
 $string['configcleanreadtime'] = 'The hour of the day to clean old posts from the \'read\' table.';
 $string['configdisplaymode'] = 'The default display mode for discussions if one isn\'t set.';
 $string['configenablerssfeeds'] = 'This switch will enable the possibility of RSS feeds for all forums.  You will still need to turn feeds on manually in the settings for each forum.';
diff --git a/mod/forum/db/install.xml b/mod/forum/db/install.xml
index 9ca9957..79e6d40 100644
--- a/mod/forum/db/install.xml
+++ b/mod/forum/db/install.xml
@@ -23,7 +23,8 @@
         <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="rssarticles" NEXT="warnafter"/>
         <FIELD NAME="warnafter" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="timemodified" NEXT="blockafter"/>
         <FIELD NAME="blockafter" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="warnafter" NEXT="blockperiod"/>
-        <FIELD NAME="blockperiod" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="blockafter"/>
+        <FIELD NAME="blockperiod" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="blockafter" NEXT="anonymous"/>
+        <FIELD NAME="anonymous" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="blockperiod"/>
       </FIELDS>
       <KEYS>
         <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
@@ -69,7 +70,8 @@
         <FIELD NAME="format" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="message" NEXT="attachment"/>
         <FIELD NAME="attachment" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="format" NEXT="totalscore"/>
         <FIELD NAME="totalscore" TYPE="int" LENGTH="4" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="attachment" NEXT="mailnow"/>
-        <FIELD NAME="mailnow" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="totalscore"/>
+        <FIELD NAME="mailnow" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="totalscore" NEXT="anonymous"/>
+        <FIELD NAME="anonymous" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="mailnow"/>
       </FIELDS>
       <KEYS>
         <KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="discussion"/>
diff --git a/mod/forum/db/upgrade.php b/mod/forum/db/upgrade.php
index 99c8212..ea32586 100644
--- a/mod/forum/db/upgrade.php
+++ b/mod/forum/db/upgrade.php
@@ -83,6 +83,16 @@ function xmldb_forum_upgrade($oldversion=0) {
         }
     }
 
+    if ($result && $oldversion < 2007101513) {
+        $table = new XMLDBTable('forum');
+        $field = new XMLDBField('anonymous');
+        $field->setAttributes(XMLDB_TYPE_INTEGER, '2', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'blockperiod');
+        $result = $result && add_field($table, $field);
+        $table = new XMLDBTable('forum_posts');
+        $field = new XMLDBField('anonymous');
+        $field->setAttributes(XMLDB_TYPE_INTEGER, '2', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'mailnow');
+        $result = $result && add_field($table, $field);
+    }
 
     return $result;
 }
diff --git a/mod/forum/lib.php b/mod/forum/lib.php
index 83bb70b..519a401 100644
--- a/mod/forum/lib.php
+++ b/mod/forum/lib.php
@@ -441,7 +441,7 @@ function forum_cron() {
                 $posthtml = forum_make_mail_html($course, $forum, $discussion, $post, $userfrom, $userto);
 
                 $post->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $post->anonymous : false);
-                $userfrom = $post->anonymous ? $CFG->anonymous_name : $userfrom;
+                $userfrom = $post->anonymous ? $CFG->forum_anonymousname : $userfrom;
 
                 // Send the post now!
 
@@ -677,6 +677,7 @@ function forum_cron() {
 
                     foreach ($postsarray as $postid) {
                         $post = $posts[$postid];
+                        $post->anonymous = $forum->anonymous == 1 ? true : ($forum->anonymous == 2 ? $post->anonymous : false);
 
                         if (array_key_exists($post->userid, $users)) { // we might know him/her already
                             $userfrom = $users[$post->userid];
@@ -701,12 +702,16 @@ function forum_cron() {
                         if ($userto->maildigest == 2) {
                             // Subjects only
                             $by = new object();
-                            $by->name = fullname($userfrom);
+                            $by->name = $post->anonymous ? $CFG->forum_anonymousname : fullname($userfrom);
                             $by->date = userdate($post->modified);
                             $posttext .= "\n".format_string($post->subject,true).' '.get_string("bynameondate", "forum", $by);
                             $posttext .= "\n---------------------------------------------------------------------";
 
-                            $by->name = "<a target=\"_blank\" href=\"$CFG->wwwroot/user/view.php?id=$userfrom->id&amp;course=$course->id\">$by->name</a>";
+                            if ($post->anonymous) {
+                                $by->name = $CFG->forum_anonymousname;
+                            } else {
+                                $by->name = "<a target=\"_blank\" href=\"$CFG->wwwroot/user/view.php?id=$userfrom->id&amp;course=$course->id\">$by->name</a>";
+                            }
                             $posthtml .= '<div><a target="_blank" href="'.$CFG->wwwroot.'/mod/forum/discuss.php?d='.$discussion->id.'#p'.$post->id.'">'.format_string($post->subject,true).'</a> '.get_string("bynameondate", "forum", $by).'</div>';
 
                         } else {
@@ -811,7 +816,7 @@ function forum_make_mail_text($course, $forum, $discussion, $post, $userfrom, $u
     }
 
     $by = New stdClass;
-    $by->name = $post->anonymous ? $CFG->anonymous_name : fullname($userfrom, $viewfullnames);
+    $by->name = $post->anonymous ? $CFG->forum_anonymousname : fullname($userfrom, $viewfullnames);
     $by->date = userdate($post->modified, "", $userto->timezone);
 
     $strbynameondate = get_string('bynameondate', 'forum', $by);
@@ -1155,7 +1160,7 @@ function forum_print_recent_activity($course, $viewfullnames, $timestart) {
 
     foreach ($printposts as $post) {
         $subjectclass = empty($post->parent) ? ' bold' : '';
-        $fullname = $post->anonymous ? $CFG->anonymous_name : fullname($post, $viewfullnames);
+        $fullname = $post->anonymous ? $CFG->forum_anonymousname : fullname($post, $viewfullnames);
 
         echo '<li><div class="head">'.
                '<div class="date">'.userdate($post->modified, $strftimerecent).'</div>'.
@@ -1896,6 +1901,7 @@ function forum_get_user_posts($forumid, $userid) {
                                    JOIN {$CFG->prefix}user u              ON u.id = p.userid
                              WHERE f.id = $forumid
                                    AND p.userid = $userid
+                                   AND p.anonymous = 0
                                    $timedsql
                           ORDER BY p.modified ASC");
 }
@@ -1924,6 +1930,7 @@ function forum_get_user_involved_discussions($forumid, $userid) {
                                    JOIN {$CFG->prefix}forum_posts p       ON p.discussion = d.id
                              WHERE f.id = $forumid
                                    AND p.userid = $userid
+                                   AND p.anonymous = 0
                                    $timedsql");
 }
 
@@ -1952,6 +1959,7 @@ function forum_count_user_posts($forumid, $userid) {
                                   JOIN {$CFG->prefix}user u              ON u.id = p.userid
                             WHERE f.id = $forumid
                                   AND p.userid = $userid
+                                  AND p.anonymous = 0
                                   $timedsql");
 }
 
@@ -2547,7 +2555,7 @@ function forum_make_mail_post($course, $forum, $discussion, $post, $userfrom, $u
     $options = new object();
     $options->para = true;
     $formattedtext = format_text(trusttext_strip($post->message), $post->format, $options, $course->id);
-    $anonpicture = '<img alt="' . $CFG->anonymous_name . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
+    $anonpicture = '<img alt="' . $CFG->forum_anonymousname . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
 
     $output = '<table border="0" cellpadding="3" cellspacing="0" class="forumpost">';
 
@@ -2564,7 +2572,7 @@ function forum_make_mail_post($course, $forum, $discussion, $post, $userfrom, $u
 
     $fullname = fullname($userfrom, $viewfullnames);
     $by = new object();
-    $by->name = $post->anonymous ? $CFG->anonymous_name : '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$userfrom->id.'&amp;course='.$course->id.'">'.$fullname.'</a>';
+    $by->name = $post->anonymous ? $CFG->forum_anonymousname : '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$userfrom->id.'&amp;course='.$course->id.'">'.$fullname.'</a>';
     $by->date = userdate($post->modified, '', $userto->timezone);
     $output .= '<div class="author">'.get_string('bynameondate', 'forum', $by).'</div>';
 
@@ -2753,7 +2761,7 @@ function forum_print_post($post, $discussion, $forum, &$cm, $course, $ownpost=fa
     $postuser->lastname  = $post->lastname;
     $postuser->imagealt  = $post->imagealt;
     $postuser->picture   = $post->picture;
-    $anonpicture         = '<img alt="' . $CFG->anonymous_name . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
+    $anonpicture         = '<img alt="' . $CFG->forum_anonymousname . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
 
     echo '<tr class="header"><td class="picture left">';
     $post->anonymous ? print($anonpicture) : print_user_picture($postuser, $course->id);
@@ -2776,7 +2784,7 @@ function forum_print_post($post, $discussion, $forum, &$cm, $course, $ownpost=fa
     $by = new object();
 
     if ($post->anonymous) {
-       $by->name = $CFG->anonymous_name;
+       $by->name = $CFG->forum_anonymousname;
     } else {
        $by->name = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.
             $post->userid.'&amp;course='.$course->id.'">'.$fullname.'</a>';
@@ -3053,7 +3061,7 @@ function forum_print_discussion_header(&$post, $forum, $group=-1, $datestring=""
     $postuser->lastname = $post->lastname;
     $postuser->imagealt = $post->imagealt;
     $postuser->picture = $post->picture;
-    $anonpicture = '<img alt="' . $CFG->anonymous_name . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
+    $anonpicture = '<img alt="' . $CFG->forum_anonymousname . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
 
     echo '<td class="picture">';
     $post->anonymous ? print($anonpicture) : print_user_picture($postuser, $forum->course);
@@ -3064,7 +3072,7 @@ function forum_print_discussion_header(&$post, $forum, $group=-1, $datestring=""
     echo '<td class="author">';
 
     if ($post->anonymous) {
-        echo $CFG->anonymous_name;
+        echo $CFG->forum_anonymousname;
     } else {
         echo '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$post->userid.'&amp;course='.$forum->course.'">'.$fullname.'</a>';
     }
@@ -3125,9 +3133,9 @@ function forum_print_discussion_header(&$post, $forum, $group=-1, $datestring=""
     $usermodified->id        = $post->usermodified;
     $usermodified->firstname = $post->umfirstname;
     $usermodified->lastname  = $post->umlastname;
-    $lastpost = get_record('forum_posts', 'id', $post->lastpostid);
+    $lastpost = (empty($post->lastpostid)) ? $post : get_record('forum_posts', 'id', $post->lastpostid);
     if($lastpost->anonymous) {
-        echo $CFG->anonymous_name . '<br/>';
+        echo $CFG->forum_anonymousname . '<br/>';
     } else {
         echo '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$post->usermodified.'&amp;course='.$forum->course.'">'.
              fullname($usermodified).'</a><br/>';
@@ -3784,6 +3792,7 @@ function forum_update_post($post,&$message) {
     $forum = get_record('forum', 'id', $post->forum);
 
     $post->modified = time();
+    $post->anonymous  = $forum->anonymous == 1 ? 1 : ($forum->anonymous == 2 ? (int)$post->anonymous : 0);
 
     $updatediscussion = new object();
     $updatediscussion->id           = $post->discussion;
@@ -4997,7 +5006,7 @@ function forum_print_posts_threaded($course, &$cm, $forum, $discussion, $parent,
                 $by = new object();
 
                 if($post->anonymous) {
-                    $by->name = $CFG->anonymous_name;
+                    $by->name = $CFG->forum_anonymousname;
                 } else {
                     $by->name = fullname($post, $canviewfullnames);
                 }
@@ -5082,7 +5091,7 @@ function forum_get_recent_mod_activity(&$activities, &$index, $timestart, $cours
     $cm = $modinfo->cms[$cmid];
 
     if ($userid) {
-        $userselect = "AND u.id = $userid";
+        $userselect = "AND u.id = $userid AND p.anonymous = 0";
     } else {
         $userselect = "";
     }
@@ -5199,7 +5208,7 @@ function forum_print_recent_mod_activity($activity, $courseid, $detail, $modname
 
     echo "<tr><td class=\"userpicture\" valign=\"top\">";
     if($activity->user->anonymous) {
-        echo '<img alt="' . $CFG->anonymous_name . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
+        echo '<img alt="' . $CFG->forum_anonymousname . '" src="' . $CFG->themewww . '/' . current_theme() . '/pix/anonymous.png' . '"/>';
     } else {
         print_user_picture($activity->user, $courseid);
     }
@@ -5216,7 +5225,7 @@ function forum_print_recent_mod_activity($activity, $courseid, $detail, $modname
     echo '</div>';
 
     echo '<div class="user">';
-    $fullname = $activity->user->anonymous ? $CFG->anonymous_name : fullname($activity->user, $viewfullnames);
+    $fullname = $activity->user->anonymous ? $CFG->forum_anonymousname : fullname($activity->user, $viewfullnames);
     echo "<a href=\"$CFG->wwwroot/user/view.php?id={$activity->user->id}&amp;course=$courseid\">"
          ."{$fullname}</a> - ".userdate($activity->timestamp);
     echo '</div>';
diff --git a/mod/forum/rsslib.php b/mod/forum/rsslib.php
index 8528d79..501363c 100644
--- a/mod/forum/rsslib.php
+++ b/mod/forum/rsslib.php
@@ -166,7 +166,8 @@
                                              u.lastname AS userlastname,
                                              p.message AS postmessage,
                                              p.created AS postcreated,
-                                             p.format AS postformat
+                                             p.format AS postformat,
+                                             p.anonymous
                                       FROM {$CFG->prefix}forum_discussions d,
                                            {$CFG->prefix}forum_posts p,
                                            {$CFG->prefix}user u
@@ -186,9 +187,14 @@
                 unset($item);
                 unset($user);
                 $item->title = format_string($rec->discussionname);
-                $user->firstname = $rec->userfirstname;
-                $user->lastname = $rec->userlastname;
-                $item->author = fullname($user);
+                $rec->anonymous = $forum->anonymous == 1 ? true : ($rec->anonymous == 2 ? $rec->anonymous : false);
+                if ($rec->anonymous) {
+                    $item->author = $CFG->forum_anonymousname;
+                } else {
+                    $user->firstname = $rec->userfirstname;
+                    $user->lastname = $rec->userlastname;
+                    $item->author = fullname($user);
+                }
                 $item->pubdate = $rec->postcreated;
                 $item->link = $CFG->wwwroot."/mod/forum/discuss.php?d=".$rec->discussionid;
                 $item->description = format_text($rec->postmessage,$rec->postformat,$formatoptions,$forum->course);
@@ -221,7 +227,8 @@
                                              p.subject AS postsubject,
                                              p.message AS postmessage,
                                              p.created AS postcreated,
-                                             p.format AS postformat
+                                             p.format AS postformat,
+                                             p.anonymous
                                       FROM {$CFG->prefix}forum_discussions d,
                                            {$CFG->prefix}forum_posts p,
                                            {$CFG->prefix}user u
@@ -243,9 +250,14 @@
                 unset($user);
                 $item->category = $rec->discussionname;
                 $item->title = $rec->postsubject;
-                $user->firstname = $rec->userfirstname;
-                $user->lastname = $rec->userlastname;
-                $item->author = fullname($user);
+                $rec->anonymous = $forum->anonymous == 1 ? true : ($rec->anonymous == 2 ? $rec->anonymous : false);
+                if ($rec->anonymous) {
+                    $item->author = $CFG->forum_anonymousname;
+                } else {
+                    $user->firstname = $rec->userfirstname;
+                    $user->lastname = $rec->userlastname;
+                    $item->author = fullname($user);
+                }
                 $item->pubdate = $rec->postcreated;
                 $item->link = $CFG->wwwroot."/mod/forum/discuss.php?d=".$rec->discussionid."&parent=".$rec->postid;
                 $item->description = format_text($rec->postmessage,$rec->postformat,$formatoptions,$forum->course);
diff --git a/mod/forum/search.php b/mod/forum/search.php
index 3d8d6a3..ddfe5cb 100644
--- a/mod/forum/search.php
+++ b/mod/forum/search.php
@@ -114,6 +114,7 @@
 
 /// We need to do a search now and print results
 
+    $extrasql = preg_match('/(^| )user(id)?:/', $search) ? 'AND anonymous = 0' : '';
     $searchterms = str_replace('forumid:', 'instance:', $search);
     $searchterms = explode(' ', $searchterms);
 
@@ -124,8 +125,7 @@
     $navlinks[] = array('name' => s($search, true), 'link' => '', 'type' => 'link');
     $navigation = build_navigation($navlinks);
 
-
-    if (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount)) {
+    if (!$posts = forum_search_posts($searchterms, $course->id, $page*$perpage, $perpage, $totalcount, $extrasql)) {
         print_header_simple("$strsearchresults", "", $navigation, 'search.words', "", "", "&nbsp;", navmenu($course));
         print_heading(get_string("nopostscontaining", "forum", $search));
 
diff --git a/mod/forum/settings.php b/mod/forum/settings.php
index 4d71424..afc8904 100644
--- a/mod/forum/settings.php
+++ b/mod/forum/settings.php
@@ -61,4 +61,7 @@ $settings->add(new admin_setting_configcheckbox('forum_enabletimedposts', get_st
 $settings->add(new admin_setting_configcheckbox('forum_logblocked', get_string('logblocked', 'forum'),
                    get_string('configlogblocked', 'forum'), 1));
 
+// anonymous user name
+$settings->add(new admin_setting_configtext('forum_anonymousname', get_string('anonymousname', 'forum'),
+                   get_string('configanonymousname', 'forum'), 'Anonymous', PARAM_TEXT));
 ?>
diff --git a/mod/forum/version.php b/mod/forum/version.php
index a6e8257..92c5759 100644
--- a/mod/forum/version.php
+++ b/mod/forum/version.php
@@ -5,7 +5,7 @@
 //  This fragment is called by /admin/index.php
 ////////////////////////////////////////////////////////////////////////////////
 
-$module->version  = 2007101512;
+$module->version  = 2007101513;
 $module->requires = 2007101509;  // Requires this Moodle version
 $module->cron     = 60;
 
diff --git a/search/documents/forum_document.php b/search/documents/forum_document.php
index 3cbe2e1..8b2cf29 100644
--- a/search/documents/forum_document.php
+++ b/search/documents/forum_document.php
@@ -33,6 +33,8 @@ class ForumSearchDocument extends SearchDocument {
     * constructor
     */
     public function __construct(&$post, $forum_id, $course_id, $itemtype, $context_id) {
+        global $CFG;
+
         // generic information
         $doc->docid        = $post['id'];
         $doc->documenttype = SEARCH_TYPE_FORUM;
@@ -42,7 +44,7 @@ class ForumSearchDocument extends SearchDocument {
         $doc->title        = $post['subject'];
         
         $user = get_record('user', 'id', $post['userid']);
-        $doc->author       = fullname($user);
+        $doc->author       = $post['anonymous'] ? $CFG->forum_anonymousname : fullname($user);
         $doc->contents     = $post['message'];
         $doc->date         = $post['created'];
         $doc->url          = forum_make_link($post['discussion'], $post['id']);
@@ -51,7 +53,7 @@ class ForumSearchDocument extends SearchDocument {
         $data->forum      = $forum_id;
         $data->discussion = $post['discussion'];
         
-        parent::__construct($doc, $data, $course_id, $post['groupid'], $post['userid'], PATH_FOR_SEARCH_TYPE_FORUM);
+        parent::__construct($doc, $data, $course_id, $post['groupid'], $post['anonymous'] ? null : $post['userid'], PATH_FOR_SEARCH_TYPE_FORUM);
     } 
 }
 
@@ -183,6 +185,7 @@ function forum_get_discussions_fast($forum_id) {
             p.discussion, 
             p.message,
             p.created,
+            p.anonymous,
             d.groupid,
             p.userid, 
             u.firstname, 
