diff -Nur -x '*.orig' -x '*~' grub2-1.98~20100128//util/grub.d/00_header.in grub2-1.98~20100128.new//util/grub.d/00_header.in
--- grub2-1.98~20100128//util/grub.d/00_header.in	2010-01-28 09:37:57.000000000 -0600
+++ grub2-1.98~20100128.new//util/grub.d/00_header.in	2010-02-22 02:56:07.000000000 -0600
@@ -59,19 +59,21 @@
 }
 EOF
 
-case ${GRUB_TERMINAL_INPUT}:${GRUB_TERMINAL_OUTPUT} in
-  serial:* | *:serial)
-    if ! test -e ${grub_prefix}/serial.mod ; then
-      echo "Serial terminal not available on this platform." >&2 ; exit 1
-    fi
+for GRUB_TERMINAL in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT} ; do
+  case ${GRUB_TERMINAL} in
+    serial)
+      if ! test -e ${grub_prefix}/serial.mod ; then
+        echo "Serial terminal not available on this platform." >&2 ; exit 1
+      fi
 
-    if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then
-      grub_warn "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used."
-      GRUB_SERIAL_COMMAND=serial
-    fi
-    echo "${GRUB_SERIAL_COMMAND}"
-  ;;
-esac
+      if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then
+        grub_warn "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used."
+        GRUB_SERIAL_COMMAND=serial
+      fi
+      echo "${GRUB_SERIAL_COMMAND}"
+    ;;
+  esac
+done
 
 case x${GRUB_TERMINAL_INPUT} in
   x)
@@ -89,7 +91,7 @@
 esac
 
 case x${GRUB_TERMINAL_OUTPUT} in
- xgfxterm)
+ x*gfxterm*)
     # Make the font accessible
     prepare_grub_to_access_device `${grub_probe} --target=device ${GRUB_FONT_PATH}`
 
@@ -98,11 +100,22 @@
   set gfxmode=${GRUB_GFXMODE}
   insmod gfxterm
   insmod ${GRUB_VIDEO_BACKEND}
-  if terminal_output gfxterm ; then true ; else
+  if terminal_output ${GRUB_TERMINAL_OUTPUT} ; then true ; else
     # For backward compatibility with versions of terminal.mod that don't
     # understand terminal_output
-    terminal gfxterm
+    terminal ${GRUB_TERMINAL_OUTPUT}
   fi
+EOF
+    FALLBACK_GRUB_TERMINAL_OUTPUT=`echo "${GRUB_TERMINAL_OUTPUT}" | sed 's,\(gfxterm\ *\|\ *gfxterm\),,g'`
+    if [ "x${FALLBACK_GRUB_TERMINAL_OUTPUT}" != "x" ] ; then
+      cat << EOF
+else
+  if terminal_output console ${FALLBACK_GRUB_TERMINAL_OUTPUT} ; then true ; else
+    terminal console ${FALLBACK_GRUB_TERMINAL_OUTPUT}
+  fi
+EOF
+    fi
+    cat << EOF
 fi
 EOF
   ;;
diff -Nur -x '*.orig' -x '*~' grub2-1.98~20100128//util/grub-mkconfig.in grub2-1.98~20100128.new//util/grub-mkconfig.in
--- grub2-1.98~20100128//util/grub-mkconfig.in	2010-01-28 09:37:57.000000000 -0600
+++ grub2-1.98~20100128.new//util/grub-mkconfig.in	2010-02-22 02:46:51.000000000 -0600
@@ -140,60 +140,73 @@
   GRUB_TERMINAL_OUTPUT="${GRUB_TERMINAL}"
 fi
 
-case x${GRUB_TERMINAL_OUTPUT} in
-  x | xgfxterm)
-    # If this platform supports gfxterm, try to use it.
-    if test -e ${grub_prefix}/gfxterm.mod ; then
-      # FIXME: this should do something smarter than just loading first
-      # video backend.
-      GRUB_VIDEO_BACKEND=$(head -n 1 ${grub_prefix}/video.lst || true)
-      if [ -n "${GRUB_VIDEO_BACKEND}" ] ; then
-        GRUB_TERMINAL_OUTPUT=gfxterm
-      elif [ "${GRUB_TERMINAL_OUTPUT}" = "gfxterm" ] ; then
-        echo "No suitable backend could be found for gfxterm." >&2 ; exit 1
+# XXX: replace 'gfxterm' with 'console', gfxterm does not work as an input type
+GRUB_TERMINAL_INPUT=`echo ${GRUB_TERMINAL_INPUT} | sed s,gfxterm,console,`
+
+# XXX: necessary for 'for' loop below
+if [ "x${GRUB_TERMINAL_OUTPUT}" = "x" ] ; then
+  GRUB_TERMINAL_OUTPUT="x"
+fi
+
+BUILD_GRUB_TERMINAL_OUTPUT=""
+for GRUB_TERMINAL in ${GRUB_TERMINAL_OUTPUT} ; do
+  case ${GRUB_TERMINAL} in
+    x | gfxterm)
+      # If this platform supports gfxterm, try to use it.
+      if test -e ${grub_prefix}/gfxterm.mod ; then
+        # FIXME: this should do something smarter than just loading first
+        # video backend.
+        GRUB_VIDEO_BACKEND=$(head -n 1 ${grub_prefix}/video.lst || true)
+        if [ -n "${GRUB_VIDEO_BACKEND}" ] ; then
+          GRUB_TERMINAL=gfxterm
+        elif [ "${GRUB_TERMINAL}" = "gfxterm" ] ; then
+          echo "No suitable backend could be found for gfxterm." >&2 ; exit 1
+        fi
       fi
-    fi
-  ;;
-  xconsole | xserial | xofconsole) ;;
-  *) echo "Invalid output terminal \"${GRUB_TERMINAL_OUTPUT}\"" >&2 ; exit 1 ;;
-esac
+    ;;
+    console | serial | ofconsole) ;;
+    *) echo "Invalid output terminal \"${GRUB_TERMINAL}\"" >&2 ; exit 1 ;;
+  esac
 
-# check for terminals that require fonts
-case ${GRUB_TERMINAL_OUTPUT} in
-  gfxterm)
-    if [ -n "$GRUB_FONT" ] ; then
-      if is_path_readable_by_grub ${GRUB_FONT} > /dev/null ; then
-        GRUB_FONT_PATH=${GRUB_FONT}
+  # check for terminals that require fonts
+  case ${GRUB_TERMINAL} in
+    gfxterm)
+      if [ -n "$GRUB_FONT" ] ; then
+        if is_path_readable_by_grub ${GRUB_FONT} > /dev/null ; then
+          GRUB_FONT_PATH=${GRUB_FONT}
 	else
 	  echo "No such font or not readable by grub: ${GRUB_FONT}" >&2
 	  exit 1
 	fi
-    else
-      for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do
-        for basename in unicode unifont ascii; do
-	  path="${dir}/${basename}.pf2"
-          if is_path_readable_by_grub ${path} > /dev/null ; then
-	    GRUB_FONT_PATH=${path}
-	  else
-	    continue
-	  fi
-	  if [ "${basename}" = "ascii" ] ; then
-	    # make sure all our children behave in conformance with ascii..
-	    export LANG=C
-	  fi
-	  break 2
+      else
+        for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do
+          for basename in unicode unifont ascii; do
+	    path="${dir}/${basename}.pf2"
+            if is_path_readable_by_grub ${path} > /dev/null ; then
+	      GRUB_FONT_PATH=${path}
+	    else
+	      continue
+	    fi
+	    if [ "${basename}" = "ascii" ] ; then
+	      # make sure all our children behave in conformance with ascii..
+	      export LANG=C
+	    fi
+	    break 2
+          done
         done
-      done
-    fi
-    if [ -z "${GRUB_FONT_PATH}" ] ; then
-      # fallback to the native terminal for this platform
-      unset GRUB_TERMINAL_OUTPUT
-    fi
-  ;;
-  *)
-    # make sure all our children behave in conformance with ascii..
-    export LANG=C
-esac
+      fi
+      if [ -z "${GRUB_FONT_PATH}" ] ; then
+        # fallback to the native terminal for this platform
+        unset GRUB_TERMINAL
+      fi
+    ;;
+    *)
+      # make sure all our children behave in conformance with ascii..
+      export LANG=C
+  esac
+  BUILD_GRUB_TERMINAL_OUTPUT="${GRUB_TERMINAL} ${BUILD_GRUB_TERMINAL_OUTPUT}"
+done
+GRUB_TERMINAL_OUTPUT="${BUILD_GRUB_TERMINAL_OUTPUT}"
 
 # These are defined in this script, export them here so that user can
 # override them.
