diff --git a/cMIPS/bin/elf2mif.sh b/cMIPS/bin/elf2mif.sh
index 0ce8139948ea9077d06b9f00c5040d4f36aa37f5..28b7f2f5eb7b286d73cb86d84831167fd7be756f 100755
--- a/cMIPS/bin/elf2mif.sh
+++ b/cMIPS/bin/elf2mif.sh
@@ -44,11 +44,17 @@ fi
    
 elf=$1
 
+
+x_ROM_BASE=$(sed -n '/x_INST_BASE_ADDR/s/.*:= x"\(.*\)".*$/\1/p' $tree/vhdl/packageMemory.vhd)
+
+ROM_BASE=$((16#$x_ROM_BASE))
+
+
 mif=ROM.mif
 
 mips-objdump -z -D -EL --section .text $elf |\
     sed -e '1,6d' -e '/^$/d' -e '/^ /!d' -e 's:\t: :g' -e 's#^ *\([a-f0-9]*\): *\(........\)  *\(.*\)$#\2;#' |\
-    awk 'BEGIN{c=0;} //{ printf "%d : %s\n",c,$1 ; c=c+1; }' > xxxx
+    awk 'BEGIN{c='$ROM_BASE';} //{ printf "%d : %s\n",c,$1 ; c=c+1; }' > xxxx
 
 echo -e "\n-- cMIPS code\n\nDEPTH=4096;\nWIDTH=32;\n\n" > $mif
 echo -e "ADDRESS_RADIX=DEC;\nDATA_RADIX=HEX;\nCONTENT BEGIN" >> $mif 
@@ -57,4 +63,23 @@ echo "END;" >> $mif
 
 rm -f xxxx
 
+
+x_RAM_BASE=$(sed -n '/x_DATA_BASE_ADDR/s/.*:= x"\(.*\)".*$/\1/p' $tree/vhdl/packageMemory.vhd)
+
+RAM_BASE=$((16#$x_RAM_BASE))
+
+mif=RAM.mif
+
+mips-objdump -z -D -EL --section .data --section .rodata --section rodata1 --section .data1 --section .sdata --section .lit8 --section .lit4 --section .sbss --section .bss   $elf |\
+    sed -e '1,6d' -e '/^$/d' -e '/^ /!d' -e 's:\t: :g' -e 's#^ *\([a-f0-9]*\): *\(........\)  *\(.*\)$#\2;#' |\
+    awk 'BEGIN{c='$RAM_BASE';} //{ printf "%d : %s\n",c,$1 ; c=c+1; }' > xxxx
+
+echo -e "\n-- cMIPS data\n\nDEPTH=4096;\nWIDTH=32;\n\n" > $mif
+echo -e "ADDRESS_RADIX=DEC;\nDATA_RADIX=HEX;\nCONTENT BEGIN" >> $mif 
+cat xxxx >> $mif
+echo "END;" >> $mif
+
+rm -f xxxx
+
+
 exit 0
diff --git a/cMIPS/tests/doTests.sh b/cMIPS/tests/doTests.sh
index de6d677c76a84388c141843cc3beab0787aa2910..c4a4dd46555af4a39f9f94b8b240b782d1589a7e 100755
--- a/cMIPS/tests/doTests.sh
+++ b/cMIPS/tests/doTests.sh
@@ -70,7 +70,7 @@ a_FUN="jaljr jr_2 jal_fun_jr jalr_jr bltzal_fun_jr"
 a_OTH="mult div sll slr movz wsbh_seb extract insert"
 a_BHW="lbsb lhsh lwsw lwswIncr swlw lwl_lwr"
 a_MEM="lwSweepRAM"
-a_CTR="teq_tne teq_jal tlt_tlti tltu_tgeu eiDI ll_sc overflow counter"
+a_CTR="teq_tne teq_jal teq_lw tlt_tlti tltu_tgeu eiDI ll_sc overflow counter"
 a_COP="mtc0CAUSE2 mtc0EPC syscall break mfc0CONFIG badVAddr badVAddrMM"
 a_MMU="mmu_index mmu_tlbwi mmu_tlbp mmu_tlbwr mmu_context"
 a_EXC="mmu_refill mmu_refill2 mmu_refill3 mmu_inval mmu_inval2 mmu_mod mmu_mod2 mmu_double mmu_double2"
diff --git a/cMIPS/tests/teq_jal.s b/cMIPS/tests/teq_jal.s
index b3ac06a929b1792a8964a4391453ce2ba47c90d4..2e9cf9ef0b82643929d23833abaae1f8753d2c92 100644
--- a/cMIPS/tests/teq_jal.s
+++ b/cMIPS/tests/teq_jal.s
@@ -59,7 +59,7 @@ _excp_0100:
 excp_180:	
 _excp_180:
 	##
-	## print CAUSE, reset counter, decrement iteration control
+	## print CAUSE
 	##
         mfc0  $k0, cop0_CAUSE
 	andi  $k1, $k0, 0x0030
@@ -71,8 +71,6 @@ _excp_180:
 	sw    $k1, x_IO_ADDR_RANGE($15) # print CAUSE.exCode
 	li    $k1, '\n'
 	sw    $k1, x_IO_ADDR_RANGE($15)
-	li    $5, 0
-	addiu $7, $7, -1        	# decrement iteration control
 
 	mfc0  $k1, cop0_EPC		# move EPC beyond the JAL
 	addi  $k1, $k1, 8
@@ -82,7 +80,7 @@ _excp_180:
 	li    $k1, -16                  # ffff.fff0
 	and   $k0, $k0, $k1
 	mtc0  $k0, cop0_STATUS
-excp_180ret:
+
 	eret
 	.end _excp_180
 
@@ -133,10 +131,10 @@ main:	la    $15, x_IO_BASE_ADDR # print out address (simulator's stdout)
 	##
 	li    $9, '\n'
 	sw    $9, x_IO_ADDR_RANGE($15)     # print out '\n' to separate tests
-	li $31,'!'
-	teq $0,$0
-	jal check3
-	nop
+	li  $31, '!'		# put wrong return address in $31
+	teq $0,$0		#  then trap
+	jal wrong1		#    then DO NOT execute the JAL
+	nop			#    as handler skips that instruction
 	nop
 	nop
 	nop
diff --git a/cMIPS/tests/uart_irx.c b/cMIPS/tests/uart_irx.c
index 7e3e40c4695f4b9d4b4fd8a86ddc37306c04ee6f..d783b6ecca398a95433efb09b2291c324ca4321f 100644
--- a/cMIPS/tests/uart_irx.c
+++ b/cMIPS/tests/uart_irx.c
@@ -45,6 +45,7 @@ typedef struct serial {
 
 extern int _uart_buff[16];
 
+
 int main(void) { // receive a string through the UART serial interface
   volatile Tserial *uart;  // tell GCC not to optimize away code
   Tcontrol ctrl;
diff --git a/cMIPS/vhdl/core.vhd b/cMIPS/vhdl/core.vhd
index 91c191e75674aaa71794b975cf748ab3d53b7520..5ec67f0a5f61a95f08b68d72e059b898492323d9 100644
--- a/cMIPS/vhdl/core.vhd
+++ b/cMIPS/vhdl/core.vhd
@@ -89,8 +89,6 @@ architecture rtl of core is
          MM_cop0_reg:   out reg5;
          EX_cop0_sel:   in  reg3;
          MM_cop0_sel:   out reg3;
-         EX_can_trap:   in  std_logic_vector;
-         MM_can_trap:   out std_logic_vector;
          EX_PC:         in  std_logic_vector;
          MM_PC:         out std_logic_vector;
          EX_v_addr:     in  std_logic_vector;
@@ -161,7 +159,7 @@ architecture rtl of core is
   signal EX_trapped, MM_trapped, EX_ovfl,MM_ex_ovfl, trap_taken: boolean;
   signal int_req, MM_int_req: reg8;
   signal EX_nmi,MM_nmi : std_logic;
-  signal can_trap,EX_can_trap,MM_can_trap: reg2;
+  signal can_trap,EX_can_trap : reg2;
   signal is_trap, tr_signed, tr_stall: std_logic;
   signal tr_is_equal, tr_less_than: std_logic;
   signal tr_fwd_A, tr_fwd_B, tr_result : reg32;
@@ -1758,8 +1756,7 @@ begin
   PIPESTAGE_EXCP_EX_MM: reg_excp_EX_MM
     port map (clk, rst, excp_EX_MM_ld,
               EX_cop0_reg, MM_cop0_reg, EX_cop0_sel, MM_cop0_sel,
-              EX_can_trap,MM_can_trap, EX_PC,MM_PC,
-              v_addr,MM_v_addr, nullify,MM_nullify,
+              EX_PC,MM_PC, v_addr,MM_v_addr, nullify,MM_nullify,
               addrError,MM_addrError, addrErr_stage_mm,MM_addrErr_stage_mm,
               mem_excp_type,MM_mem_excp_type, EX_is_delayslot,MM_is_delayslot,
               EX_ovfl,MM_ex_ovfl, EX_trapped,MM_trapped,
diff --git a/cMIPS/vhdl/exception.vhd b/cMIPS/vhdl/exception.vhd
index 9870612e9fdd4fc5c9901e49df36b66497cb6951..bc11588588b42fd23485fc4c769c5b7dded6502c 100644
--- a/cMIPS/vhdl/exception.vhd
+++ b/cMIPS/vhdl/exception.vhd
@@ -122,8 +122,6 @@ entity reg_excp_EX_MM is
        MM_cop0_reg:   out reg5;
        EX_cop0_sel:   in  reg3;
        MM_cop0_sel:   out reg3;
-       EX_can_trap:   in  reg2;
-       MM_can_trap:   out reg2;
        EX_PC:         in  reg32;
        MM_PC:         out reg32;
        EX_v_addr:     in  reg32;
@@ -171,7 +169,6 @@ begin
   process(clk, rst, ld)
   begin
     if rst = '0' then
-      MM_can_trap       <= b"00";
       MM_trapped        <= FALSE;
       MM_pc_abort       <= FALSE;
       MM_nullify        <= FALSE;
@@ -183,7 +180,6 @@ begin
       if ld = '0' then
         MM_cop0_reg      <= EX_cop0_reg    ;
         MM_cop0_sel      <= EX_cop0_sel    ;
-        MM_can_trap      <= EX_can_trap    ;
         MM_PC            <= EX_PC          ;
         MM_v_addr        <= EX_v_addr      ;
         MM_nullify       <= nullify        ;
diff --git a/cMIPS/vhdl/packageMemory.vhd b/cMIPS/vhdl/packageMemory.vhd
index 5cf5c4cd9845b65a7c9cfca36d4ac4234497dd4a..b67e3b2c8c2ad5aa8cfde1b8204f6550abe5c01b 100644
--- a/cMIPS/vhdl/packageMemory.vhd
+++ b/cMIPS/vhdl/packageMemory.vhd
@@ -47,10 +47,10 @@ package p_MEMORY is
   constant x_IO_BASE_ADDR   : reg32   := x"0F000000";
   constant x_IO_MEM_SZ      : reg32   := x"00002000";
   constant x_IO_ADDR_RANGE  : reg32   := x"00000020";
-  constant x_EXCEPTION_0000 : reg32   := x"00000130";  -- TLB refill
-  constant x_EXCEPTION_0100 : reg32   := x"00000200";  -- Cache Error
-  constant x_EXCEPTION_0180 : reg32   := x"00000280";  -- general exc hndlr
-  constant x_EXCEPTION_0200 : reg32   := x"00000400";  -- separ interr hndlr
+  constant x_EXCEPTION_0000 : reg32   := x"00000130";  -- TLBrefill
+  constant x_EXCEPTION_0100 : reg32   := x"00000200";  -- CacheError
+  constant x_EXCEPTION_0180 : reg32   := x"00000280";  -- generalExcpHandler
+  constant x_EXCEPTION_0200 : reg32   := x"00000400";  -- separInterrHandler
   constant x_EXCEPTION_BFC0 : reg32   := x"000004E0";  -- NMI, soft-reset
   constant x_ENTRY_POINT    : reg32   := x"00000500";  -- main()
   -- end DO NOT change these names --