will/wont states before do/wont, just like actual telnet codes and event numbers
diff --git a/libtelnet.c b/libtelnet.c
index 73c800f..4a86537 100644
--- a/libtelnet.c
+++ b/libtelnet.c
@@ -527,16 +527,6 @@
 			break;
 
 		/* negotiation commands */
-		case TELNET_STATE_DO:
-			_negotiate(telnet, TELNET_DO, byte);
-			start = i + 1;
-			telnet->state = TELNET_STATE_DATA;
-			break;
-		case TELNET_STATE_DONT:
-			_negotiate(telnet, TELNET_DONT, byte);
-			start = i + 1;
-			telnet->state = TELNET_STATE_DATA;
-			break;
 		case TELNET_STATE_WILL:
 			_negotiate(telnet, TELNET_WILL, byte);
 			start = i + 1;
@@ -547,6 +537,16 @@
 			start = i + 1;
 			telnet->state = TELNET_STATE_DATA;
 			break;
+		case TELNET_STATE_DO:
+			_negotiate(telnet, TELNET_DO, byte);
+			start = i + 1;
+			telnet->state = TELNET_STATE_DATA;
+			break;
+		case TELNET_STATE_DONT:
+			_negotiate(telnet, TELNET_DONT, byte);
+			start = i + 1;
+			telnet->state = TELNET_STATE_DATA;
+			break;
 
 		/* subnegotiation -- determine subnegotiation telopt */
 		case TELNET_STATE_SB: