load_address = Rn;
                }
                
-               if((retval = target_read_u32(target, load_address, &load_value)) != ERROR_OK)
+               if((!dry_run_pc) || (instruction.info.load_store.Rd == 15))
                {
-                       return retval;
+                       if((retval = target_read_u32(target, load_address, &load_value)) != ERROR_OK)
+                       {
+                               return retval;
+                       }
                }
                
                if (dry_run_pc)
                {
                        if (instruction.info.load_store_multiple.register_list & (1 << i))
                        {
-                               target_read_u32(target, Rn, &load_values[i]);
+                               if((!dry_run_pc) || (i == 15))
+                               {
+                                       target_read_u32(target, Rn, &load_values[i]);
+                               }
                                Rn += 4;
                        }
                }