Index: binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/Telnet.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/Telnet.cs	(revision 182)
+++ binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/Telnet.cs	(revision 183)
@@ -9,7 +9,5 @@
 	public class Telnet : IServer
 	{
-		private Thread telnetThread = null;
 		private TcpListener listener = null;
-		private bool closed = false;
 		private bool authEnabled = false;
 		private List<TelnetConnection> connections = new List<TelnetConnection> ();
@@ -29,6 +27,7 @@
 				else
 					listener = new TcpListener (IPAddress.Loopback, port);
-				telnetThread = ThreadMaster.Create ("thread TelnetListenThread", new ThreadStart (telnetListenThread));
-				telnetThread.Start ();
+
+				listener.Start ();
+				listener.BeginAcceptTcpClient (new AsyncCallback (AcceptClient), null);
 
 				NetTelnetServer.RegisterServer (this);
@@ -40,19 +39,10 @@
 		}
 
-		private void telnetListenThread ()
+		private void AcceptClient (IAsyncResult asyncResult)
 		{
-			try {
-				listener.Start ();
-				try {
-					while (!closed) {
-						TelnetConnection c = new TelnetConnection (listener.AcceptTcpClient (), authEnabled);
-						connections.Add (c);
-					}
-				} catch (SocketException) {
-				} catch (ThreadInterruptedException) {
-				}
-				ThreadMaster.Remove (Thread.CurrentThread.Name);
-			} catch (Exception ex) {
-				Log.Out ("Error in TelnetListenThread: " + ex);
+			if (listener.Server.IsBound) {
+				TelnetConnection c = new TelnetConnection (listener.EndAcceptTcpClient (asyncResult), authEnabled);
+				connections.Add (c);
+				listener.BeginAcceptTcpClient (new AsyncCallback (AcceptClient), null);
 			}
 		}
@@ -61,5 +51,4 @@
 		{
 			try {
-				closed = true;
 				if (listener != null) {
 					listener.Stop ();
@@ -68,8 +57,4 @@
 				foreach (TelnetConnection c in connections) {
 					c.Close ();
-				}
-				Thread.Sleep (100);
-				if (telnetThread != null) {
-					telnetThread.Interrupt ();
 				}
 			} catch (Exception e) {
Index: binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/TelnetConnection.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/TelnetConnection.cs	(revision 182)
+++ binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/TelnetConnection.cs	(revision 183)
@@ -93,4 +93,5 @@
 						}
 					}
+				} catch (ObjectDisposedException) {
 				} catch (IOException) {
 				} catch (ThreadInterruptedException) {
Index: binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/Web.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/Web.cs	(revision 182)
+++ binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/Web.cs	(revision 183)
@@ -29,6 +29,8 @@
 				}
 
-				if (!HttpListener.IsSupported)
-					throw new NotSupportedException ("Needs Windows XP SP2, Server 2003 or later.");
+				if (!HttpListener.IsSupported) {
+					Log.Out ("Webserver not started (needs Windows XP SP2, Server 2003 or later or Mono)");
+					return;
+				}
  
 				handlers.Add ("/index.htm", new SimpleRedirectHandler ("/static/index.html"));
