diff --git a/cores/arduino/SERCOM.h b/cores/arduino/SERCOM.h
index fb378d7d84d92898c69810bd87b8fbbf40e6900c..d64214522cea8814659dc951aaab9f9d8d68abd6 100644
--- a/cores/arduino/SERCOM.h
+++ b/cores/arduino/SERCOM.h
@@ -79,10 +79,9 @@ typedef enum
 
 typedef enum
 {
-	UART_TX_PAD_0 = 0x0ul,	//Only for UART
-	UART_TX_PAD_2 = 0x1ul,  //Only for UART
-	//UART_TX_PAD_1 = 0x0ul,	//DON'T USE
-	//UART_TX_PAD_3 = 0x1ul	//DON'T USE
+	UART_TX_PAD_0 = 0x0ul,	// Only for UART
+	UART_TX_PAD_2 = 0x1ul,  // Only for UART
+	UART_TX_RTS_CTS_PAD_0_2_3 = 0x2ul,  // Only for UART with TX on PAD0, RTS on PAD2 and CTS on PAD3
 } SercomUartTXPad;
 
 typedef enum
diff --git a/cores/arduino/Uart.cpp b/cores/arduino/Uart.cpp
index 9e8a66d03bf559a98d40704074a3430f5ec3decf..2172ff5c794c08be675571ded11652314c03a18a 100644
--- a/cores/arduino/Uart.cpp
+++ b/cores/arduino/Uart.cpp
@@ -20,11 +20,13 @@
 #include "WVariant.h"
 #include "wiring_digital.h"
 
-Uart::Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX)
+Uart::Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX, SercomRXPad _padRX, SercomUartTXPad _padTX)
 {
   sercom = _s;
   uc_pinRX = _pinRX;
   uc_pinTX = _pinTX;
+  uc_padRX=_padRX ;
+  uc_padTX=_padTX;
 }
 
 void Uart::begin(unsigned long baudrate)
@@ -39,8 +41,7 @@ void Uart::begin(unsigned long baudrate, uint8_t config)
 
   sercom->initUART(UART_INT_CLOCK, SAMPLE_RATE_x16, baudrate);
   sercom->initFrame(extractCharSize(config), LSB_FIRST, extractParity(config), extractNbStopBit(config));
-  sercom->initPads(UART_TX_PAD_2, SERCOM_RX_PAD_3);
-
+  sercom->initPads(uc_padTX, uc_padRX);
 
   sercom->enableUART();
 }
@@ -140,13 +141,3 @@ SercomParityMode Uart::extractParity(uint8_t config)
       return SERCOM_ODD_PARITY;
   }
 }
-
-void SERCOM0_Handler()
-{
-  Serial1.IrqHandler();
-}
-
-void SERCOM5_Handler()
-{
-  Serial.IrqHandler();
-}
diff --git a/cores/arduino/Uart.h b/cores/arduino/Uart.h
index f2c439123543dcc178d820d0d17c361f6b8c5590..5245b6550378d579d262b387ca3bf070aef67e89 100644
--- a/cores/arduino/Uart.h
+++ b/cores/arduino/Uart.h
@@ -25,11 +25,10 @@
 
 #include <cstddef>
 
-
 class Uart : public HardwareSerial
 {
   public:
-    Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX);
+    Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX, SercomRXPad _padRX, SercomUartTXPad _padTX);
     void begin(unsigned long baudRate);
     void begin(unsigned long baudrate, uint8_t config);
     void end();
@@ -50,14 +49,12 @@ class Uart : public HardwareSerial
 
     uint8_t uc_pinRX;
     uint8_t uc_pinTX;
+    SercomRXPad uc_padRX;
+    SercomUartTXPad uc_padTX;
 
     SercomNumberStopBit extractNbStopBit(uint8_t config);
     SercomUartCharSize extractCharSize(uint8_t config);
     SercomParityMode extractParity(uint8_t config);
 };
 
-extern Uart Serial;
-extern Uart Serial1;
-
-
 #endif
diff --git a/variants/arduino_zero/variant.cpp b/variants/arduino_zero/variant.cpp
index b8f26722a02f6b011e9d8d9c6201df7359782769..84df4033e690fa6a313c1c6a2d9a3e8f14070ca6 100644
--- a/variants/arduino_zero/variant.cpp
+++ b/variants/arduino_zero/variant.cpp
@@ -207,5 +207,15 @@ SERCOM sercom3( SERCOM3 ) ;
 SERCOM sercom4( SERCOM4 ) ;
 SERCOM sercom5( SERCOM5 ) ;
 
-Uart Serial1( &sercom0, PIN_SERIAL1_RX, PIN_SERIAL1_TX ) ;
-Uart Serial( &sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX ) ;
+Uart Serial1( &sercom0, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ;
+Uart Serial( &sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ;
+void SERCOM0_Handler()
+{
+  Serial1.IrqHandler();
+}
+
+void SERCOM5_Handler()
+{
+  Serial.IrqHandler();
+}
+
diff --git a/variants/arduino_zero/variant.h b/variants/arduino_zero/variant.h
index 00dec561e8b03103052189554d3298b8c5882a59..fe09b8995b43c7f98b9a134ebee9d0d7d48645ca 100644
--- a/variants/arduino_zero/variant.h
+++ b/variants/arduino_zero/variant.h
@@ -106,12 +106,16 @@ static const uint8_t A5  = PIN_A5 ;
  * Serial interfaces
  */
 // Serial (EDBG)
-#define PIN_SERIAL_RX (31ul)
-#define PIN_SERIAL_TX (30ul)
+#define PIN_SERIAL_RX       (31ul)
+#define PIN_SERIAL_TX       (30ul)
+#define PAD_SERIAL_TX       (UART_TX_PAD_2)
+#define PAD_SERIAL_RX       (SERCOM_RX_PAD_3)
 
 // Serial1
-#define PIN_SERIAL1_RX (0ul)
-#define PIN_SERIAL1_TX (1ul)
+#define PIN_SERIAL1_RX       (0ul)
+#define PIN_SERIAL1_TX       (1ul)
+#define PAD_SERIAL1_TX       (UART_TX_PAD_2)
+#define PAD_SERIAL1_RX       (SERCOM_RX_PAD_3)
 
 /*
  * SPI Interfaces