Index: mod/assignment/type/offline/assignment.class.php
===================================================================
--- mod/assignment/type/offline/assignment.class.php	(revision 1674)
+++ mod/assignment/type/offline/assignment.class.php	(working copy)
@@ -66,7 +66,7 @@
         if (!$grading_info->items[0]->grades[$feedback->userid]->locked and
             !$grading_info->items[0]->grades[$feedback->userid]->overridden) {
 
-            $submission->grade      = $feedback->grade;
+            $submission->grade      = ($feedback->grade == '') ? -1 : $feedback->grade;
             $submission->submissioncomment    = $feedback->submissioncomment;
             $submission->format     = $feedback->format;
             $submission->teacher    = $USER->id;
Index: mod/assignment/lib.php
===================================================================
--- mod/assignment/lib.php	(revision 1674)
+++ mod/assignment/lib.php	(working copy)
@@ -559,6 +559,7 @@
 
                     if ($grading) {
                         $grade = $_POST['menu'][$id];
+                        $grade = ($grade == '') ? -1 : $grade;
                         $updatedb = $updatedb || ($submission->grade != $grade);
                         $submission->grade = $grade;
                     } else {
@@ -671,8 +672,13 @@
         if (empty($SESSION->flextable['mod-assignment-submissions']->collapse['grade'])) {
             //echo optional_param('menuindex');
             if ($quickgrade){
-                $output.= 'opener.document.getElementById("menumenu'.$submission->userid.
-                '").selectedIndex="'.optional_param('menuindex', 0, PARAM_INT).'";'."\n";
+                if ($this->assignment->grade < 1) {
+                    $output.= 'opener.document.getElementById("menumenu'.$submission->userid.
+                    '").selectedIndex="'.optional_param('menuindex', 0, PARAM_INT).'";'."\n";
+                } else {
+                    $output.= 'opener.document.getElementById("tfmenu'.$submission->userid.
+                    '").value="'.$submission->grade.'";'."\n";
+                }
             } else {
                 $output.= 'opener.document.getElementById("g'.$submission->userid.'").innerHTML="'.
                 $this->display_grade($submission->grade)."\";\n";
@@ -898,7 +904,11 @@
             echo '</div>';
         }
         echo '<div class="grade"><label for="menugrade">'.get_string('grade').'</label> ';
-        choose_from_menu(make_grades_menu($this->assignment->grade), 'grade', $submission->grade, get_string('nograde'), '', -1, false, $disabled);
+        if ($this->assignment->grade < 1) {
+            choose_from_menu(make_grades_menu($this->assignment->grade), 'grade', $submission->grade, get_string('nograde'), '', -1, false, $disabled);
+        } else {
+            print_textfield('grade', ($submission->grade == -1) ? '' : $submission->grade, '', 10, 10, false, $disabled);
+        }
         echo '</div>';
 
         echo '<div class="clearer"></div>';
@@ -1204,9 +1214,15 @@
                         if ($final_grade->locked or $final_grade->overridden) {
                             $grade = '<div id="g'.$auser->id.'" class="'. $locked_overridden .'">'.$final_grade->formatted_grade.'</div>';
                         } else if ($quickgrade) {
-                            $menu = choose_from_menu(make_grades_menu($this->assignment->grade),
-                                                     'menu['.$auser->id.']', $auser->grade,
-                                                     get_string('nograde'),'',-1,true,false,$tabindex++);
+                            if ($this->assignment->grade < 1) {
+                                $menu = choose_from_menu(make_grades_menu($this->assignment->grade),
+                                                         'menu['.$auser->id.']', $auser->grade,
+                                                         get_string('nograde'),'',-1,true,false,$tabindex++);
+                            } else {
+                                $menu = print_textfield('menu['.$auser->id.']',
+                                                           ($auser->grade == -1) ? '' : $auser->grade,
+                                                           '', 10, 10, true, false, $tabindex++, 'tfmenu'.$auser->id);
+                            }
                             $grade = '<div id="g'.$auser->id.'">'. $menu .'</div>';
                         } else {
                             $grade = '<div id="g'.$auser->id.'">'.$this->display_grade($auser->grade).'</div>';
@@ -1217,9 +1233,15 @@
                         if ($final_grade->locked or $final_grade->overridden) {
                             $grade = '<div id="g'.$auser->id.'" class="'. $locked_overridden .'">'.$final_grade->formatted_grade.'</div>';
                         } else if ($quickgrade) {
-                            $menu = choose_from_menu(make_grades_menu($this->assignment->grade),
-                                                     'menu['.$auser->id.']', $auser->grade,
-                                                     get_string('nograde'),'',-1,true,false,$tabindex++);
+                            if ($this->assignment->grade < 1) {
+                                $menu = choose_from_menu(make_grades_menu($this->assignment->grade),
+                                                         'menu['.$auser->id.']', $auser->grade,
+                                                         get_string('nograde'),'',-1,true,false,$tabindex++);
+                            } else {
+                                $menu = print_textfield('menu['.$auser->id.']',
+                                                         ($auser->grade == -1) ? '' : $auser->grade,
+                                                           '', 10, 10, true, false, $tabindex++, 'tfmenu'.$auser->id);
+                            }
                             $grade = '<div id="g'.$auser->id.'">'.$menu.'</div>';
                         } else {
                             $grade = '<div id="g'.$auser->id.'">'.$this->display_grade($auser->grade).'</div>';
@@ -1244,9 +1266,15 @@
                     if ($final_grade->locked or $final_grade->overridden) {
                         $grade = '<div id="g'.$auser->id.'">'.$final_grade->formatted_grade . '</div>';
                     } else if ($quickgrade) {   // allow editing
-                        $menu = choose_from_menu(make_grades_menu($this->assignment->grade),
-                                                 'menu['.$auser->id.']', $auser->grade,
-                                                 get_string('nograde'),'',-1,true,false,$tabindex++);
+                        if ($this->assignment->grade < 1) {
+                            $menu = choose_from_menu(make_grades_menu($this->assignment->grade),
+                                                     'menu['.$auser->id.']', $auser->grade,
+                                                     get_string('nograde'),'',-1,true,false,$tabindex++);
+                        } else {
+                            $menu = print_textfield('menu['.$auser->id.']',
+                                                     ($auser->grade == -1) ? '' : $auser->grade,
+                                                           '', 10, 10, true, false, $tabindex++, 'tfmenu'.$auser->id);
+                        }
                         $grade = '<div id="g'.$auser->id.'">'.$menu.'</div>';
                     } else {
                         $grade = '<div id="g'.$auser->id.'">-</div>';
@@ -1402,7 +1430,7 @@
         if (!$grading_info->items[0]->grades[$feedback->userid]->locked and
             !$grading_info->items[0]->grades[$feedback->userid]->overridden) {
 
-            $submission->grade      = $feedback->grade;
+            $submission->grade      = ($feedback->grade == '') ? -1 : $feedback->grade;
             $submission->submissioncomment    = $feedback->submissioncomment;
             $submission->format     = $feedback->format;
             $submission->teacher    = $USER->id;
@@ -1435,7 +1463,7 @@
         return $submission;
 
     }
-
+    
     function process_outcomes($userid) {
         global $CFG, $USER;
 

