diff --git a/sam3s_example/mains/debug_uart_stdlib.c b/sam3s_example/mains/debug_uart_stdlib.c
index 19ceb5f..bcc9f86 100644
--- a/sam3s_example/mains/debug_uart_stdlib.c
+++ b/sam3s_example/mains/debug_uart_stdlib.c
@@ -3,18 +3,7 @@
 #include <stdio.h>
 #include <string.h>
 
-/*----------------------------------------------------------------------------
- *  *        Definitions
- *   *----------------------------------------------------------------------------*/
-
-/** Console baudrate always using 115200. */
-#define CONSOLE_BAUDRATE    115200
-/** Usart Hw interface used by the console (UART0). */
-#define CONSOLE_USART       UART0
-/** Usart Hw ID used by the console (UART0). */
-#define CONSOLE_ID          ID_UART0
-/** Pins description corresponding to Rxd,Txd, (UART pins) */
-#define CONSOLE_PINS        {PINS_UART}
+extern void UART_PutString(const char *str, int len);
 
 /*----------------------------------------------------------------------------
  *  *        Variables
@@ -25,100 +14,6 @@
 
 static const Pin *led;
 
-/** Is Console Initialized. */
-static uint8_t _ucIsConsoleInitialized=0 ;
-
-/**
- * \brief Configures an USART peripheral with the specified parameters.
- *
- * \param baudrate  Baudrate at which the USART should operate (in Hz).
- * \param masterClock  Frequency of the system master clock (in Hz).
- */
-extern void UART_Configure( uint32_t baudrate, uint32_t masterClock)
-{
-    const Pin pPins[] = CONSOLE_PINS;
-    Uart *pUart = CONSOLE_USART;
-
-
-    /* Configure PIO */
-    PIO_Configure(pPins, PIO_LISTSIZE(pPins));
-
-    /* Configure PMC */
-/*     PMC_PCER0 : (PMC Offset: 0x0010) Peripheral Clock Enable Register 0 -------- */
-    PMC->PMC_PCER0 = 1 << CONSOLE_ID;
-
-    /* Reset and disable receiver & transmitter */
-    pUart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX
-                   | UART_CR_RXDIS | UART_CR_TXDIS;
-
-    /* Configure mode */
-    pUart->UART_MR =  UART_MR_PAR_NO;   // No parity
-
-    /* Configure baudrate */
-    /* Asynchronous, no oversampling */
-    // BRG: Baud rate generator
-    pUart->UART_BRGR = (masterClock / baudrate) / 16;
-
-    /* Disable PDC channel */
-    // PDC: Peripheral DMA
-    // TCR: Transfer Control Register
-    pUart->UART_PTCR = UART_PTCR_RXTDIS | UART_PTCR_TXTDIS;
-
-    /* Enable receiver and transmitter */
-    
-    pUart->UART_CR = UART_CR_RXEN | UART_CR_TXEN;
-
-    _ucIsConsoleInitialized=1 ;
-}
-
-
-/**
- * \brief Outputs a character on the UART line.
- *
- * \note This function is synchronous (i.e. uses polling).
- * \param c  Character to send.
- */
-extern void UART_PutChar( uint8_t c )
-{
-    Uart *pUart=CONSOLE_USART ;
-
-    if ( !_ucIsConsoleInitialized )
-    {
-        UART_Configure(CONSOLE_BAUDRATE, BOARD_MCK);
-    }
-
-    /* Wait for the transmitter to be ready */
-    // UART_SR: Statzs register
-    while ( (pUart->UART_SR & UART_SR_TXEMPTY) == 0 ) ;
-
-    /* Send character */
-    // THR: transmit holding register
-    pUart->UART_THR=c ;
-
-}
-
-
-
-/**
- * \brief Input a character from the UART line.
- *
- * \note This function is synchronous
- * \return character received.
- */
-extern uint32_t UART_GetChar( void )
-{
-    Uart *pUart=CONSOLE_USART ;
-
-    if ( !_ucIsConsoleInitialized )
-    {
-        UART_Configure(CONSOLE_BAUDRATE, BOARD_MCK);
-    }
-
-    while ( (pUart->UART_SR & UART_SR_RXRDY) == 0 ) ;
-
-    return pUart->UART_RHR ;
-}
-
 void Configure_LED() {
     PIO_Configure(&greenled, PIO_LISTSIZE(greenled));
     PIO_Configure(&redled, PIO_LISTSIZE(redled));
@@ -127,27 +22,18 @@
     led = &redled;
 }
 
-void UART_PutString(char *str, int len) {
-    int i;
-    for (i=0; i<len; i++) {
-        UART_PutChar(*str++);
-    }
-}
-
 int main() {
-    char *cmdp;
-// FIXME: initialize system clock done in lowlevelinit?
-
+    size_t ret = 0;
     Configure_LED();
 
-    size_t ret = asprintf(&cmdp, "Clockval: %d\r\n", BOARD_MCK);
+    ret = printf("Clockval: %d\r\n", BOARD_MCK);
 
-    if (ret != strlen(cmdp)){
-         PIO_Clear(&redled);
+    if (ret < 0){
+        PIO_Clear(&redled);
     } else {
-         PIO_Clear(&greenled);
+        PIO_Clear(&greenled);
         while (1) {
-            UART_PutString(cmdp, strlen(cmdp));
+            printf("Clockval**++????: %d\r\n", BOARD_MCK);
         }
     }
 
