diff --git a/arch/arm/src/sam3u/sam3u_serial.c b/arch/arm/src/sam3u/sam3u_serial.c
index 42430d9e1e2f745140863273d3850440d0a8f385..93ce1e8d514aaf601b4c1912a663179aacf10646 100755
--- a/arch/arm/src/sam3u/sam3u_serial.c
+++ b/arch/arm/src/sam3u/sam3u_serial.c
@@ -821,10 +821,9 @@ static void up_restoreusartint(struct up_dev_s *priv, uint32_t imr)
 
   priv->imr = imr;
 
-  /* And restore the interrupt state */
+  /* And re-enable interrrupts previoulsy disabled by up_disableallints */
 
-  up_serialout(priv, SAM3U_UART_IDR_OFFSET, ~imr);
-  up_serialout(priv, SAM3U_UART_IER_OFFSET, imr);
+  up_enableint(priv);
 }
 
 /****************************************************************************
@@ -842,7 +841,8 @@ static void up_disableallints(struct up_dev_s *priv, uint32_t *imr)
 
   /* Disable all interrupts */
 
-  up_restoreusartint(priv, 0);
+  priv->imr = 0;
+  up_disableint(priv);
 }
 
 /****************************************************************************