diff --git a/cMIPS/tests/handlerUART.s b/cMIPS/tests/handlerUART.s
index 806c52f5647d6164ab0ca820e99befa831898ed4..6b4a9981a93823adfa8c727a668ff434b2c9b397 100644
--- a/cMIPS/tests/handlerUART.s
+++ b/cMIPS/tests/handlerUART.s
@@ -9,9 +9,6 @@ RX:
     ori   $a0, $a0, %lo(Ud)     # $a0 <- Ud
     
     lw    $a1, 48($a0)          # Read nrx
-    
-    la  $2,x_IO_BASE_ADDR 
-    sw  $a1,0($2)               # Print for debug
 
     addiu $k1, $zero, 16
     slt   $k1, $a1, $k1         # If nrx >= 16 the queue is full
@@ -30,12 +27,13 @@ RX:
     
     lui   $a1, %hi(HW_uart_addr)
     ori   $a1, $a1, %lo(HW_uart_addr)
-    lbu    $k1, 4($a1)           # Read data
+    lbu   $k1, 4($a1)           # Read data
     nop
     sb    $k1, 0($a0)           # Put data on RX_queue tail
 
-    la  $2,x_IO_BASE_ADDR 
-    sw  $a0,0($2)               # Print for debug
+    # lui $a0, %hi(x_IO_BASE_ADDR)
+    # ori $a0, $a0, %lo(x_IO_BASE_ADDR)
+    # sw  $k1, 0($a0)               # Print for debug
 
 
 
diff --git a/cMIPS/tests/uart.c b/cMIPS/tests/uart.c
index 76915cc21bc8d709b1ed45b686d64e21fcbe3853..111bad6a5b3856b730a2f959a2ef647b7b0cb1e6 100644
--- a/cMIPS/tests/uart.c
+++ b/cMIPS/tests/uart.c
@@ -61,26 +61,26 @@ int Putc(char);            // inserts char in queue, decrements ntx
 void initUd();
 
 extern UARTDriver Ud;
+volatile Tserial *uart;
 
 int main(){
     int i;
     volatile int state;    // tell GCC not to optimize away code
-    volatile Tserial *uart;
     volatile Tstatus status;
-    volatile char c;
+    volatile char c, last;
+    uart = (void *)IO_UART_ADDR; // bottom of UART address range
     Tcontrol ctrl;
 
-    uart = (void *)IO_UART_ADDR; // bottom of UART address range
 
     ctrl.ign   = 0;
     ctrl.intTX = 0;
     ctrl.intRX = 1;
-    ctrl.speed = 1;        // operate at 1/2 of the highest data rate
+    ctrl.speed = 2;        // operate at 1/2 of the highest data rate
     uart->cs.ctl = ctrl;
 
     initUd();
 
-    uart->d.tx = 'a';
+    //uart->d.tx = 'a';
 
     //print(lol);
     /*while(c!='\n'){
@@ -90,8 +90,13 @@ int main(){
         c=getc();
     }*/
 
-    while(1)
-        c=getc();
+    last = '0';
+    while((c=getc()) != '\0'){
+        if(c != EOF) {
+            while(!Putc(c)); // Wait till there's space on queue
+        }
+    }
+    Putc(c); // Sends '\0'
 
     return 0;
 }
@@ -119,7 +124,7 @@ char getc(){
         //print(2);
         c = EOF;
     }
-    // print((int)c);
+    //print((int)c);
     // to_stdout(c);
     // to_stdout('\n');
     return c;
@@ -127,6 +132,11 @@ char getc(){
 
 int Putc(char c){
     int sent;
+    if(Ud.ntx == 16) {
+        uart->d.tx = c;
+        return 1;
+    }
+
     if(Ud.ntx > 0){
         Ud.tx_q[Ud.tx_tl] = c;
         Ud.tx_tl = (Ud.tx_tl+1)%16;