diff -Naur a/course/lib.php b/course/lib.php
--- a/course/lib.php	2010-09-30 10:34:30.000000000 -0700
+++ b/course/lib.php	2010-09-30 10:34:45.000000000 -0700
@@ -3397,4 +3397,29 @@
     return false;
 }
 
+/**
+ * Checks whether a user is trying to submit a form with groups enabled but without groups in the course.
+ * Used as a callback by modform.
+ * @param integer $groupmode - The group mode being passed by modform
+ *
+ * @return boolean
+ */
+function course_form_check_groups($groupmode) {
+    global $CFG, $COURSE;
+    switch($groupmode) {
+        case NOGROUPS:
+            return true;
+            break;
+        case VISIBLEGROUPS:
+        case SEPARATEGROUPS:
+            if(groups_get_all_groups($COURSE->id) !== false) {
+                return true;
+            } else {
+                return false;
+            }
+            break;
+        default:
+            return true;
+    }
+}
 ?>
diff -Naur a/course/moodleform_mod.php b/course/moodleform_mod.php
--- a/course/moodleform_mod.php	2010-09-30 10:33:17.000000000 -0700
+++ b/course/moodleform_mod.php	2010-09-30 10:34:55.000000000 -0700
@@ -240,6 +240,8 @@
                              VISIBLEGROUPS  => get_string('groupsvisible'));
             $mform->addElement('select', 'groupmode', get_string('groupmode'), $options, NOGROUPS);
             $mform->setHelpButton('groupmode', array('groupmode', get_string('groupmode')));
+            $mform->registerRule('groupsexist', 'callback', 'course_form_check_groups');
+            $mform->addRule('groupmode',get_string('nogroups','group'),'groupsexist');
         }
 
         if (!empty($CFG->enablegroupings)) {
