Index: firmware/FSC/src/num_conversion.c
===================================================================
--- firmware/FSC/src/num_conversion.c	(revision 11681)
+++ firmware/FSC/src/num_conversion.c	(revision 11696)
@@ -19,5 +19,5 @@
 {
   U08 len = strlen((const char *)source_ptr);
-  pU08 dest_ptr = nc_format_buffer;
+  pU08 dest_ptr = (pU08)&nc_format_buffer;
 
   // Fillup loop
@@ -35,5 +35,5 @@
   *dest_ptr = 0; // Terminate format string
 
-  return nc_format_buffer;
+  return (pU08)&nc_format_buffer;
 }
 //-----------------------------------------------------------------------------
Index: firmware/FSC/src/w5100_spi_interface.c
===================================================================
--- firmware/FSC/src/w5100_spi_interface.c	(revision 11681)
+++ firmware/FSC/src/w5100_spi_interface.c	(revision 11696)
@@ -424,9 +424,8 @@
 	
 	// now calculate the offset address
-            // calculated according to W5100 datasheet page: 44
-            /*
-	if ((offset + NumBytes) > (S0_TX_MASK + 1) )  // if data is turned over in RX-mem
-	{
-		upper_size = (S0_TX_MASK + 1) - offset;
+	// calculated according to W5100 datasheet page: 44
+	if ((offset + NumBytes) > (S0_RX_MASK + 1) )  // if data is turned over in RX-mem
+	{
+		upper_size = (S0_RX_MASK + 1) - offset;
 		lower_size = NumBytes - upper_size;
 		for (U16 i = 0; i < upper_size; ++i)
@@ -442,5 +441,5 @@
 		for (U16 i = 0; i < lower_size; ++i)
 		{
-			w5100_write(S0_TX_BASE + i, string[upper_size+i]);
+			w5100_write(S0_RX_BASE + i, string[upper_size+i]);
 			//usart_write_str((pU08)"wr:");
 			//usart_write_U16_hex(S0_RX_BASE + i);
@@ -453,7 +452,7 @@
 	else // if not data turn over in RX-mem
 	{
-	  */      for (U16 i = 0; i < NumBytes; ++i)
-		{
-			w5100_write(S0_TX_BASE + (offset + i)&S0_TX_MASK, string[i]);
+		for (U16 i = 0; i < NumBytes; ++i)
+		{
+			w5100_write(start_address + i, string[i]);
 			//usart_write_str((pU08)"wr:");
 			//usart_write_U16_hex(start_address + i);
@@ -463,5 +462,5 @@
 
 		}
-	//}
+	}
 
 	// inform W5100 about how much data was written.
@@ -491,7 +490,9 @@
 void eth_write_str( U08* str ){
 
-        while (*str && eth_write_index < ETH_WRITE_BUFFER_SIZE)
-        {
-            eth_write_buffer[eth_write_index++] = *str++;
+	while (*str) {
+		if (eth_write_index < ETH_WRITE_BUFFER_SIZE) {
+			eth_write_buffer[eth_write_index++] = *str++;
+		}
+		
 	}
 	w5100_set_TX(eth_write_buffer, eth_write_index);
@@ -501,7 +502,9 @@
 void eth_writeln_str( U08* str ){
 
-	while (*str && eth_write_index < ETH_WRITE_BUFFER_SIZE) 
-	{
-            eth_write_buffer[eth_write_index++] = *str++;
+	while (*str) 
+	{
+		if (eth_write_index < ETH_WRITE_BUFFER_SIZE) {
+			eth_write_buffer[eth_write_index++] = *str++;
+		}
 	}
 	if (eth_write_index < ETH_WRITE_BUFFER_SIZE) {
