Index: /trunk/platform/ixus300_sd4000/sub/100d/stubs_entry_2.S
===================================================================
--- /trunk/platform/ixus300_sd4000/sub/100d/stubs_entry_2.S	(revision 1295)
+++ /trunk/platform/ixus300_sd4000/sub/100d/stubs_entry_2.S	(revision 1296)
@@ -175,4 +175,12 @@
 
 
+# Addresses for firmware task handlers (used in taskHook)
+//DEF(task_CaptSeq,               0xFF87D2D8)        // OK, finsig2
+//DEF(task_InitFileModules,       0xFF8995E0)        // OK, finsig2
+//DEF(task_RotaryEncoder,         0xFF861B68)        // OK, finsig2
+//DEF(task_MovieRecord,           0xFF96BD30)        // OK, finsig2
+//DEF(task_ExpDrv,                0xFF8C25DC)        // OK, finsig2
+
+
 // DEBUG Stuff
 NHSTUB(GetLogToFile, 0xFF975780)                     // this is where Event Procedure does jump (native call does shutdown camera), like G11
Index: /trunk/platform/ixus300_sd4000/sub/100d/boot.c
===================================================================
--- /trunk/platform/ixus300_sd4000/sub/100d/boot.c	(revision 1295)
+++ /trunk/platform/ixus300_sd4000/sub/100d/boot.c	(revision 1296)
@@ -15,14 +15,23 @@
 void boot();
 
-void taskHook(context_t **context) {    //#fs
+extern void task_CaptSeq();
+extern void task_InitFileModules();
+extern void task_RotaryEncoder();
+extern void task_MovieRecord();
+extern void task_ExpDrv();
+
+// almost the same as SX30 / G12
+
+void taskHook(context_t **context) {
     task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
 
-    //if(!_strcmp(tcb->name, "PhySw"))           tcb->entry = (void*)mykbd_task;    // cause crash with large scripts because we hook task without increased stack size
-    if(!_strcmp(tcb->name, "CaptSeqTask"))     tcb->entry = (void*)capt_seq_task;
-    if(!_strcmp(tcb->name, "InitFileModules")) tcb->entry = (void*)init_file_modules_task;
-    if(!_strcmp(tcb->name, "MovieRecord"))     tcb->entry = (void*)movie_record_task;   // ToDo: working?
-    if(!_strcmp(tcb->name, "ExpDrvTask"))      tcb->entry = (void*)exp_drv_task;
-    if(!_strcmp(tcb->name, "RotarySw"))        tcb->entry = (void*)JogDial_task_my;
-}    //#fe
+    // Replace firmware task addresses
+    // since we create our own PhySw Task (taskcreatePhySw_my), no need to hook it
+    if(tcb->entry == (void*)task_CaptSeq)           tcb->entry = (void*)capt_seq_task;
+    if(tcb->entry == (void*)task_InitFileModules)   tcb->entry = (void*)init_file_modules_task;
+    if(tcb->entry == (void*)task_RotaryEncoder)     tcb->entry = (void*)JogDial_task_my;
+    if(tcb->entry == (void*)task_MovieRecord)       tcb->entry = (void*)movie_record_task;
+    if(tcb->entry == (void*)task_ExpDrv)            tcb->entry = (void*)exp_drv_task;
+}
 
 void CreateTask_spytask() {    //#fs
