int i;
        arm_instruction_t cur_instruction;
        u32 opcode;
+       u16 thumb_opcode;
        int thumb = 0;
 
        if (armv4_5->common_magic != ARMV4_5_COMMON_MAGIC)
 
        for (i = 0; i < count; i++)
        {
-               if((retval = target_read_u32(target, address, &opcode)) != ERROR_OK)
+               if(thumb)
                {
-                       return retval;
+                       if((retval = target_read_u16(target, address, &thumb_opcode)) != ERROR_OK)
+                       {
+                               return retval;
+                       }
+                       if((retval = thumb_evaluate_opcode(thumb_opcode, address, &cur_instruction)) != ERROR_OK)
+                       {
+                               return retval;
+                       }
                }
-               if((retval = arm_evaluate_opcode(opcode, address, &cur_instruction)) != ERROR_OK)
-               {
-                       return retval;
+               else {
+                       if((retval = target_read_u32(target, address, &opcode)) != ERROR_OK)
+                       {
+                               return retval;
+                       }
+                       if((retval = arm_evaluate_opcode(opcode, address, &cur_instruction)) != ERROR_OK)
+                       {
+                               return retval;
+                       }
                }
                command_print(cmd_ctx, "%s", cur_instruction.text);
                address += (thumb) ? 2 : 4;