diff --git a/course/lib.php b/course/lib.php
index 19b2221..16f1d29 100644
--- a/course/lib.php
+++ b/course/lib.php
@@ -859,7 +859,7 @@ function print_recent_activity($course) {
     $content = false;
 
     // get the recent activity, parse and display it
-    if ($activity = get_recent_activity($course, $timestart)) {
+    if ($activity = get_recent_activity($course, $viewfullnames, $timestart, $USER)) {
         $content = true;
 
         if ($newusers = $activity['newusers']) {
@@ -904,6 +904,26 @@ function print_recent_activity($course) {
             if (function_exists($print_recent_activity)) {
                 // NOTE: original $isteacher (second parameter below) was replaced with $viewfullnames!
                 $content = $print_recent_activity($course, $viewfullnames, $timestart) || $content;
+            } else {
+                $get_recent_activity = $modname.'_get_recent_activity';
+                if (function_exists($get_recent_activity)) {
+                    $modupdates = $get_recent_activity($course, $viewfullnames, $timestart, $USER);
+                    if ($modupdates) {
+                        print_headline(get_string('managemodules').':', 3);
+                        echo "\n<ul class='unlist'>\n";
+                        foreach ($modupdates as $update) {
+                            echo '<li><div class="head">'.
+                                   '<div class="name">'.$update->category.'</div>'.
+                                   '<div class="date">'.userdate($update->pubdate, get_string('strftimerecent')).'</div>'.
+                                 '</div>';
+                            echo '<div class="info'.$subjectclass.'">';
+                            echo '"<a href="'.$update->link.'">';
+                            echo $update->title;
+                            echo "</a>\"</div></li>\n";
+                        }
+                        echo "</ul>\n";
+                    }
+                }
             }
         } else {
             debugging("Missing lib.php in lib/{$modname} - please reinstall files or uninstall the module");
@@ -923,7 +943,7 @@ function print_recent_activity($course) {
  * @param $timestart
  * @return array
  */
-function get_recent_activity($course, $timestart) {
+function get_recent_activity($course, $viewfullnames, $timestart, $user) {
     global $CFG;
 
     $activity = array();
@@ -1060,7 +1080,7 @@ function rss_recent_activity($course, $user) {
     }
 
     // get the recent activity
-    $activity = get_recent_activity($course, $timestart);
+    $activity = get_recent_activity($course, $viewfullnames, $timestart, $user);
     if (!empty($activity)) {
         if ($courseupdates = $activity['courseupdates']) {
             foreach ($courseupdates as $value) {
@@ -1087,6 +1107,46 @@ function rss_recent_activity($course, $user) {
                 $items[] = $item;
             }
         }
+
+/// Now display new things from each module
+
+        $modinfo =& get_fast_modinfo($course);
+        $usedmodules = array();
+        foreach($modinfo->cms as $cm) {
+            if (isset($usedmodules[$cm->modname])) {
+                continue;
+            }
+            if (!$cm->uservisible) {
+                continue;
+            }
+            $usedmodules[$cm->modname] = $cm->modname;
+        }
+
+        foreach ($usedmodules as $modname) {      // Each module gets it's own logs and prints them
+            if (file_exists($CFG->dirroot.'/mod/'.$modname.'/lib.php')) {
+                include_once($CFG->dirroot.'/mod/'.$modname.'/lib.php');
+                $get_recent_activity = $modname.'_get_recent_activity';
+                    if (function_exists($get_recent_activity)) {
+                        // NOTE: original $isteacher (second parameter below) was replaced with $viewfullnames!
+                        $modupdates = $get_recent_activity($course, $viewfullnames, $timestart, $user);
+                        if (!empty($modupdates)) {
+                            foreach ($modupdates as $update) {
+                                $item = NULL;
+                                $item->category = $update->category;
+                                $item->author = $update->author;
+                                $item->title = $update->title;
+                                $item->pubdate = $update->pubdate;
+                                $item->link = $update->link;
+                                $item->description = $update->description;
+                                $items[] = $item;
+                            }
+                        }
+                    }
+            } else {
+                debugging("Missing lib.php in lib/{$modname} - please reinstall files or uninstall the module");
+            }
+        }
+
         return $items;
     } else {
         return '';
diff --git a/mod/forum/lib.php b/mod/forum/lib.php
index b6231a6..8e0cd0a 100644
--- a/mod/forum/lib.php
+++ b/mod/forum/lib.php
@@ -1117,7 +1117,7 @@ function forum_print_overview($courses,&$htmlarray) {
 /**
  * Given a course and a date, prints a summary of all the new
  * messages posted in the course since that date
- * @param object $course
+ * @param object $modupdates
  * @param bool $viewfullnames capability
  * @param int $timestart
  * @return bool success
@@ -1125,6 +1125,37 @@ function forum_print_overview($courses,&$htmlarray) {
 function forum_print_recent_activity($course, $viewfullnames, $timestart) {
     global $CFG, $USER;
 
+
+    if ($modupdates = forum_get_recent_activity($course, $viewfullnames, $timestart, $USER)) {
+
+        print_headline(get_string('newforumposts', 'forum').':', 3);
+        echo "\n<ul class='unlist'>\n";
+
+        foreach ($modupdates as $update) {
+            $subjectclass = empty($update->parent) ? ' bold' : '';
+
+            echo '<li><div class="head">'.
+                   '<div class="date">'.userdate($update->pubdate, get_string('strftimerecent')).'</div>'.
+                   '<div class="name">'.$update->author.'</div>'.
+                 '</div>';
+            echo '<div class="info'.$subjectclass.'">';
+            echo '"<a href="'.$update->link.'">';
+            echo $update->title;
+            echo "</a>\"</div></li>\n";
+        }
+
+        echo "</ul>\n";
+    }
+
+    return true;
+}
+
+/*
+ * Function to return an array of forum update objects to be displayed either as part of the recent_activity block or as part of an rss feed
+ * */
+function forum_get_recent_activity($course, $viewfullname, $timestart, $user) {
+    global $CFG;
+
     // do not use log table if possible, it may be huge and is expensive to join with other tables
 
     if (!$posts = get_records_sql("SELECT p.*, f.type AS forumtype, d.forum, d.groupid,
@@ -1162,7 +1193,7 @@ function forum_print_recent_activity($course, $viewfullnames, $timestart) {
             continue;
         }
 
-        if (!empty($CFG->forum_enabletimedposts) and $USER->id != $post->duserid
+        if (!empty($CFG->forum_enabletimedposts) and $user->id != $post->duserid
           and (($post->timestart > 0 and $post->timestart > time()) or ($post->timeend > 0 and $post->timeend < time()))) {
             if (!has_capability('mod/forum:viewhiddentimedposts', $context)) {
                 continue;
@@ -1199,30 +1230,27 @@ function forum_print_recent_activity($course, $viewfullnames, $timestart) {
         return false;
     }
 
-    print_headline(get_string('newforumposts', 'forum').':', 3);
-    echo "\n<ul class='unlist'>\n";
-
+    // $updates is an array of important recent_activity infromation that can be easily displayed as a block or rss feed etc
+    $updates = array();
     foreach ($printposts as $post) {
-        $subjectclass = empty($post->parent) ? ' bold' : '';
-
-        echo '<li><div class="head">'.
-               '<div class="date">'.userdate($post->modified, $strftimerecent).'</div>'.
-               '<div class="name">'.fullname($post, $viewfullnames).'</div>'.
-             '</div>';
-        echo '<div class="info'.$subjectclass.'">';
+        $updates[$post->id]->parent = $post->parent;
+        $updates[$post->id]->category = get_string('newforumposts','forum');
+        $updates[$post->id]->title = $post->subject;
+        $updates[$post->id]->description = break_up_long_words(format_string($post->message, true));
         if (empty($post->parent)) {
-            echo '"<a href="'.$CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion.'">';
+            $updates[$post->id]->link = $CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion;
         } else {
-            echo '"<a href="'.$CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion.'&amp;parent='.$post->parent.'#p'.$post->id.'">';
+            $updates[$post->id]->link = $CFG->wwwroot.'/mod/forum/discuss.php?d='.$post->discussion.'&amp;parent='.$post->parent.'#p'.$post->id;
         }
-        $post->subject = break_up_long_words(format_string($post->subject, true));
-        echo $post->subject;
-        echo "</a>\"</div></li>\n";
+        $updates[$post->id]->author = fullname($post,$viewfullnames);
+        $updates[$post->id]->pubdate = $post->modified;
     }
 
-    echo "</ul>\n";
-
-    return true;
+    if (!empty($updates)) {
+        return $updates;
+    } else {
+        return array();
+    }
 }
 
 /**

