diff --git a/grade/index.php b/grade/index.php
index 5d6e798a6c0..a93069997a0 100644
--- a/grade/index.php
+++ b/grade/index.php
@@ -15,13 +15,14 @@
 
     require_login($course->id);
     
+    /* 
     if (has_capability('moodle/site:accessallgroups', get_context_instance(CONTEXT_COURSE, $course->id))) {
         $group = get_and_set_current_group($course, $course->groupmode, $group);
     } else {
         $group = get_current_group($course->id);
     }
-
-    
+    */
+   
     // if the user set new prefs make sure they happen now
     if ($action == 'set_grade_preferences' && $prefs = data_submitted()) {
         if (!confirm_sesskey()) {
@@ -49,9 +50,30 @@
     }
 
     print_header($course->shortname.': '.get_string('grades'), $course->fullname, grade_nav($course, $action));
-
+    
     grade_preferences_menu($action, $course, $group);
 
+    /// copied code from assignment module, if this is not the way to do this please change it
+    /// the above code does not work
+    /// set_and_print_groups() is not fully implemented as function groups_instance_print_grouping_selector()
+    /// and function groups_instance_print_group_selector() are missing. 
+    $context = get_context_instance(CONTEXT_COURSE, $course->id);
+    $changegroup = optional_param('group', -1, PARAM_INT);   // choose the current group
+    $groupmode = groupmode($course);
+    $currentgroup = get_and_set_current_group($course, $groupmode, $changegroup);   
+    
+    /// Now we need a menu for separategroups as well!
+    if ($groupmode == VISIBLEGROUPS || ($groupmode
+        && has_capability('moodle/site:accessallgroups', $context))) {
+        
+        //the following query really needs to change
+        if ($groups = groups_get_groups_names($course->id)) { //TODO:
+            print_box_start('groupmenu');
+            print_group_menu($groups, $groupmode, $currentgroup, 'index.php?id='.$course->id);
+            print_box_end(); // groupmenu
+        }
+    }
+
     grade_set_uncategorized();
 
     if (has_capability('moodle/course:viewcoursegrades', get_context_instance(CONTEXT_COURSE, $course->id))) {
diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php
index 6511206d267..63ea7112fc5 100644
--- a/mod/assignment/lib.php
+++ b/mod/assignment/lib.php
@@ -995,14 +995,38 @@ class assignment_base {
         add_to_log($course->id, 'assignment', 'view submission', 'submissions.php?id='.$this->assignment->id, $this->assignment->id, $this->cm->id);
         
         print_header_simple(format_string($this->assignment->name,true), "", '<a href="index.php?id='.$course->id.'">'.$this->strassignments.'</a> -> <a href="view.php?a='.$this->assignment->id.'">'.format_string($this->assignment->name,true).'</a> -> '. $this->strsubmissions, '', '', true, update_module_button($cm->id, $course->id, $this->strassignment), navmenu($course, $cm));
-    
+
     ///Position swapped
+    /*
         if ($groupmode = groupmode($course, $cm)) {   // Groups are being used
             $currentgroup = setup_and_print_groups($course, $groupmode, 'submissions.php?id='.$this->cm->id);
         } else {
             $currentgroup = false;
         }
-
+    */
+        
+        /// copied code from assignment module, if this is not the way to do this please change it
+        /// the above code does not work
+        /// set_and_print_groups() is not fully implemented as function groups_instance_print_grouping_selector()
+        /// and function groups_instance_print_group_selector() are missing.
+       
+        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+        $changegroup = optional_param('group', -1, PARAM_INT);   // choose the current group
+        $groupmode = groupmode($course, $cm);
+        $currentgroup = get_and_set_current_group($course, $groupmode, $changegroup);   
+    
+        /// Now we need a menu for separategroups as well!
+        if ($groupmode == VISIBLEGROUPS || ($groupmode
+            && has_capability('moodle/site:accessallgroups', $context))) {
+        
+            //the following query really needs to change
+            if ($groups = groups_get_groups_names($course->id)) { //TODO:
+                print_box_start('groupmenu');
+                print_group_menu($groups, $groupmode, $currentgroup, 'submissions.php?id='.$this->cm->id);
+                print_box_end(); // groupmenu
+            }
+        }
+   
     /// Get all teachers and students
         if ($currentgroup) {
             $users = get_group_users($currentgroup);
diff --git a/mod/quiz/report/overview/report.php b/mod/quiz/report/overview/report.php
index e43af86d1a1..e1a9c2b83a7 100644
--- a/mod/quiz/report/overview/report.php
+++ b/mod/quiz/report/overview/report.php
@@ -67,6 +67,7 @@ class quiz_report extends quiz_default_report {
             }
         }
         
+        /* 
         // Check to see if groups are being used in this quiz
         if ($groupmode = groupmode($course, $cm)) {   // Groups are being used
             if (!$download) {
@@ -79,6 +80,29 @@ class quiz_report extends quiz_default_report {
         } else {
             $currentgroup = false;
         }
+        */
+        
+        /// copied code from assignment module, if this is not the way to do this please change it
+        /// the above code does not work
+        /// set_and_print_groups() is not fully implemented as function groups_instance_print_grouping_selector()
+        /// and function groups_instance_print_group_selector() are missing.
+       
+        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+        $changegroup = optional_param('group', -1, PARAM_INT);   // choose the current group
+        $groupmode = groupmode($course, $cm);
+        $currentgroup = get_and_set_current_group($course, $groupmode, $changegroup);   
+    
+        /// Now we need a menu for separategroups as well!
+        if ($groupmode == VISIBLEGROUPS || ($groupmode
+            && has_capability('moodle/site:accessallgroups', $context))) {
+        
+            //the following query really needs to change
+            if ($groups = groups_get_groups_names($course->id)) { //TODO:
+                print_box_start('groupmenu');
+                print_group_menu($groups, $groupmode, $currentgroup, "report.php?id=$cm->id&amp;mode=overview");
+                print_box_end(); // groupmenu
+            }
+        }
 
         // Set table options
         $noattempts = optional_param('noattempts', 0, PARAM_INT);
@@ -300,8 +324,7 @@ class quiz_report extends quiz_default_report {
                 $from  = 'FROM '.$CFG->prefix.'user u JOIN '.$CFG->prefix.'role_assignments ra ON ra.userid = u.id '.
                     groups_members_join_sql().
                     'JOIN '.$CFG->prefix.'quiz_attempts qa ON u.id = qa.userid AND qa.quiz = '.$quiz->id;
-                $where = ' WHERE ra.contextid ' . $contextlists . ' AND '. groups_members_where_sql($currentgroup) .' AND qa.preview = 0';
-                                
+                $where = ' WHERE ra.contextid ' . $contextlists . ' AND '. groups_members_where_sql($currentgroup) .' AND qa.preview = 0';            
             } else if (!empty($currentgroup) && !empty($noattempts)) {
                 // We want a particular group and we want to do something funky with attempts
                 // So join on groups_members and left join on attempts... 
@@ -403,7 +426,7 @@ class quiz_report extends quiz_default_report {
         if (!empty($from)) { // if we're in the site course and displaying no attempts, it makes no sense to do the query.
             if (!$download) {
                 $attempts = get_records_sql($select.$from.$where.$sort,
-                                        $table->get_page_start(), $table->get_page_size());
+                                        $table->get_page_start(), $table->get_page_size());                
             } else {
                 $attempts = get_records_sql($select.$from.$where.$sort);
             }
diff --git a/mod/workshop/view.php b/mod/workshop/view.php
index 688b930f271..df70c59bddf 100644
--- a/mod/workshop/view.php
+++ b/mod/workshop/view.php
@@ -301,9 +301,33 @@
         }
 
         /// Check to see if groups are being used in this workshop
+        /*
         setup_and_print_groups($course, groupmode($course, $cm), "view.php?id=$cm->id");
         $currentgroup = get_current_group($course->id);
-
+        */
+        
+        /// copied code from assignment module, if this is not the way to do this please change it
+        /// the above code does not work
+        /// set_and_print_groups() is not fully implemented as function groups_instance_print_grouping_selector()
+        /// and function groups_instance_print_group_selector() are missing.
+       
+        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+        $changegroup = optional_param('group', -1, PARAM_INT);   // choose the current group
+        $groupmode = groupmode($course, $cm);
+        $currentgroup = get_and_set_current_group($course, $groupmode, $changegroup);   
+    
+        /// Now we need a menu for separategroups as well!
+        if ($groupmode == VISIBLEGROUPS || ($groupmode
+            && has_capability('moodle/site:accessallgroups', $context))) {
+        
+            //the following query really needs to change
+            if ($groups = groups_get_groups_names($course->id)) { //TODO:
+                print_box_start('groupmenu');
+                print_group_menu($groups, $groupmode, $currentgroup, "view.php?id=$cm->id");
+                print_box_end(); // groupmenu
+            }
+        }
+        
         /// Print admin links
         echo "<table width=\"100%\"><tr><td>";
         echo "<a href=\"submissions.php?id=$cm->id&amp;action=adminlist\">".