Index: /trunk/include/platform.h
===================================================================
--- /trunk/include/platform.h	(revision 812)
+++ /trunk/include/platform.h	(revision 813)
@@ -479,4 +479,6 @@
 short shooting_get_ev_correction1();
 
+//image_quality_override
+void shooting_set_image_quality(int imq);
 
 int get_ev_video_avail(void);
Index: /trunk/include/conf.h
===================================================================
--- /trunk/include/conf.h	(revision 812)
+++ /trunk/include/conf.h	(revision 813)
@@ -149,4 +149,5 @@
     int fast_ev;
     int fast_ev_step;
+    int fast_image_quality;
     int fast_movie_control;
     int fast_movie_quality_control;
Index: /trunk/include/camera.h
===================================================================
--- /trunk/include/camera.h	(revision 812)
+++ /trunk/include/camera.h	(revision 813)
@@ -90,5 +90,6 @@
     #define EDGE_HMARGIN 0  //define sup and inf screen margins on edge overlay without overlay.  Necessary to save memory buffer space. sx200is needs values other than 0
     // end of section by nandoid
-
+    
+    #undef CAM_QUALITY_OVERRIDE //camera may need shooting quality override (sx200is lacks SuperFine quality)
 //----------------------------------------------------------
 // Overridden values for each camera
@@ -2141,4 +2142,5 @@
       
    //end nandoide sept-2009
+   #define CAM_QUALITY_OVERRIDE 1
 //----------------------------------------------------------
 #else
Index: /trunk/platform/generic/shooting.c
===================================================================
--- /trunk/platform/generic/shooting.c	(revision 812)
+++ /trunk/platform/generic/shooting.c	(revision 813)
@@ -916,4 +916,13 @@
     return evc1;
 }
+
+#if CAM_QUALITY_OVERRIDE
+void shooting_set_image_quality(int imq)
+{
+  if (imq != 3){
+    _SetPropertyCase(PROPCASE_QUALITY, &imq, sizeof(imq));
+  }
+}
+#endif
 
 int shooting_get_zoom() {
@@ -1312,5 +1321,9 @@
 
   shooting_set_flash_video_override(conf.flash_manual_override,conf.flash_video_override_power);
-
+#if CAM_QUALITY_OVERRIDE
+ // this doesn't really need to be set in the override hook. 
+ // should only need to be set once if the users doesn't change back, but doing it here ensures it is set
+ shooting_set_image_quality(conf.fast_image_quality);
+#endif
  asm volatile("LDMFD   SP!, {R0-R12,PC}\n");
 }
Index: /trunk/core/gui_lang.c
===================================================================
--- /trunk/core/gui_lang.c	(revision 812)
+++ /trunk/core/gui_lang.c	(revision 813)
@@ -575,5 +575,5 @@
 "452 \"Restart Camera...\"\n"
 "453 \"Force manual flash\"\n"
-
+"454 \"Quality override\"\n"
 ;
 
Index: /trunk/core/conf.c
===================================================================
--- /trunk/core/conf.c	(revision 812)
+++ /trunk/core/conf.c	(revision 813)
@@ -399,4 +399,6 @@
     CONF_INFO(235, conf.dng_usb_ext,     CONF_DEF_VALUE, i:0, conf_change_dng_ext),
     CONF_INFO(236, conf.flash_manual_override,     CONF_DEF_VALUE, i:0, NULL),
+    //image_quality_override
+    CONF_INFO(237, conf.fast_image_quality,     CONF_DEF_VALUE, i:3, NULL),
     };
 #define CONF_NUM (sizeof(conf_info)/sizeof(conf_info[0]))
Index: /trunk/core/gui_lang.h
===================================================================
--- /trunk/core/gui_lang.h	(revision 812)
+++ /trunk/core/gui_lang.h	(revision 813)
@@ -564,7 +564,8 @@
 #define LANG_MENU_RESTART_CAMERA         452
 #define LANG_MENU_FLASH_MANUAL_OVERRIDE        453
+#define LANG_MENU_MISC_IMAGE_QUALITY	454
 //-------------------------------------------------------------------
 
-#define GUI_LANG_ITEMS                  453
+#define GUI_LANG_ITEMS                  454
 
 //-------------------------------------------------------------------
Index: /trunk/core/gui.c
===================================================================
--- /trunk/core/gui.c	(revision 812)
+++ /trunk/core/gui.c	(revision 813)
@@ -203,4 +203,7 @@
 static const char* gui_video_mode_enum(int change, int arg);
 static const char* gui_fast_ev_step(int change, int arg);
+#if CAM_QUALITY_OVERRIDE
+static const char* gui_fast_image_quality(int change, int arg);
+#endif
 static const char* gui_video_bitrate_enum(int change, int arg);
 static const char* gui_tv_bracket_values_enum(int change, int arg);
@@ -617,5 +620,7 @@
     {0x5c, LANG_MENU_FLASH_VIDEO_OVERRIDE, MENUITEM_BOOL,   &conf.flash_video_override},
 #endif
-
+#if CAM_QUALITY_OVERRIDE
+    {0x5c,LANG_MENU_MISC_IMAGE_QUALITY,    MENUITEM_ENUM,    (int*)gui_fast_image_quality },
+#endif
     {0x51,LANG_MENU_BACK,                     MENUITEM_UP },
     {0}
@@ -1482,4 +1487,16 @@
     return modes[conf.fast_ev_step];
 }
+#if CAM_QUALITY_OVERRIDE
+const char* gui_fast_image_quality(int change, int arg) {
+    static const char* modes[]={"sup.fine","fine","normal","off"};
+    conf.fast_image_quality+=change;
+    if (conf.fast_image_quality<0)
+        conf.fast_image_quality=(sizeof(modes)/sizeof(modes[0]))-1;
+    else if (conf.fast_image_quality>=(sizeof(modes)/sizeof(modes[0])))
+        conf.fast_image_quality=0;
+    return modes[conf.fast_image_quality];
+}
+#endif
+
 const char* gui_video_mode_enum(int change, int arg) {
 #if !CAM_VIDEO_QUALITY_ONLY
