diff --git a/cores/arduino/HOWTO - compiling a project.txt b/cores/arduino/HOWTO_compiling_a_project_with_GCC.txt
similarity index 58%
rename from cores/arduino/HOWTO - compiling a project.txt
rename to cores/arduino/HOWTO_compiling_a_project_with_GCC.txt
index 7c3b4d5d420b70b4491c0f21a636bad41f5c5b5b..e99d2cdfb605783448a2c6353f6deec9605c55ab 100644
--- a/cores/arduino/HOWTO - compiling a project.txt	
+++ b/cores/arduino/HOWTO_compiling_a_project_with_GCC.txt
@@ -8,6 +8,9 @@ GNU Make from http://gnuwin32.sourceforge.net/packages/make.htm
   Binaries http://gnuwin32.sourceforge.net/downlinks/make-bin-zip.php
 	Dependencies http://gnuwin32.sourceforge.net/downlinks/make-dep-zip.php
 
+GNU rm from http://gnuwin32.sourceforge.net/packages/coreutils.htm
+  Binaries http://gnuwin32.sourceforge.net/downlinks/coreutils-bin-zip.php
+
 *MacOS*
 
 *Linux*
@@ -21,29 +24,7 @@ ARM_GCC_TOOLCHAIN=C:\GNU Tools ARM Embedded_4.8 2013q4\bin
 
 Add to PATH the path were Make has been installed
 
-3- Compile libarduino (Arduino API)
-
-Go to hardware/arduino/samd/cores/arduino/build_gcc
-
-run the command: 'make'
-
-This will compile the libarduino library and deliver to main Arduino folder the files:
-
-hardware/arduino/samd/cores/arduino/libarduino_arduino_zero_gcc_dbg.a
-hardware/arduino/samd/cores/arduino/libarduino_arduino_zero_gcc_dbg.a.txt (result of nm)
-
-4- Compile libvariant (variant specific library, use Arduino API and libsam)
-
-Go to hardware/sam/variants/arduino_zero/build_gcc
-
-run the command: 'make'
-
-This will compile the libvariant library and deliver to main Arduino folder the files:
-
-hardware/arduino/samd/cores/arduino/libvariant_arduino_zero_gcc_dbg.a
-hardware/arduino/samd/cores/arduino/libvariant_arduino_zero_gcc_dbg.a.txt (result of nm)
-
-5- Compile test application
+3- Compile test application
 
 Go to hardware/arduino/samd/cores/arduino/validation/build_gcc
 
diff --git a/cores/arduino/delay.c b/cores/arduino/delay.c
index 5640e71f1ce4dc0acbe5beb151cf1da036267c04..834278413afa6a04696a2196a2992a372d79550a 100644
--- a/cores/arduino/delay.c
+++ b/cores/arduino/delay.c
@@ -5,12 +5,13 @@
 extern "C" {
 #endif
 
+/** Tick Counter united by ms */
+static volatile uint32_t _ulTickCount=0 ;
+
 uint32_t millis( void )
 {
-/* TODO
 // todo: ensure no interrupts
-    return GetTickCount() ;
-*/ return 0ul ;
+  return _ulTickCount ;
 }
 
 // Interrupt-compatible version of micros
@@ -19,56 +20,48 @@ uint32_t millis( void )
 // values to calculate micros. If there is a pending SysTick, add one to the millis counter in the calculation.
 uint32_t micros( void )
 {
-/* TODO
-    uint32_t ticks, ticks2;
-    uint32_t pend, pend2;
-    uint32_t count, count2;
+  uint32_t ticks, ticks2;
+  uint32_t pend, pend2;
+  uint32_t count, count2;
 
-    ticks2  = SysTick->VAL;
-    pend2   = !!((SCB->ICSR & SCB_ICSR_PENDSTSET_Msk)||((SCB->SHCSR & SCB_SHCSR_SYSTICKACT_Msk)))  ;
-    count2  = GetTickCount();
+  ticks2  = SysTick->VAL;
+  pend2   = !!(SCB->ICSR & SCB_ICSR_PENDSTSET_Msk)  ;
+  count2  = _ulTickCount ;
 
-    do {
-        ticks=ticks2;
-        pend=pend2;
-        count=count2;
-        ticks2  = SysTick->VAL;
-        pend2   = !!((SCB->ICSR & SCB_ICSR_PENDSTSET_Msk)||((SCB->SHCSR & SCB_SHCSR_SYSTICKACT_Msk)))  ;
-        count2  = GetTickCount();
-    } while ((pend != pend2) || (count != count2) || (ticks < ticks2));
+  do
+  {
+    ticks=ticks2;
+    pend=pend2;
+    count=count2;
+    ticks2  = SysTick->VAL;
+    pend2   = !!(SCB->ICSR & SCB_ICSR_PENDSTSET_Msk)  ;
+    count2  = _ulTickCount ;
+  } while ((pend != pend2) || (count != count2) || (ticks < ticks2));
 
-    return ((count+pend) * 1000) + (((SysTick->LOAD  - ticks)*(1048576/(F_CPU/1000000)))>>20) ;
-    // this is an optimization to turn a runtime division into two compile-time divisions and
-    // a runtime multiplication and shift, saving a few cycles
-*/ return 0ul ;
+  return ((count+pend) * 1000) + (((SysTick->LOAD  - ticks)*(1048576/(VARIANT_MCK/1000000)))>>20) ;
+  // this is an optimization to turn a runtime division into two compile-time divisions and
+  // a runtime multiplication and shift, saving a few cycles
 }
 
-// original function:
-// uint32_t micros( void )
-// {
-//     uint32_t ticks ;
-//     uint32_t count ;
-//
-//     SysTick->CTRL;
-//     do {
-//         ticks = SysTick->VAL;
-//         count = GetTickCount();
-//     } while (SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk);
-//
-//     return count * 1000 + (SysTick->LOAD + 1 - ticks) / (SystemCoreClock/1000000) ;
-// }
+void delay( uint32_t ms )
+{
+  if ( ms == 0 )
+  {
+    return ;
+  }
+
+  uint32_t start = _ulTickCount ;
 
+  do
+  {
+    yield() ;
+  } while ( _ulTickCount - start < ms ) ;
+}
 
-void delay( uint32_t ms )
+void SysTick_Handler( void )
 {
-/* TODO
-    if (ms == 0)
-        return;
-    uint32_t start = GetTickCount();
-    do {
-        yield();
-    } while (GetTickCount() - start < ms);
-*/
+  // Increment tick count each ms
+  _ulTickCount++ ;
 }
 
 #ifdef __cplusplus
diff --git a/cores/arduino/delay.h b/cores/arduino/delay.h
index 2ea5d0c1d53a78084323784a6fb348d77b8de212..f9b08efeff3b608ef09265eb2f261cc46ff72919 100644
--- a/cores/arduino/delay.h
+++ b/cores/arduino/delay.h
@@ -64,16 +64,31 @@ static inline void delayMicroseconds(uint32_t) __attribute__((always_inline, unu
 static inline void delayMicroseconds(uint32_t usec){
     if (usec == 0) return;
     uint32_t n = usec * (VARIANT_MCK / 3000000);
-/*
-    asm volatile(
+
+    __asm__ volatile(
         "L_%=_delayMicroseconds:"       "\n\t"
         "subs   %0, #1"                 "\n\t"
         "bne    L_%=_delayMicroseconds" "\n"
         : "+r" (n) :
     );
-*/
 }
 
+/*
+__attribute__((naked)) static void delay_loop(unsigned n)
+{
+	__asm volatile ("1: subs r0, r0, #1");
+	__asm volatile (" bne 1b");
+	__asm volatile (" bx lr");
+}
+
+void delay_microseconds(unsigned n)
+{
+	// Bogus assumption:
+	// Assume 8 cycles/iteration and running at 80MHz
+	delay_loop(n * 10);
+}
+*/
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/cores/arduino/main.cpp b/cores/arduino/main.cpp
index 0efdb70d4a095a2ec66d62fa04e595cab5036e07..ae1eee2643c5d219a433311875349d3f1133c7b2 100644
--- a/cores/arduino/main.cpp
+++ b/cores/arduino/main.cpp
@@ -20,17 +20,6 @@
 #define ARDUINO_MAIN
 #include "Arduino.h"
 
-/*
- * Cortex-M3 Systick IT handler
- */
-/*
-extern void SysTick_Handler( void )
-{
-  // Increment tick count each ms
-  TimeTick_Increment() ;
-}
-*/
-
 /*
  * \brief Main entry point of Arduino application
  */
diff --git a/cores/arduino/startup.c b/cores/arduino/startup.c
index 811e975a839b2de9afe6700cef8e698e1d0f5a08..d640f3ffcefa41bb4ec14b4c1098013408f71588 100644
--- a/cores/arduino/startup.c
+++ b/cores/arduino/startup.c
@@ -169,7 +169,8 @@ const DeviceVectors exception_table=
  * 3) Put Generic Clock Generator 1 as source for Generic Clock Multiplexer 0 (DFLL48M reference)
  * 4) Enable DFLL48M clock
  * 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
- * 6) Put OSC8M as source for Generic Clock Generator 3
+ * 6) Modify PRESCaler value of OSCM to have 8MHz
+ * 7) Put OSC8M as source for Generic Clock Generator 3
  */
 // Constants for Clock generators
 #define GENERIC_CLOCK_GENERATOR_MAIN      (0u)
@@ -221,8 +222,10 @@ void SystemInit( void )
   }
 
   /* Write Generic Clock Generator 1 configuration */
+  *((uint8_t *) &GCLK->GENCTRL) = GENERIC_CLOCK_GENERATOR_XOSC32K ;
   GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_XOSC32K ) | // Generic Clock Generator 1
                       GCLK_GENCTRL_SRC_XOSC32K | // Selected source is External 32KHz Oscillator
+                      GCLK_GENCTRL_OE |
                       GCLK_GENCTRL_GENEN ;
 
   while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
@@ -248,37 +251,60 @@ void SystemInit( void )
 
   /* DFLL Configuration in Closed Loop mode, cf product datasheet chapter 15.6.7.1 - Closed-Loop Operation */
 
-  /* Enable the generic clock */
-  GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID( SYSCTRL_GCLK_ID_DFLL48 ) |
-                      GCLK_CLKCTRL_CLKEN ;
+  /* Remove the OnDemand mode, Bug http://avr32.icgroup.norway.atmel.com/bugzilla/show_bug.cgi?id=9905 */
+  SYSCTRL->DFLLCTRL.bit.ONDEMAND = 0 ;
 
-  while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
+  while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
   {
     /* Wait for synchronization */
   }
 
-  /* DFLL Enable (Closed Loop) */
-  SYSCTRL->DFLLCTRL.bit.ONDEMAND = 0 ; /* Remove the OnDemand mode,  */
+#if 0
+  SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP( 31 ) | // Coarse step is 31, half of the max value
+                         SYSCTRL_DFLLMUL_FSTEP( 511 ) | // Fine step is 511, half of the max value
+                         SYSCTRL_DFLLMUL_MUL( (VARIANT_MCK/VARIANT_MAINOSC) ) ; // External 32KHz is the reference
+#else
+  SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP( 10 ) | // Coarse step is 31, half of the max value
+                         SYSCTRL_DFLLMUL_FSTEP( 10 ) | // Fine step is 511, half of the max value
+                         SYSCTRL_DFLLMUL_MUL( (VARIANT_MCK/VARIANT_MAINOSC) ) ; // External 32KHz is the reference
+#endif
 
   while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
   {
     /* Wait for synchronization */
   }
 
-  SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP( 31 ) | // Coarse step is 31, half of the max value
-                         SYSCTRL_DFLLMUL_FSTEP( 511 ) | // Fine step is 511, half of the max value
-                         SYSCTRL_DFLLMUL_MUL( (VARIANT_MCK/VARIANT_MAINOSC) ) ; // External 32KHz is the reference
-
   /* Write full configuration to DFLL control register */
-  SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_MODE | /* Enable the closed loop mode */
+#if 0
+  SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_MODE | /* Enable the closed loop mode */
                           SYSCTRL_DFLLCTRL_QLDIS | /* Disable Quick lock */
-                          SYSCTRL_DFLLCTRL_ENABLE ;
+                          SYSCTRL_DFLLCTRL_CCDIS ; /* Disable Chill Cycle */
+#else
+  SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_MODE | /* Enable the closed loop mode */
+                           SYSCTRL_DFLLCTRL_QLDIS ; /* Disable Quick lock */
+#endif
 
   while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
   {
     /* Wait for synchronization */
   }
 
+  /* Enable the DFLL */
+  SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_ENABLE ;
+
+  while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
+  {
+    /* Wait for synchronization */
+  }
+
+#if 0
+  while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKC) == 0 ||
+          (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKF) == 0 )
+  {
+    /* Wait for locks flags */
+  }
+#endif
+
   /*
    * 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
    */
@@ -292,6 +318,8 @@ void SystemInit( void )
   /* Write Generic Clock Generator 0 configuration */
   GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_MAIN ) | // Generic Clock Generator 0
                       GCLK_GENCTRL_SRC_DFLL48M | // Selected source is DFLL 48MHz
+                      GCLK_GENCTRL_OE |
+                      GCLK_GENCTRL_IDC | // Set 50/50 duty cycle
                       GCLK_GENCTRL_GENEN ;
 
   while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
@@ -299,16 +327,29 @@ void SystemInit( void )
     /* Wait for synchronization */
   }
 
-#if 0
+#if 1
   /*
-   * 6) Put OSC8M as source for Generic Clock Generator 3
+   * 6) Modify PRESCaler value of OSC8M to have 8MHz
    */
-  GCLK->GENDIV.reg = GCLK_GENDIV_ID( GENERIC_CLOCK_GENERATOR_OSC8M ) ; // Generic Clock Generator 3
+  SYSCTRL->OSC8M.bit.PRESC = SYSCTRL_OSC8M_PRESC_0_Val ;
+  SYSCTRL->OSC8M.bit.ONDEMAND = 0 ;
 
-  while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
+/*
+  while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_OSC8MRDY) == 0 )
   {
-    /* Wait for synchronization */
+    /* Wait for synchronization
   }
+*/
+
+  /*
+   * 7) Put OSC8M as source for Generic Clock Generator 3
+   */
+  GCLK->GENDIV.reg = GCLK_GENDIV_ID( GENERIC_CLOCK_GENERATOR_OSC8M ) ; // Generic Clock Generator 3
+
+  //while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
+  //{
+    ///* Wait for synchronization */
+  //}
 
   /* Write Generic Clock Generator 3 configuration */
   GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_OSC8M ) | // Generic Clock Generator 3
@@ -325,10 +366,10 @@ void SystemInit( void )
    * Now that all system clocks are configured, we can set CPU and APBx BUS clocks.
    * There values are normally the one present after Reset.
    */
-  //PM->CPUSEL.reg  = PM_CPUSEL_CPUDIV_DIV1 ;
-  //PM->APBASEL.reg = PM_APBASEL_APBADIV_DIV1_Val ;
-  //PM->APBBSEL.reg = PM_APBBSEL_APBBDIV_DIV1_Val ;
-  //PM->APBCSEL.reg = PM_APBCSEL_APBCDIV_DIV1_Val ;
+  PM->CPUSEL.reg  = PM_CPUSEL_CPUDIV_DIV1 ;
+  PM->APBASEL.reg = PM_APBASEL_APBADIV_DIV1_Val ;
+  PM->APBBSEL.reg = PM_APBBSEL_APBBDIV_DIV1_Val ;
+  PM->APBCSEL.reg = PM_APBCSEL_APBCDIV_DIV1_Val ;
 
   SystemCoreClock=VARIANT_MCK ;
 }
@@ -385,3 +426,39 @@ void Dummy_Handler( void )
   {
   }
 }
+
+#if 0
+GCLK->GENDIV.reg = GCLK_GENDIV_ID(O) | GCLK_GENDIV_DIV(O); // No div since RC8M is at 1MHz by default
+while (GCLK->STATUS.bit.SYNCBUSY);
+GCLK->GENCTRL.reg = ( GCLK_GENCTRL_ID(O) | GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_OSC8M_Val) | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_IDC | GCLK_GENCTRL_OE ) & (~GCLK_GENCTRL_OOV);
+while (GCLK->STATUS.bit.SYNCBUSY);
+
+//-------------------------- EXAMPLE -------------------------------------------
+
+#define DFLLREF32K_GENERATOR_GCLK_ID 		2
+void init_dfll_on_xosc32k(void)
+{
+  // Setup generator on XOSC32K
+  gclk_gen_setup(DFLLREF32K_GENERATOR_GCLK_ID,GCLK_SOURCE_XOSC32K,1);
+  gclk_gen_output_conf(DFLLREF32K_GENERATOR_GCLK_ID,false,0);
+  gclk_setup(SYSCTRL_GCLK_ID_DFLL48,DFLLREF32K_GENERATOR_GCLK_ID,0);
+
+  //Use DFLL @ 48MHz
+  SYSCTRL->DFLLCTRL.bit.ONDEMAND = 0;   // Bug http://avr32.icgroup.norway.atmel.com/bugzilla/show_bug.cgi?id=9905
+  while((SYSCTRL->PCLKSR.reg&SYSCTRL_PCLKSR_DFLLRDY)==0);
+
+  SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_MUL(1465)|SYSCTRL_DFLLMUL_FSTEP(10)|SYSCTRL_DFLLMUL_CSTEP(10);
+  while((SYSCTRL->PCLKSR.reg&SYSCTRL_PCLKSR_DFLLRDY)==0);
+
+  SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_CCDIS|SYSCTRL_DFLLCTRL_QLDIS|SYSCTRL_DFLLCTRL_MODE;
+  while((SYSCTRL->PCLKSR.reg&SYSCTRL_PCLKSR_DFLLRDY)==0);
+
+  //SYSCTRL->DFLLCTRL.reg |=  SYSCTRL_DFLLCTRL_ENABLE | SYSCTRL_DFLLCTRL_RUNSTDBY;
+  SYSCTRL->DFLLCTRL.reg |=  SYSCTRL_DFLLCTRL_ENABLE;
+  while((SYSCTRL->PCLKSR.reg&SYSCTRL_PCLKSR_DFLLRDY)==0);
+
+  // Wait for locks flags .
+  while((SYSCTRL->PCLKSR.reg&SYSCTRL_PCLKSR_DFLLLCKC)==0 || (SYSCTRL->PCLKSR.reg&SYSCTRL_PCLKSR_DFLLLCKF)==0);
+
+}
+#endif
diff --git a/cores/arduino/validation/build_as6/test.atsuo b/cores/arduino/validation/build_as6/test.atsuo
index 1da3b883ce1b841e1ca709dafb7e91a14a9bc371..26b524b33b54fad372b5784431c9893881c36c82 100644
Binary files a/cores/arduino/validation/build_as6/test.atsuo and b/cores/arduino/validation/build_as6/test.atsuo differ
diff --git a/cores/arduino/validation/build_as6/test.cppproj b/cores/arduino/validation/build_as6/test.cppproj
index 4adca3086f3c5f7f42f0f9337bb3c161f6d61fd8..fdb1f72b4e591e41124afbebf41c504449099484 100644
--- a/cores/arduino/validation/build_as6/test.cppproj
+++ b/cores/arduino/validation/build_as6/test.cppproj
@@ -131,89 +131,89 @@
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <ToolchainSettings>
       <ArmGccCpp>
-  <armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
-  <armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
-  <armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
-  <armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
-  <armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
-  <armgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</armgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
-  <armgcc.compiler.symbols.DefSymbols>
-    <ListValues>
-      <Value>DEBUG</Value>
-    </ListValues>
-  </armgcc.compiler.symbols.DefSymbols>
-  <armgcc.compiler.directories.DefaultIncludePath>False</armgcc.compiler.directories.DefaultIncludePath>
-  <armgcc.compiler.directories.IncludePaths>
-    <ListValues>
-      <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value>
-      <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value>
-      <Value>../../..</Value>
-      <Value>../../../USB</Value>
-      <Value>../../../../../variants/arduino_zero</Value>
-      <Value>../../../../../libraries/SPI</Value>
-      <Value>../../../../../libraries/Wire</Value>
-    </ListValues>
-  </armgcc.compiler.directories.IncludePaths>
-  <armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level>
-  <armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
-  <armgcc.compiler.optimization.PrepareDataForGarbageCollection>True</armgcc.compiler.optimization.PrepareDataForGarbageCollection>
-  <armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
-  <armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
-  <armgcc.compiler.miscellaneous.OtherFlags>-std=c99</armgcc.compiler.miscellaneous.OtherFlags>
-  <armgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</armgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
-  <armgcccpp.compiler.symbols.DefSymbols>
-    <ListValues>
-      <Value>DEBUG</Value>
-      <Value>USB_VID=0x2341</Value>
-      <Value>USB_PID=0x004d</Value>
-    </ListValues>
-  </armgcccpp.compiler.symbols.DefSymbols>
-  <armgcccpp.compiler.directories.DefaultIncludePath>False</armgcccpp.compiler.directories.DefaultIncludePath>
-  <armgcccpp.compiler.directories.IncludePaths>
-    <ListValues>
-      <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value>
-      <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value>
-      <Value>../../..</Value>
-      <Value>../../../USB</Value>
-      <Value>../../../../../variants/arduino_zero</Value>
-      <Value>../../../../../libraries/SPI</Value>
-      <Value>../../../../../libraries/Wire</Value>
-    </ListValues>
-  </armgcccpp.compiler.directories.IncludePaths>
-  <armgcccpp.compiler.optimization.level>Optimize (-O1)</armgcccpp.compiler.optimization.level>
-  <armgcccpp.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcccpp.compiler.optimization.PrepareFunctionsForGarbageCollection>
-  <armgcccpp.compiler.optimization.PrepareDataForGarbageCollection>True</armgcccpp.compiler.optimization.PrepareDataForGarbageCollection>
-  <armgcccpp.compiler.optimization.DebugLevel>Maximum (-g3)</armgcccpp.compiler.optimization.DebugLevel>
-  <armgcccpp.compiler.warnings.AllWarnings>True</armgcccpp.compiler.warnings.AllWarnings>
-  <armgcccpp.compiler.miscellaneous.OtherFlags>-std=c++98</armgcccpp.compiler.miscellaneous.OtherFlags>
-  <armgcccpp.linker.general.UseNewlibNano>True</armgcccpp.linker.general.UseNewlibNano>
-  <armgcccpp.linker.libraries.Libraries>
-    <ListValues>
-      <Value>libm</Value>
-    </ListValues>
-  </armgcccpp.linker.libraries.Libraries>
-  <armgcccpp.linker.libraries.LibrarySearchPaths>
-    <ListValues>
-      <Value>../../../../../variants/arduino_zero/linker_scripts/gcc</Value>
-    </ListValues>
-  </armgcccpp.linker.libraries.LibrarySearchPaths>
-  <armgcccpp.linker.optimization.GarbageCollectUnusedSections>True</armgcccpp.linker.optimization.GarbageCollectUnusedSections>
-  <armgcccpp.linker.memorysettings.ExternalRAM />
-  <armgcccpp.linker.miscellaneous.LinkerFlags>-Tflash.ld</armgcccpp.linker.miscellaneous.LinkerFlags>
-  <armgcccpp.assembler.general.IncludePaths>
-    <ListValues>
-      <Value>../../..</Value>
-    </ListValues>
-  </armgcccpp.assembler.general.IncludePaths>
-  <armgcccpp.assembler.debugging.DebugLevel>Default (-g)</armgcccpp.assembler.debugging.DebugLevel>
-  <armgcccpp.preprocessingassembler.general.DefaultIncludePath>False</armgcccpp.preprocessingassembler.general.DefaultIncludePath>
-  <armgcccpp.preprocessingassembler.general.IncludePaths>
-    <ListValues>
-      <Value>../../..</Value>
-    </ListValues>
-  </armgcccpp.preprocessingassembler.general.IncludePaths>
-  <armgcccpp.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcccpp.preprocessingassembler.debugging.DebugLevel>
-</ArmGccCpp>
+        <armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
+        <armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
+        <armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
+        <armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
+        <armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
+        <armgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</armgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
+        <armgcc.compiler.symbols.DefSymbols>
+          <ListValues>
+            <Value>DEBUG</Value>
+          </ListValues>
+        </armgcc.compiler.symbols.DefSymbols>
+        <armgcc.compiler.directories.DefaultIncludePath>False</armgcc.compiler.directories.DefaultIncludePath>
+        <armgcc.compiler.directories.IncludePaths>
+          <ListValues>
+            <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value>
+            <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value>
+            <Value>../../..</Value>
+            <Value>../../../USB</Value>
+            <Value>../../../../../variants/arduino_zero</Value>
+            <Value>../../../../../libraries/SPI</Value>
+            <Value>../../../../../libraries/Wire</Value>
+          </ListValues>
+        </armgcc.compiler.directories.IncludePaths>
+        <armgcc.compiler.optimization.level>Optimize (-O1)</armgcc.compiler.optimization.level>
+        <armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
+        <armgcc.compiler.optimization.PrepareDataForGarbageCollection>True</armgcc.compiler.optimization.PrepareDataForGarbageCollection>
+        <armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
+        <armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
+        <armgcc.compiler.miscellaneous.OtherFlags>-std=c99</armgcc.compiler.miscellaneous.OtherFlags>
+        <armgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</armgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>
+        <armgcccpp.compiler.symbols.DefSymbols>
+          <ListValues>
+            <Value>DEBUG</Value>
+            <Value>USB_VID=0x2341</Value>
+            <Value>USB_PID=0x004d</Value>
+          </ListValues>
+        </armgcccpp.compiler.symbols.DefSymbols>
+        <armgcccpp.compiler.directories.DefaultIncludePath>False</armgcccpp.compiler.directories.DefaultIncludePath>
+        <armgcccpp.compiler.directories.IncludePaths>
+          <ListValues>
+            <Value>../../../../../../../tools/CMSIS/Device/ATMEL</Value>
+            <Value>../../../../../../../tools/CMSIS/CMSIS/Include</Value>
+            <Value>../../..</Value>
+            <Value>../../../USB</Value>
+            <Value>../../../../../variants/arduino_zero</Value>
+            <Value>../../../../../libraries/SPI</Value>
+            <Value>../../../../../libraries/Wire</Value>
+          </ListValues>
+        </armgcccpp.compiler.directories.IncludePaths>
+        <armgcccpp.compiler.optimization.level>Optimize (-O1)</armgcccpp.compiler.optimization.level>
+        <armgcccpp.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcccpp.compiler.optimization.PrepareFunctionsForGarbageCollection>
+        <armgcccpp.compiler.optimization.PrepareDataForGarbageCollection>True</armgcccpp.compiler.optimization.PrepareDataForGarbageCollection>
+        <armgcccpp.compiler.optimization.DebugLevel>Maximum (-g3)</armgcccpp.compiler.optimization.DebugLevel>
+        <armgcccpp.compiler.warnings.AllWarnings>True</armgcccpp.compiler.warnings.AllWarnings>
+        <armgcccpp.compiler.miscellaneous.OtherFlags>-std=c++98</armgcccpp.compiler.miscellaneous.OtherFlags>
+        <armgcccpp.linker.general.UseNewlibNano>True</armgcccpp.linker.general.UseNewlibNano>
+        <armgcccpp.linker.libraries.Libraries>
+          <ListValues>
+            <Value>libm</Value>
+          </ListValues>
+        </armgcccpp.linker.libraries.Libraries>
+        <armgcccpp.linker.libraries.LibrarySearchPaths>
+          <ListValues>
+            <Value>../../../../../variants/arduino_zero/linker_scripts/gcc</Value>
+          </ListValues>
+        </armgcccpp.linker.libraries.LibrarySearchPaths>
+        <armgcccpp.linker.optimization.GarbageCollectUnusedSections>True</armgcccpp.linker.optimization.GarbageCollectUnusedSections>
+        <armgcccpp.linker.memorysettings.ExternalRAM />
+        <armgcccpp.linker.miscellaneous.LinkerFlags>-Tflash.ld</armgcccpp.linker.miscellaneous.LinkerFlags>
+        <armgcccpp.assembler.general.IncludePaths>
+          <ListValues>
+            <Value>../../..</Value>
+          </ListValues>
+        </armgcccpp.assembler.general.IncludePaths>
+        <armgcccpp.assembler.debugging.DebugLevel>Default (-g)</armgcccpp.assembler.debugging.DebugLevel>
+        <armgcccpp.preprocessingassembler.general.DefaultIncludePath>False</armgcccpp.preprocessingassembler.general.DefaultIncludePath>
+        <armgcccpp.preprocessingassembler.general.IncludePaths>
+          <ListValues>
+            <Value>../../..</Value>
+          </ListValues>
+        </armgcccpp.preprocessingassembler.general.IncludePaths>
+        <armgcccpp.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcccpp.preprocessingassembler.debugging.DebugLevel>
+      </ArmGccCpp>
     </ToolchainSettings>
   </PropertyGroup>
   <ItemGroup>
@@ -223,18 +223,18 @@
     <Folder Include="variant" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="..\..\..\..\libraries\SPI\SPI.cpp">
+    <None Include="..\..\..\..\libraries\SPI\SPI.cpp">
       <SubType>compile</SubType>
       <Link>SPI\SPI.cpp</Link>
-    </Compile>
+    </None>
     <Compile Include="..\..\..\..\libraries\SPI\SPI.h">
       <SubType>compile</SubType>
       <Link>SPI\SPI.h</Link>
     </Compile>
-    <Compile Include="..\..\..\..\libraries\Wire\Wire.cpp">
+    <None Include="..\..\..\..\libraries\Wire\Wire.cpp">
       <SubType>compile</SubType>
       <Link>Wire\Wire.cpp</Link>
-    </Compile>
+    </None>
     <Compile Include="..\..\..\..\libraries\Wire\Wire.h">
       <SubType>compile</SubType>
       <Link>Wire\Wire.h</Link>
diff --git a/cores/arduino/validation/test.cpp b/cores/arduino/validation/test.cpp
index 68968f1e9623a3a1e8edc6d63728300568931c68..3c7e0b2e6a4eff37beef1ac11bd8ab7f08cd3b8c 100644
--- a/cores/arduino/validation/test.cpp
+++ b/cores/arduino/validation/test.cpp
@@ -22,13 +22,26 @@ void setup( void )
 {
   // Initialize the digital pin as an output.
   // Pin PIN_LED has a LED connected on most Arduino boards:
-  pinMode( PIN_LED, OUTPUT ) ;
-  digitalWrite( PIN_LED, LOW ) ;
+  //pinMode( PIN_LED, OUTPUT ) ;
+  //digitalWrite( PIN_LED, LOW ) ;
 
   // Initialize the PIN_LED2 digital pin as an output.
   pinMode( PIN_LED2, OUTPUT ) ;
   digitalWrite( PIN_LED2, HIGH ) ;
 
+  // Initialize the PIN_LED2 digital pin as an output.
+  pinMode( PIN_LED3, OUTPUT ) ;
+  digitalWrite( PIN_LED3, LOW ) ;
+
+//**********************************************
+// Clock output on pin 4 for measure
+
+  pinPeripheral( 4, PIO_AC_CLK ) ; // Clock Gen 0
+  pinPeripheral( 5, PIO_AC_CLK ) ; // Clock Gen 1
+  pinPeripheral( 13, PIO_AC_CLK ) ; // Clock Gen 3
+
+//**********************************************
+
 /*
   Serial1.begin( 115200 ) ;
 */
@@ -36,14 +49,16 @@ void setup( void )
 
 static void led_step1( void )
 {
-  digitalWrite( PIN_LED, LOW ) ;  // set the LED on
+//  digitalWrite( PIN_LED, LOW ) ;  // set the LED on
   digitalWrite( PIN_LED2, LOW ) ;   // set the red LED off
+  digitalWrite( PIN_LED3, HIGH ) ;   // set the red LED off
 }
 
 static void led_step2( void )
 {
-  digitalWrite( PIN_LED, HIGH ) ;   // set the LED off
+//  digitalWrite( PIN_LED, HIGH ) ;   // set the LED off
   digitalWrite( PIN_LED2, HIGH ) ;  // set the red LED on
+  digitalWrite( PIN_LED3, LOW ) ;  // set the red LED on
 }
 
 void loop( void )
diff --git a/cores/arduino/wiring.c b/cores/arduino/wiring.c
index b13bf15b12f5f2503e21a5d9786468528f692e29..693f1924c695cde5c8c61402810403269f2d23ab 100644
--- a/cores/arduino/wiring.c
+++ b/cores/arduino/wiring.c
@@ -45,17 +45,29 @@ void init( void )
   uint32_t ul ;
 
   // Set Systick to 1ms interval, common to all Cortex-M variants
- // if ( SysTick_Config( SystemCoreClock / 1000 ) )
- // {
- //   // Capture error
- //   while ( 1 ) ;
- // }
+  if ( SysTick_Config( SystemCoreClock / 1000 ) )
+  {
+    // Capture error
+    while ( 1 ) ;
+  }
 
-  // Setup PORT for Digital I/O
-	PM->APBBMASK.reg |= PM_APBBMASK_PORT ;
+  // Clock PORT for Digital I/O
+//	PM->APBBMASK.reg |= PM_APBBMASK_PORT ;
+//
+//  // Clock EIC for I/O interrupts
+//	PM->APBAMASK.reg |= PM_APBAMASK_EIC ;
+
+  // Clock SERCOM for Serial
+	PM->APBCMASK.reg |= PM_APBCMASK_SERCOM0 | PM_APBCMASK_SERCOM1 | PM_APBCMASK_SERCOM2 | PM_APBCMASK_SERCOM3 | PM_APBCMASK_SERCOM4 | PM_APBCMASK_SERCOM5 ;
+
+  // Clock TC/TCC for Pulse and Analog
+	PM->APBCMASK.reg |= PM_APBCMASK_TCC0 | PM_APBCMASK_TCC1 | PM_APBCMASK_TCC2 | PM_APBCMASK_TC3 | PM_APBCMASK_TC4 | PM_APBCMASK_TC5 | PM_APBCMASK_TC6 | PM_APBCMASK_TC7 ;
+
+  // Clock ADC/DAC for Analog
+	PM->APBCMASK.reg |= PM_APBCMASK_ADC | PM_APBCMASK_DAC ;
 
 	// Setup all pins (digital and analog) in INPUT mode (default is nothing)
-	for ( ul = 0 ; ul < NUM_DIGITAL_PINS ; ul++ )
+//	for ( ul = 0 ; ul < NUM_DIGITAL_PINS ; ul++ )
 	{
 //	  pinMode( ul, INPUT ) ;
 	}
diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c
index 5716bceb93520a8fb3311af6eb457cd827826015..5733a633e89fb150a3cd2580550d715bf9ae3589 100644
--- a/cores/arduino/wiring_digital.c
+++ b/cores/arduino/wiring_digital.c
@@ -27,153 +27,175 @@
 
 int pinPeripheral( uint32_t ulPin, EPioType ulPeripheral )
 {
-	if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
-	{
-		return -1 ;
-	}
-
-	switch ( ulPeripheral )
-	{
-		case PIO_DIGITAL:
-		case PIO_INPUT:
-		case PIO_INPUT_PULLUP:
-		case PIO_OUTPUT:
-		  // Disable peripheral muxing, done in pinMode
+  if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
+  {
+    return -1 ;
+  }
+
+  switch ( ulPeripheral )
+  {
+    case PIO_DIGITAL:
+    case PIO_INPUT:
+    case PIO_INPUT_PULLUP:
+    case PIO_OUTPUT:
+      // Disable peripheral muxing, done in pinMode
 //			PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].bit.PMUXEN = 0 ;
 
       // Configure pin mode, if requested
-			if ( ulPeripheral == PIO_INPUT )
-			{
-			  pinMode( ulPin, INPUT ) ;
-			}
-			else
-			{
-			  if ( ulPeripheral == PIO_INPUT_PULLUP )
-				{
-				  pinMode( ulPin, INPUT_PULLUP ) ;
-				}
-				else
-				{
-					if ( ulPeripheral == PIO_OUTPUT )
-					{
-					  pinMode( ulPin, OUTPUT ) ;
-					}
-					else
-					{
-					  // PIO_DIGITAL, do we have to do something as all cases are covered?
-					}
-				}
-			}
-		break ;
-
-		case PIO_ANALOG:
-		case PIO_SERCOM:
-		case PIO_SERCOM_ALT:
-		case PIO_TIMER:
-		case PIO_TIMER_ALT:
-		case PIO_EXTINT:
-		case PIO_COM:
-		case PIO_AC_CLK:
+      if ( ulPeripheral == PIO_INPUT )
+      {
+        pinMode( ulPin, INPUT ) ;
+      }
+      else
+      {
+        if ( ulPeripheral == PIO_INPUT_PULLUP )
+        {
+          pinMode( ulPin, INPUT_PULLUP ) ;
+        }
+        else
+        {
+          if ( ulPeripheral == PIO_OUTPUT )
+          {
+            pinMode( ulPin, OUTPUT ) ;
+          }
+          else
+          {
+            // PIO_DIGITAL, do we have to do something as all cases are covered?
+          }
+        }
+      }
+    break ;
+
+    case PIO_ANALOG:
+    case PIO_SERCOM:
+    case PIO_SERCOM_ALT:
+    case PIO_TIMER:
+    case PIO_TIMER_ALT:
+    case PIO_EXTINT:
+    case PIO_COM:
+    case PIO_AC_CLK:
+#if 0
       // Is the pio pin in the lower 16 ones?
-			// The WRCONFIG register allows update of only 16 pin max out of 32
-			if ( g_APinDescription[ulPin].ulPin < 16 )
-			{
-				PORT->Group[g_APinDescription[ulPin].ulPort].WRCONFIG.reg = PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_PMUXEN | PORT_WRCONFIG_PMUX( g_APinDescription[ulPin].ulPinType ) |
-																																		 PORT_WRCONFIG_WRPINCFG |
-																																		 PORT_WRCONFIG_PINMASK( g_APinDescription[ulPin].ulPin ) ;
-			}
-			else
-			{
-				PORT->Group[g_APinDescription[ulPin].ulPort].WRCONFIG.reg = PORT_WRCONFIG_HWSEL |
-				                                                             PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_PMUXEN | PORT_WRCONFIG_PMUX( g_APinDescription[ulPin].ulPinType ) |
-																																		 PORT_WRCONFIG_WRPINCFG |
-																																		 PORT_WRCONFIG_PINMASK( g_APinDescription[ulPin].ulPin - 16 ) ;
-			}
-		break ;
-
-		case PIO_NOT_A_PIN:
-			return -1l ;
-		break ;
-	}
-
-	return 0l ;
+      // The WRCONFIG register allows update of only 16 pin max out of 32
+      if ( g_APinDescription[ulPin].ulPin < 16 )
+      {
+        PORT->Group[g_APinDescription[ulPin].ulPort].WRCONFIG.reg = PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_PMUXEN | PORT_WRCONFIG_PMUX( ulPeripheral ) |
+                                                                    PORT_WRCONFIG_WRPINCFG |
+                                                                    PORT_WRCONFIG_PINMASK( g_APinDescription[ulPin].ulPin ) ;
+      }
+      else
+      {
+        PORT->Group[g_APinDescription[ulPin].ulPort].WRCONFIG.reg = PORT_WRCONFIG_HWSEL |
+                                                                    PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_PMUXEN | PORT_WRCONFIG_PMUX( ulPeripheral ) |
+                                                                    PORT_WRCONFIG_WRPINCFG |
+                                                                    PORT_WRCONFIG_PINMASK( g_APinDescription[ulPin].ulPin - 16 ) ;
+      }
+#else
+      if ( g_APinDescription[ulPin].ulPin & 1 ) // is pin odd?
+      {
+        uint32_t temp ;
+
+        // Get whole current setup for both odd and even pins and remove odd one
+        temp = (PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg) & PORT_PMUX_PMUXE( 0xF ) ;
+        // Set new muxing
+        PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg = temp|PORT_PMUX_PMUXO( ulPeripheral ) ;
+        // Enable port mux
+        PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg |= PORT_PINCFG_PMUXEN ;
+      }
+      else // even pin
+      {
+        uint32_t temp ;
+
+        temp = (PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg) & PORT_PMUX_PMUXO( 0xF ) ;
+        PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg = temp|PORT_PMUX_PMUXE( ulPeripheral ) ;
+        PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg |= PORT_PINCFG_PMUXEN ; // Enable port mux
+      }
+#endif
+    break ;
+
+    case PIO_NOT_A_PIN:
+      return -1l ;
+    break ;
+  }
+
+  return 0l ;
 }
 
 void pinMode( uint32_t ulPin, uint32_t ulMode )
 {
-	if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
-	{
-		return ;
-	}
-
-	switch ( ulMode )
-	{
-		case INPUT:
-		  // Set pin to input mode
-			PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_INEN) ;
-		  PORT->Group[g_APinDescription[ulPin].ulPort].DIRCLR.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
-		break ;
-
-		case INPUT_PULLUP:
-		  // Set pin to input mode with pull-up resistor enabled
-			PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_INEN|PORT_PINCFG_PULLEN) ;
-		  PORT->Group[g_APinDescription[ulPin].ulPort].DIRCLR.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
-		break ;
-
-		case OUTPUT:
-		  // Set pin to output mode
-			PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg&=~(uint8_t)(PORT_PINCFG_INEN) ;
-		  PORT->Group[g_APinDescription[ulPin].ulPort].DIRSET.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
-		break ;
-
-		default:
-		  // do nothing
-		break ;
-	}
+  if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
+  {
+    return ;
+  }
+
+  switch ( ulMode )
+  {
+    case INPUT:
+      // Set pin to input mode
+      PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_INEN) ;
+      PORT->Group[g_APinDescription[ulPin].ulPort].DIRCLR.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
+    break ;
+
+    case INPUT_PULLUP:
+      // Set pin to input mode with pull-up resistor enabled
+      PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_INEN|PORT_PINCFG_PULLEN) ;
+      PORT->Group[g_APinDescription[ulPin].ulPort].DIRCLR.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
+    break ;
+
+    case OUTPUT:
+      // Set pin to output mode
+      PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg&=~(uint8_t)(PORT_PINCFG_INEN) ;
+      PORT->Group[g_APinDescription[ulPin].ulPort].DIRSET.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
+    break ;
+
+    default:
+      // do nothing
+    break ;
+  }
 }
 
 void digitalWrite( uint32_t ulPin, uint32_t ulVal )
 {
   /* Handle the case the pin isn't usable as PIO */
-	if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
+  if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
   {
     return ;
   }
 
-	// Enable pull-up resistor
-	PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_PULLEN) ;
+  // Enable pull-up resistor
+  PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_PULLEN) ;
 
   switch ( ulVal )
-	{
-	  case LOW:
-			PORT->Group[g_APinDescription[ulPin].ulPort].OUTCLR.reg = (1ul << g_APinDescription[ulPin].ulPin) ;
-		break ;
+  {
+    case LOW:
+      PORT->Group[g_APinDescription[ulPin].ulPort].OUTCLR.reg = (1ul << g_APinDescription[ulPin].ulPin) ;
+    break ;
 
-	  case HIGH:
-			PORT->Group[g_APinDescription[ulPin].ulPort].OUTSET.reg = (1ul << g_APinDescription[ulPin].ulPin) ;
-		break ;
+    case HIGH:
+      PORT->Group[g_APinDescription[ulPin].ulPort].OUTSET.reg = (1ul << g_APinDescription[ulPin].ulPin) ;
+    break ;
 
-		default:
-		break ;
-	}
+    default:
+    break ;
+  }
 
-	return ;
+  return ;
 }
 
 int digitalRead( uint32_t ulPin )
 {
   /* Handle the case the pin isn't usable as PIO */
-	if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
-	{
-		return LOW ;
-	}
+  if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
+  {
+    return LOW ;
+  }
 
-	if ( (PORT->Group[g_APinDescription[ulPin].ulPort].IN.reg & (1ul << g_APinDescription[ulPin].ulPin)) != 0 )
-	{
-		return HIGH ;
-	}
+  if ( (PORT->Group[g_APinDescription[ulPin].ulPort].IN.reg & (1ul << g_APinDescription[ulPin].ulPin)) != 0 )
+  {
+    return HIGH ;
+  }
 
-	return LOW ;
+  return LOW ;
 }
 
 #ifdef __cplusplus
diff --git a/variants/arduino_zero/debug_scripts/variant.gdb b/variants/arduino_zero/debug_scripts/variant.gdb
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/variants/arduino_zero/variant.cpp b/variants/arduino_zero/variant.cpp
index d21675a95b9a453df53b5a4ef94deeb1b93277b3..de13f0b54edce2e69cb5b4747665cdb8ed423af1 100644
--- a/variants/arduino_zero/variant.cpp
+++ b/variants/arduino_zero/variant.cpp
@@ -22,27 +22,27 @@
  * +------------+------------------+--------+-----------------+------------------------------
  * |            | Digital Low      |        |                 |
  * +------------+------------------+--------+-----------------+------------------------------
- * | 0          | 0 -> RX          |  PA10  |                 | EIC/EXTINT[10] ADC/AIN[18] *SERCOM0/PAD[2] TCC1/WO[0] TCC0/WO[2]
- * | 1          | 1 <- TX          |  PA11  |                 | EIC/EXTINT[11] ADC/AIN[19] *SERCOM0/PAD[3] SERCOM2/PAD[3] TCC1/WO[1] TCC0/WO[3]
- * | 2          | ~2               |  PA08  |                 | EIC/NMI ADC/AIN[16] SERCOM0/PAD[0] SERCOM2/PAD[0] *TCC0/WO[0] TCC1/WO[2]
- * | 3          | ~3               |  PA09  |                 | EIC/EXTINT[9] ADC/AIN[17] SERCOM0/PAD[1] SERCOM2/PAD[1] *TCC0/WO[1] TCC1/WO[3]
+ * | 0          | 0 -> RX          |  PA10  |                 | EIC/EXTINT[10] ADC/AIN[18] PTC/X[2] *SERCOM0/PAD[2] TCC1/WO[0] TCC0/WO[2]
+ * | 1          | 1 <- TX          |  PA11  |                 | EIC/EXTINT[11] ADC/AIN[19] PTC/X[3] *SERCOM0/PAD[3] SERCOM2/PAD[3] TCC1/WO[1] TCC0/WO[3]
+ * | 2          | ~2               |  PA08  |                 | EIC/NMI ADC/AIN[16] PTC/X[0] SERCOM0/PAD[0] SERCOM2/PAD[0] *TCC0/WO[0] TCC1/WO[2]
+ * | 3          | ~3               |  PA09  |                 | EIC/EXTINT[9] ADC/AIN[17] PTC/X[1] SERCOM0/PAD[1] SERCOM2/PAD[1] *TCC0/WO[1] TCC1/WO[3]
  * | 4          | ~4               |  PA14  |                 | EIC/EXTINT[14] SERCOM2/PAD[2] SERCOM4/PAD[2] TC3/WO[0] *TCC0/WO[4]
  * | 5          | ~5               |  PA15  |                 | EIC/EXTINT[15] SERCOM2/PAD[3] SERCOM4/PAD[3] TC3/WO[1] *TCC0/WO[5]
- * | 6          | ~6               |  PA20  |                 | EIC/EXTINT[4] SERCOM5/PAD[2] SERCOM3/PAD[2] TC7/WO[0] *TCC0/WO[6]
- * | 7          | ~7               |  PA21  |                 | EIC/EXTINT[5] SERCOM5/PAD[3] SERCOM3/PAD[3] TC7/WO[1] *TCC0/WO[7]
+ * | 6          | ~6               |  PA20  |                 | EIC/EXTINT[4] PTC/X[8] SERCOM5/PAD[2] SERCOM3/PAD[2] TC7/WO[0] *TCC0/WO[6]
+ * | 7          | ~7               |  PA21  |                 | EIC/EXTINT[5] PTC/X[9] SERCOM5/PAD[3] SERCOM3/PAD[3] TC7/WO[1] *TCC0/WO[7]
  * +------------+------------------+--------+-----------------+------------------------------
  * |            | Digital High     |        |                 |
  * +------------+------------------+--------+-----------------+------------------------------
- * | 8          | ~8               |  PA06  |                 | EIC/EXTINT[6] ADC/AIN[6] AC/AIN[2] SERCOM0/PAD[2] *TCC1/WO[0]
- * | 9          | ~9               |  PA07  |                 | EIC/EXTINT[7] ADC/AIN[7] AC/AIN[3] SERCOM0/PAD[3] *TCC1/WO[1]
- * | 10         | ~10              |  PA18  |                 | EIC/EXTINT[2] SERCOM1/PAD[2] SERCOM3/PAD[2] *TC3/WO[0] TCC0/WO[2]
- * | 11         | ~11              |  PA16  |                 | EIC/EXTINT[0] SERCOM1/PAD[0] SERCOM3/PAD[0] *TCC2/WO[0] TCC0/WO[6]
- * | 12         | ~12              |  PA19  |                 | EIC/EXTINT[3] SERCOM1/PAD[3] SERCOM3/PAD[3] *TC3/WO[1] TCC0/WO[3]
- * | 13         | ~13              |  PA17  | LED             | EIC/EXTINT[1] SERCOM1/PAD[1] SERCOM3/PAD[1] *TCC2/WO[1] TCC0/WO[7]
+ * | 8          | ~8               |  PA06  |                 | EIC/EXTINT[6] PTC/Y[4] ADC/AIN[6] AC/AIN[2] SERCOM0/PAD[2] *TCC1/WO[0]
+ * | 9          | ~9               |  PA07  |                 | EIC/EXTINT[7] PTC/Y[5] DC/AIN[7] AC/AIN[3] SERCOM0/PAD[3] *TCC1/WO[1]
+ * | 10         | ~10              |  PA18  |                 | EIC/EXTINT[2] PTC/X[6] SERCOM1/PAD[2] SERCOM3/PAD[2] *TC3/WO[0] TCC0/WO[2]
+ * | 11         | ~11              |  PA16  |                 | EIC/EXTINT[0] PTC/X[4] SERCOM1/PAD[0] SERCOM3/PAD[0] *TCC2/WO[0] TCC0/WO[6]
+ * | 12         | ~12              |  PA19  |                 | EIC/EXTINT[3] PTC/X[7] SERCOM1/PAD[3] SERCOM3/PAD[3] *TC3/WO[1] TCC0/WO[3]
+ * | 13         | ~13              |  PA17  | LED             | EIC/EXTINT[1] PTC/X[5] SERCOM1/PAD[1] SERCOM3/PAD[1] *TCC2/WO[1] TCC0/WO[7]
  * | 14         | GND              |        |                 |
- * | 15         | AREF             |  PA03  |                 | *DAC/VREFP
- * | 16         | SDA              |  PA22  |                 | EIC/EXTINT[6] *SERCOM3/PAD[0] SERCOM5/PAD[0] TC4/WO[0] TCC0/WO[4]
- * | 17         | SCL              |  PA23  |                 | EIC/EXTINT[7] *SERCOM3/PAD[1] SERCOM5/PAD[1] TC4/WO[1] TCC0/WO[5]
+ * | 15         | AREF             |  PA03  |                 | *DAC/VREFP PTC/Y[1]
+ * | 16         | SDA              |  PA22  |                 | EIC/EXTINT[6] PTC/X[10] *SERCOM3/PAD[0] SERCOM5/PAD[0] TC4/WO[0] TCC0/WO[4]
+ * | 17         | SCL              |  PA23  |                 | EIC/EXTINT[7] PTC/X[11] *SERCOM3/PAD[1] SERCOM5/PAD[1] TC4/WO[1] TCC0/WO[5]
  * +------------+------------------+--------+-----------------+------------------------------
  * |            |SPI (Legacy ICSP) |        |                 |
  * +------------+------------------+--------+-----------------+------------------------------
@@ -55,12 +55,12 @@
  * +------------+------------------+--------+-----------------+------------------------------
  * |            | Analog Connector |        |                 |
  * +------------+------------------+--------+-----------------+------------------------------
- * | 24         | A0               |  PA02  |                 | EIC/EXTINT[2] *DAC/VOUT
- * | 25         | A1               |  PB08  |                 | EIC/EXTINT[8] *ADC/AIN[2] SERCOM4/PAD[0] TC4/WO[0]
- * | 26         | A2               |  PB09  |                 | EIC/EXTINT[9] *ADC/AIN[3] SERCOM4/PAD[1] TC4/WO[1]
- * | 27         | A3               |  PA04  |                 | EIC/EXTINT[4] *ADC/AIN[4] AC/AIN[0] SERCOM0/PAD[0] TCC0/WO[0]
- * | 28         | A4               |  PA05  |                 | EIC/EXTINT[5] *ADC/AIN[5] AC/AIN[1] SERCOM0/PAD[1] TCC0/WO[1]
- * | 29         | A5               |  PB02  |                 | EIC/EXTINT[2] *ADC/AIN[10] SERCOM5/PAD[0] TC6/WO[0]
+ * | 24         | A0               |  PA02  |                 | EIC/EXTINT[2] PTC/Y[0] *DAC/VOUT
+ * | 25         | A1               |  PB08  |                 | EIC/EXTINT[8] *ADC/AIN[2] PTC/Y[14] SERCOM4/PAD[0] TC4/WO[0]
+ * | 26         | A2               |  PB09  |                 | EIC/EXTINT[9] *ADC/AIN[3] PTC/Y[15] SERCOM4/PAD[1] TC4/WO[1]
+ * | 27         | A3               |  PA04  |                 | EIC/EXTINT[4] *ADC/AIN[4] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[0] TCC0/WO[0]
+ * | 28         | A4               |  PA05  |                 | EIC/EXTINT[5] *ADC/AIN[5] AC/AIN[1] PTC/Y[5] SERCOM0/PAD[1] TCC0/WO[1]
+ * | 29         | A5               |  PB02  |                 | EIC/EXTINT[2] *ADC/AIN[10] PTC/Y[8] SERCOM5/PAD[0] TC6/WO[0]
  * +------------+------------------+--------+-----------------+------------------------------
  * |            | LEDs             |        |                 |
  * +------------+------------------+--------+-----------------+------------------------------