diff --git a/FreeRTOS-Plus/Demo/Also_See_FreeRTOS+TCP_and_FreeRTOS_FAT_in_the_lab.url b/FreeRTOS-Plus/Demo/Also_See_More_FreeRTOS+TCP_and_FreeRTOS_FAT_in_the_lab.url
similarity index 100%
rename from FreeRTOS-Plus/Demo/Also_See_FreeRTOS+TCP_and_FreeRTOS_FAT_in_the_lab.url
rename to FreeRTOS-Plus/Demo/Also_See_More_FreeRTOS+TCP_and_FreeRTOS_FAT_in_the_lab.url
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/FreeRTOSConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/FreeRTOSConfig.h
index 93257e422..6670f56f0 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/FreeRTOSConfig.h
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator/FreeRTOSConfig.h
@@ -150,7 +150,7 @@ example, on my development laptop setting configNETWORK_INTERFACE_TO_USE to 4
 results in the wired network being used, while setting
 configNETWORK_INTERFACE_TO_USE to 2 results in the wireless network being
 used. */
-#define configNETWORK_INTERFACE_TO_USE 4L
+#define configNETWORK_INTERFACE_TO_USE 2L
 
 /* The address of an echo server that will be used by the two demo echo client
 tasks.
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c
index d97e98ccf..bfc89cdda 100644
--- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c
@@ -1438,10 +1438,23 @@ FreeRTOS_Socket_t *pxSocket;
 				case FREERTOS_SO_SET_SEMAPHORE:
 					{
 						pxSocket->pxUserSemaphore = *( ( SemaphoreHandle_t * ) pvOptionValue );
+						xReturn = 0;
 					}
-					xReturn = 0;
 					break;
 			#endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */
+
+			#if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK != 0 )
+				case FREERTOS_SO_WAKEUP_CALLBACK:
+				{
+					/* Each socket can have a callback function that is executed
+					when there is an event the socket's owner might want to
+					process. */
+					pxSocket->pxUserWakeCallback = ( SocketWakeupCallback_t ) pvOptionValue;
+					xReturn = 0;
+				}
+				break;
+			#endif /* ipconfigSOCKET_HAS_USER_WAKE_CALLBACK */
+
 			case FREERTOS_SO_SNDBUF:	/* Set the size of the send buffer, in units of MSS (TCP only) */
 			case FREERTOS_SO_RCVBUF:	/* Set the size of the receive buffer, in units of MSS (TCP only) */
 				{
@@ -1839,6 +1852,15 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
 	}
 	#endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */
 
+	#if( ipconfigSOCKET_HAS_USER_WAKE_CALLBACK == 1 )
+	{
+		if( pxSocket->pxUserWakeCallback != NULL )
+		{
+			pxSocket->pxUserWakeCallback( pxSocket );
+		}
+	}
+	#endif /* ipconfigSOCKET_HAS_USER_SEMAPHORE */
+
 	#if( ipconfigSUPPORT_SELECT_FUNCTION == 1 )
 	{
 		if( pxSocket->pxSocketSet != NULL )
@@ -2854,7 +2876,7 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
 
 #if( ipconfigUSE_TCP == 1 )
 
-	static StreamBuffer_t *prvTCPCreateStream ( FreeRTOS_Socket_t *pxSocket, BaseType_t xIsInputStream )
+	static StreamBuffer_t *prvTCPCreateStream( FreeRTOS_Socket_t *pxSocket, BaseType_t xIsInputStream )
 	{
 	StreamBuffer_t *pxBuffer;
 	size_t uxLength;
@@ -2880,7 +2902,7 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
 			if( pxSocket->u.xTCP.uxLittleSpace == 0ul )
 			{
 				pxSocket->u.xTCP.uxLittleSpace  = ( 1ul * pxSocket->u.xTCP.uxRxStreamSize ) / 5u; /*_RB_ Why divide by 5?  Can this be changed to a #define? */
-				if( (pxSocket->u.xTCP.uxLittleSpace < pxSocket->u.xTCP.usCurMSS ) && ( pxSocket->u.xTCP.uxRxStreamSize >= 2 * pxSocket->u.xTCP.usCurMSS ) )
+				if( ( pxSocket->u.xTCP.uxLittleSpace < pxSocket->u.xTCP.usCurMSS ) && ( pxSocket->u.xTCP.uxRxStreamSize >= 2u * pxSocket->u.xTCP.usCurMSS ) )
 				{
 					pxSocket->u.xTCP.uxLittleSpace = pxSocket->u.xTCP.usCurMSS;
 				}
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/History.txt b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/History.txt
index 57125a547..727bf3c84 100644
--- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/History.txt
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/History.txt
@@ -1,37 +1,81 @@
-Changes since the 160112 release
-
-FTP : now has ipconfigFTP_HAS_USER_PROPERTIES_HOOK
-Each user can be assigned a different root directory and different access rights.
-Read-only access for FTP is now possible.
-
-Adapted to comply a bit more to MISRA rules.
-The introduction of unsigned true/false, e.g. pdTRUE_UNSIGNED.
-
-'ipBUFFER_PADDING' now configurable (expert option).
-
-Added ipconfigFTP_HAS_USER_PROPERTIES_HOOK.
-ipconfigHAS_TX_CRC_OFFLOADING
-Improve support for read only file systems in the FTP server.
-
-Depending on priorities: FreeRTOS_accept() could fail if the priority of the application task is higher than the priority of the IP-task. Now with a higher priority FreeRTOS_accept() will still work correctly.
-
-Depending on the tick rate: A TCP socket could freeze (stop working) when the FreeRTOS tick rate was lower than 1,000 Hz. Now also tested with 100 Hz.
-
-When "ipconfigZERO_COPY_TX_DRIVER = 0", sometime xNetworkInterfaceOutput() was called to send out a small TCP ACK. The network buffer would refer to space on the TCP socket ("lastPacket"), which was not 8-byte aligned. Repaired: from now on the buffer will have a proper 8-byte alignment.
-
-"#if __cplusplus" is been replaced with the more proper test "#ifdef __cplusplus".
-
-
-
-These are the recent commits:
-565 Initial check-in of +TCP/multi
-566 LPC18xx : updated and re-tested the TCP and FAT drivers
-569 +TCP : protocols: Added an installable application hook: "CheckDrivesHook"
-570 +TCP : will now work properly when configTICK_RATE_HZ < 1000
-571 +TCP : will now work properly when configTICK_RATE_HZ < 1000
-572 +TCP : FreeRTOS_recvfrom now recognises "FREERTOS_MSG_PEEK"
-573 +FAT : Zynq : writing may fail if it goes too fast. Introduced pauses but not yet satisfied
-
+Changes since V2.0.0 release
+
+	+ Added FREERTOS_SO_WAKEUP_CALLBACK option so a callback can be executed
+	  when data arrives.
+	+ Improve print output when using WinPCap to assist in selecting the
+	  correct network interface.
+
+Changes between 160908 and 160919 releases:
+
+	+ Add a NULL check before attempting to close the DHCP socket.  [Prior to
+	  160823 the IP task closed the DHCP socket by calling a public API function
+	  - which checked for the socket being NULL.  This was changed to call a
+	  local private function, which did not have a NULL check, in place of the
+	  public API function.]
+	+ Various [internal only] naming changes to better comply with the FreeRTOS
+	  naming conventions.
+	+ Improvements to the Zynq network driver.  DMA transmission buffers now use
+	  a counting semaphore. When all TX-buffers are in-use, the IP-task will
+	  block momentarily until a TX-buffer becomes available.
+	+ Experimental implementation of the TCP window scaling protocol.  The
+	  scaling option will always be offered, at least with a factor 1. If the
+	  TCP sliding window size becomes more than 64KB, the factor will increase
+	  automatically.
+	+ ipconfigETHERNET_MINIMUM_PACKET_BYTES is now applied for every protocol:
+	  TCP, UDP, and ARP.
+	+ Updated the Zynq project to use BufferAllocation_1.c rather than
+	  BufferAllocation_2.c - which is a requirement with its current
+	  configuration (due to the alignment requirements on the combined cache and
+	  DMA configuration).
+
+Changes between 160823 and 160908 releases:
+
+	+ Use ipconfigZERO_COPY_TX_DRIVER as the xReleaseAfterSend() parameter where
+	  prvTCPReturnPacket() is called in prvSendData() to prevent unnecessary
+	  copying of data.
+	+ Remove the use of the uxGetRxEventCount variable, which was used to give
+	  priority to incoming messages, but could result in the IP task starving
+	  application tasks of processing time.
+
+Changes between 160112 and 160823 releases
+
+	NOTE:  The 160908 release is a maintenance release for the 160112 single
+	interface labs release - not a release of the current development branch.
+
+	+ Various minor stability enhancements, including the ability to work with
+	  configTICK_RATE_HZ set to less than 1KHz, closing DHCP sockets directly
+	  rather than via FreeRTOS_closesocket(), and better handling of unknown
+	  TCP packets before an IP address has been assigned.
+	+ ipBUFFER_PADDING is now configurable through the ipconfigBUFFER_PADDING
+	  constant to improve network buffer alignment handling capabilities (expert
+	  users/driver writers only).
+	+ Multiple improvements to the FTP server, including to how read only and
+	  zero length files are handled.
+	+ ipconfigFTP_HAS_USER_PROPERTIES_HOOK (to allow each user to have a
+	  different root directory and access rights) and
+	  ipconfigHTTP_HAS_HANDLE_REQUEST_HOOK (to handle AJAX style data)
+	  introduced, although these are not yet fully tested and the constant names
+	  are likely to change.
+	+ Introduce ipconfigHAS_TX_CRC_OFFLOADING.
+	+ ipconfigUSE_DHCP_HOOK is now called ipconfigUSE_DHCP_HOOK, and the name
+	  of the callback function has also changed.  See the web documentation for
+	  details.
+	+ ipconfigTCP_RX_BUF_LEN is now ipconfigTCP_RX_BUFFER_LENGTH, and
+	  ipconfigTCP_TX_BUF_LEN is now ipconfigTCP_TX_BUFFER_LENGTH, which is
+	  actually how they have always been documented.
+	+ Added example TFTP server capable of receiving (not sending) files.
+	  Intended for bootloader type functionality.
+	+ Various variable name changes for consistency (mainly ensuring UDP, TCP,
+	  DNS, etc. always use the same case letters, and type prefixes are correct).
+	+ Various minor edits to improve types used by internal variables.
+	+ Simplified mapping of standard library functions to their Visual Studio
+	  equivalents.
+	+ Improve robustness of network drivers.
+	+ Introduce pxResizeNetworkBufferWithDescriptor().
+	+ Removed obsolete FreeRTOSIPConfig.h constants from
+	  FreeRTOSIPConfigDefaults.h.
+	+ Added additional asserts() - predominantly to catch incorrect structure
+	  packing.
 
 Changes between 160112 and 160111 releases
 
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOSIPConfigDefaults.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOSIPConfigDefaults.h
index 042243d66..ef1a20fa7 100644
--- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOSIPConfigDefaults.h
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOSIPConfigDefaults.h
@@ -502,6 +502,10 @@ from the FreeRTOSIPConfig.h configuration header file. */
 	#define ipconfigSOCKET_HAS_USER_SEMAPHORE 0
 #endif
 
+#ifndef ipconfigSOCKET_HAS_USER_WAKE_CALLBACK
+	#define ipconfigSOCKET_HAS_USER_WAKE_CALLBACK 0
+#endif
+
 #ifndef ipconfigSUPPORT_SELECT_FUNCTION
 	#define ipconfigSUPPORT_SELECT_FUNCTION 0
 #endif
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_Sockets.h b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_Sockets.h
index 0af17d475..781dc1012 100644
--- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_Sockets.h
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/include/FreeRTOS_Sockets.h
@@ -111,11 +111,11 @@ FreeRTOS_setsockopt(). */
 #define FREERTOS_SO_RCVBUF				( 5 )		/* Set the size of the receive buffer (TCP only) */
 
 #if ipconfigUSE_CALLBACKS == 1
-#define FREERTOS_SO_TCP_CONN_HANDLER	( 6 )		/* Install a callback for (dis) connection events. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
-#define FREERTOS_SO_TCP_RECV_HANDLER	( 7 )		/* Install a callback for receiving TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
-#define FREERTOS_SO_TCP_SENT_HANDLER	( 8 )		/* Install a callback for sending TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
-#define FREERTOS_SO_UDP_RECV_HANDLER	( 9 )		/* Install a callback for receiving UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
-#define FREERTOS_SO_UDP_SENT_HANDLER	( 10 )		/* Install a callback for sending UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+	#define FREERTOS_SO_TCP_CONN_HANDLER	( 6 )		/* Install a callback for (dis) connection events. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+	#define FREERTOS_SO_TCP_RECV_HANDLER	( 7 )		/* Install a callback for receiving TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+	#define FREERTOS_SO_TCP_SENT_HANDLER	( 8 )		/* Install a callback for sending TCP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+	#define FREERTOS_SO_UDP_RECV_HANDLER	( 9 )		/* Install a callback for receiving UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
+	#define FREERTOS_SO_UDP_SENT_HANDLER	( 10 )		/* Install a callback for sending UDP data. Supply pointer to 'F_TCP_UDP_Handler_t' (see below) */
 #endif /* ipconfigUSE_CALLBACKS */
 
 #define FREERTOS_SO_REUSE_LISTEN_SOCKET	( 11 )		/* When a listening socket gets connected, do not create a new one but re-use it */
@@ -123,7 +123,7 @@ FreeRTOS_setsockopt(). */
 #define FREERTOS_SO_WIN_PROPERTIES		( 13 )		/* Set all buffer and window properties in one call, parameter is pointer to WinProperties_t */
 #define FREERTOS_SO_SET_FULL_SIZE		( 14 )		/* Refuse to send packets smaller than MSS  */
 
-#define FREERTOS_SO_STOP_RX				( 15 )		/* Tempoarily hold up reception, used by streaming client */
+#define FREERTOS_SO_STOP_RX				( 15 )		/* Temporarily hold up reception, used by streaming client */
 
 #if( ipconfigUDP_MAX_RX_PACKETS > 0 )
 	#define FREERTOS_SO_UDP_MAX_RX_PACKETS	( 16 )		/* This option helps to limit the maximum number of packets a UDP socket will buffer */
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/WinPCap/NetworkInterface.c b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/WinPCap/NetworkInterface.c
index 0c5c9da4c..d5ce7463d 100644
--- a/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/WinPCap/NetworkInterface.c
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/WinPCap/NetworkInterface.c
@@ -236,50 +236,65 @@ static pcap_if_t * prvPrintAvailableNetworkInterfaces( void )
 pcap_if_t * pxAllNetworkInterfaces = NULL, *xInterface;
 int32_t lInterfaceNumber = 1;
 char cBuffer[ 512 ];
+static BaseType_t xInvalidInterfaceDetected = pdFALSE;
 
-	if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &pxAllNetworkInterfaces, cErrorBuffer ) == -1 )
+	if( xInvalidInterfaceDetected == pdFALSE )
 	{
-		printf( "Could not obtain a list of network interfaces\n%s\n", cErrorBuffer );
-		pxAllNetworkInterfaces = NULL;
-	}
+		if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &pxAllNetworkInterfaces, cErrorBuffer ) == -1 )
+		{
+			printf( "Could not obtain a list of network interfaces\n%s\n", cErrorBuffer );
+			pxAllNetworkInterfaces = NULL;
+		}
+		else
+		{
+			printf( "\r\n\r\nThe following network interfaces are available:\r\n\r\n" );
+		}
 
-	if( pxAllNetworkInterfaces != NULL )
-	{
-		/* Print out the list of network interfaces.  The first in the list
-		is interface '1', not interface '0'. */
-		for( xInterface = pxAllNetworkInterfaces; xInterface != NULL; xInterface = xInterface->next )
+		if( pxAllNetworkInterfaces != NULL )
 		{
-			/* The descriptions of the devices can be full of spaces, clean them
-			a little.  printf() can only be used here because the network is not
-			up yet - so no other network tasks will be running. */
-			printf( "%d. %s\n", lInterfaceNumber, prvRemoveSpaces( cBuffer, sizeof( cBuffer ), xInterface->name ) );
-			printf( "   (%s)\n", prvRemoveSpaces(cBuffer, sizeof( cBuffer ), xInterface->description ? xInterface->description : "No description" ) );
-			printf( "\n" );
-			lInterfaceNumber++;
+			/* Print out the list of network interfaces.  The first in the list
+			is interface '1', not interface '0'. */
+			for( xInterface = pxAllNetworkInterfaces; xInterface != NULL; xInterface = xInterface->next )
+			{
+				/* The descriptions of the devices can be full of spaces, clean them
+				a little.  printf() can only be used here because the network is not
+				up yet - so no other network tasks will be running. */
+				printf( "Interface %d - %s\n", lInterfaceNumber, prvRemoveSpaces( cBuffer, sizeof( cBuffer ), xInterface->name ) );
+				printf( "              (%s)\n", prvRemoveSpaces(cBuffer, sizeof( cBuffer ), xInterface->description ? xInterface->description : "No description" ) );
+				printf( "\n" );
+				lInterfaceNumber++;
+			}
 		}
-	}
 
-	if( lInterfaceNumber == 1 )
-	{
-		/* The interface number was never incremented, so the above for() loop
-		did not execute meaning no interfaces were found. */
-		printf( " \nNo network interfaces were found.\n" );
-		pxAllNetworkInterfaces = NULL;
-	}
+		if( lInterfaceNumber == 1 )
+		{
+			/* The interface number was never incremented, so the above for() loop
+			did not execute meaning no interfaces were found. */
+			printf( " \nNo network interfaces were found.\n" );
+			pxAllNetworkInterfaces = NULL;
+		}
 
-	printf( "The interface that will be opened is set by\n" );
-	printf( "\"configNETWORK_INTERFACE_TO_USE\" which should be defined in FreeRTOSConfig.h\n" );
-	printf( "Attempting to open interface number %d.\n", xConfigNextworkInterfaceToUse );
+		printf( "\r\nThe interface that will be opened is set by " );
+		printf( "\"configNETWORK_INTERFACE_TO_USE\", which\r\nshould be defined in FreeRTOSConfig.h\r\n" );
 
-	if( ( xConfigNextworkInterfaceToUse < 1L ) || ( xConfigNextworkInterfaceToUse > lInterfaceNumber ) )
-	{
-		printf( "configNETWORK_INTERFACE_TO_USE is not in the valid range.\n" );
+		if( ( xConfigNextworkInterfaceToUse < 1L ) || ( xConfigNextworkInterfaceToUse >= lInterfaceNumber ) )
+		{
+			printf( "\r\nERROR:  configNETWORK_INTERFACE_TO_USE is set to %d, which is an invalid value.\r\n", xConfigNextworkInterfaceToUse );
+			printf( "Please set configNETWORK_INTERFACE_TO_USE to one of the interface numbers listed above,\r\n" );
+			printf( "then re-compile and re-start the application.  Only Ethernet (as opposed to WiFi)\r\n" );
+			printf( "interfaces are supported.\r\n\r\nHALTING\r\n\r\n\r\n" );
+			xInvalidInterfaceDetected = pdTRUE;
 
-		if( pxAllNetworkInterfaces != NULL )
+			if( pxAllNetworkInterfaces != NULL )
+			{
+				/* Free the device list, as no devices are going to be opened. */
+				pcap_freealldevs( pxAllNetworkInterfaces );
+				pxAllNetworkInterfaces = NULL;
+			}
+		}
+		else
 		{
-			/* Free the device list, as no devices are going to be opened. */
-			pcap_freealldevs( pxAllNetworkInterfaces );
-			pxAllNetworkInterfaces = NULL;
+			printf( "Attempting to open interface number %d.\n", xConfigNextworkInterfaceToUse );
 		}
 	}
 
diff --git a/FreeRTOS/Source/include/stream_buffer.h b/FreeRTOS/Source/include/stream_buffer.h
index 13b4923ff..aa6f2962b 100644
--- a/FreeRTOS/Source/include/stream_buffer.h
+++ b/FreeRTOS/Source/include/stream_buffer.h
@@ -52,6 +52,10 @@
 #ifndef STREAM_BUFFER_H
 #define STREAM_BUFFER_H
 
+#if defined( __cplusplus )
+extern "C" {
+#endif
+
 /**
  * Type by which stream buffers are referenced.  For example, a call to
  * xStreamBufferCreate() returns an StreamBufferHandle_t variable that can
@@ -843,7 +847,7 @@ StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,
 #endif
 
 #if defined( __cplusplus )
-extern "C" {
+}
 #endif
 
 #endif	/* !defined( STREAM_BUFFER_H ) */
diff --git a/FreeRTOS/Source/include/task.h b/FreeRTOS/Source/include/task.h
index f2db393d7..85aaaa69b 100644
--- a/FreeRTOS/Source/include/task.h
+++ b/FreeRTOS/Source/include/task.h
@@ -44,8 +44,8 @@ extern "C" {
  * MACROS AND DEFINITIONS
  *----------------------------------------------------------*/
 
-#define tskKERNEL_VERSION_NUMBER "V9.0.0"
-#define tskKERNEL_VERSION_MAJOR 9
+#define tskKERNEL_VERSION_NUMBER "V10.0.0"
+#define tskKERNEL_VERSION_MAJOR 10
 #define tskKERNEL_VERSION_MINOR 0
 #define tskKERNEL_VERSION_BUILD 0
 
diff --git a/FreeRTOS/Source/tasks.c b/FreeRTOS/Source/tasks.c
index 0e3069d75..7414b989f 100644
--- a/FreeRTOS/Source/tasks.c
+++ b/FreeRTOS/Source/tasks.c
@@ -110,6 +110,7 @@ set then don't fill the stack so there is no unnecessary dependency on memset. *
 /*
  * Macros used by vListTask to indicate which state a task is in.
  */
+#define tskRUNNING_CHAR		( 'X' )
 #define tskBLOCKED_CHAR		( 'B' )
 #define tskREADY_CHAR		( 'R' )
 #define tskDELETED_CHAR		( 'D' )
@@ -4209,6 +4210,9 @@ TCB_t *pxTCB;
 			{
 				switch( pxTaskStatusArray[ x ].eCurrentState )
 				{
+					case eRunning:		cStatus = tskRUNNING_CHAR;
+										break;
+
 					case eReady:		cStatus = tskREADY_CHAR;
 										break;