Index: branches/release-1_0/platform/sx150is/sub/100a/stubs_entry.S
===================================================================
--- branches/release-1_0/platform/sx150is/sub/100a/stubs_entry.S	(revision 1528)
+++ branches/release-1_0/platform/sx150is/sub/100a/stubs_entry.S	(revision 1530)
@@ -33,4 +33,8 @@
 //DEF(playrec_mode                            ,0x00002eb8) // Found @0xff8877d0,          stubs_min = 0x00002eb8 (0x00002eb8)
 //DEF(zoom_status                             ,0x0000d520) // Found @0xffafaf48,          stubs_min = 0x0000d520 (0x0000d520)
+// focus_len_table contains zoom focus lengths for use in 'get_focal_length' (main.c).
+// each entry contains 2 int value(s), the first is the zoom focus length.
+// there are 128 entries in the table - set NUM_FL to 128
+DEF(focus_len_table                         ,0xfffeabd8) // Found @0xfffeabd8
 //DEF(zoom_busy                               ,0x00006dcc) // Found @0xff98138c,          stubs_min = 0x00006dcc (0x6DB0+0x1C)
 //DEF(focus_busy                              ,0x00006c5c) // Found @0xff97b73c,          stubs_min = 0x00006c5c (0x6C54+8)
Index: branches/release-1_0/tools/finsig_dryos.c
===================================================================
--- branches/release-1_0/tools/finsig_dryos.c	(revision 1528)
+++ branches/release-1_0/tools/finsig_dryos.c	(revision 1530)
@@ -842,4 +842,6 @@
         cam_idx = (((fw->base==0xFF000000)?0xFFF40190:0xFFFE0170) - fw->base) / 4; 
         pid_idx = (((fw->base==0xFF000000)?0xFFF40040:0xFFFE0040) - fw->base) / 4; 
+        if ((cam_idx < fw->size) && (strncmp((char*)&fw->buf[cam_idx],"Canon ",6) != 0))
+            cam_idx = (((fw->base==0xFF000000)?0xFFF40170:0xFFFE0170) - fw->base) / 4; 
         break;
 	}
@@ -3184,5 +3186,6 @@
             {
                 int mul = 1;
-                if (fw->buf[k+1] == 100) mul = 3;
+                if ((fw->buf[k+1] == 100) && (fw->buf[k+2] == 0)) mul = 3;
+                if ((fw->buf[k+1] == 100) && (fw->buf[k+2] != 0)) mul = 2;
                 for (k1 = k + mul; (k1 < fw->size) && (fw->buf[k1] > fw->buf[k1-mul]) && (fw->buf[k1] != max_focus_len); k1 += mul) ;
                 if (fw->buf[k1] == max_focus_len)
