diff --git a/zsirozas/Form1.cs b/zsirozas/Form1.cs
index abdc57f2dd2349f8aec82714b5cda0b28c6d663b..0f9e320e487670529d04c6cabd0702d1b42fe9a0 100644
--- a/zsirozas/Form1.cs
+++ b/zsirozas/Form1.cs
@@ -210,6 +210,7 @@ namespace zsirozas
             {
                 var rooms = client.remoteServer.ListRooms();
                 var roomInfos = new Dictionary<string, RoomInfo>();
+                listBoxRooms.Items.Clear();
                 foreach (var roomID in rooms)
                 {
                     listBoxRooms.Items.Add(roomID);
@@ -217,6 +218,7 @@ namespace zsirozas
                 }
                 var users = client.remoteServer.ListUsers();
                 var userInfos = new Dictionary<string, UserInfo>();
+                listBoxUsers.Items.Clear();
                 foreach (var userID in users)
                 {
                     listBoxUsers.Items.Add(userID);
@@ -327,7 +329,7 @@ namespace zsirozas
 
         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
         {
-            if (client.server != null)
+            if (client.serverAddr != null)
             {
                 try
                 {
diff --git a/zsirozas/GameClient.cs b/zsirozas/GameClient.cs
index b0ff7fa4e9e27c96d493d3c6f99b68887883e480..53c0008e173282f82608f676217bffc2c07d3e50 100644
--- a/zsirozas/GameClient.cs
+++ b/zsirozas/GameClient.cs
@@ -58,18 +58,16 @@ namespace zsirozas
         {
             if (pingServer(server_ip, server_port))
             {
-                server = new IPEndPoint(IPAddress.Parse(server_ip), server_port);
+                serverAddr = new IPEndPoint(IPAddress.Parse(server_ip), server_port);
                 try
                 {
-                    remoteServer = new RawTcpRemoteServer(server.Address, server.Port);
-                    incomingListener = new TcpListener(IPAddress.Any, serverIncoming);
-                    incomingListener.Start();
+                    remoteServer = new RawTcpRemoteServer(serverAddr.Address, serverAddr.Port, this, IPAddress.Any, serverIncoming);
+
                     //if (SendRequest(ServerAction.Login, nickname + "\n" + ((IPEndPoint)incomingListener.Server.LocalEndPoint).Port))
-                    userID = remoteServer.CreateUser(nickname, ConnectionType.RawTCP, ((IPEndPoint)incomingListener.Server.LocalEndPoint).Port);
+                    //TODO: ez így ronda!
+                    userID = remoteServer.CreateUser(nickname, ConnectionType.RawTCP, ((IPEndPoint) (remoteServer as RawTcpRemoteServer).incomingListener.Server.LocalEndPoint).Port);
                     if (!string.IsNullOrEmpty(userID))
                     {
-                        messageStream = incomingListener.AcceptTcpClient().GetStream();
-                        new Thread(ListenForServer) { IsBackground = true }.Start();
                         if (remoteServer.ServerInfo().bigRoom)
                         {
                             roomID = remoteServer.ListRooms()[0];
@@ -90,17 +88,15 @@ namespace zsirozas
         // generally talking to server
         //
 
+       
         public event EventHandler<string> HandleServerError = (sender, e) => { };
 
-        public IPEndPoint server;
+        public IPEndPoint serverAddr;
         public string userID;
         public string roomID;
         public string gameID;
         public int playerIDX;
 
-        TcpListener incomingListener = null;
-        Stream messageStream = null;
-
         public IServerApiProvider remoteServer;
 
         public bool StartGame()
@@ -123,89 +119,6 @@ namespace zsirozas
             remoteServer.JoinRoom(userID, roomID);
         }
 
-        void ListenForServer()
-        {
-            using (var sr = new StreamReader(messageStream))
-            {
-                while (true)
-                {
-                    try
-                    {
-                        ParseNextMessage(sr);
-                    }
-                    catch (Exception ex)
-                    {
-                        //TODO: rossz debug módszer....
-                        HandleServerError(this, ex.Message);
-                        System.Diagnostics.Debugger.Break();
-                        return;
-                    }
-                }
-            }
-            //using (var sr = new StreamReader(messageStream))
-            //{
-            //    string line = "";
-            //    while (true)
-            //    {
-            //        try
-            //        {
-            //            while (string.IsNullOrEmpty(line))
-            //            {
-            //                line = sr.ReadLine();
-            //            }
-            //            var @event = (ServerEvent)Enum.Parse(typeof(ServerEvent), line);
-            //            switch (@event)
-            //            {
-            //                case ServerEvent.GameEvent:
-            //                    //ToODO: validálni
-            //                    line = sr.ReadLine();
-            //                    GameEvent gameEvent;
-            //                    Enum.TryParse<GameEvent>(line, out gameEvent);
-            //                    switch (gameEvent)
-            //                    {
-            //                        case GameEvent.NewTurn:
-            //                            gameState = new JavaScriptSerializer().Deserialize<MidGameState>(sr.ReadLine());
-
-            //                            //ToODO: ezt majd valahol máshol nézegetni...
-            //                            playerIDX = Array.IndexOf<string>(gameState.playersByOrder, userID);
-
-            //                            gameStateCanged(this, gameEvent);
-            //                            //SendRequest(ServerAction.GameAction, PlayerAction.GetCards + "\n0");
-            //                            remoteServer.GameAction(gameID, userID, PlayerAction.GetCards, 0); cardsChanged();
-            //                            break;
-            //                        case GameEvent.CardAction:
-            //                            gameState = new JavaScriptSerializer().Deserialize<MidGameState>(sr.ReadLine());
-            //                            gameStateCanged(this, gameEvent);
-            //                            break;
-            //                        case GameEvent.GameOver:
-            //                            string msg = sr.ReadLine();
-            //                            var dummy = new { ID = "", score = 0 };
-            //                            var scores = new JavaScriptSerializer()
-            //                                         .Deserialize<IEnumerable<object>>(msg)
-            //                                         .Select((arg) => CastByExample(dummy, arg));
-            //                            msg = string.Join("\n", scores.Select((arg) => arg.ID + "\t" + arg.score).ToArray());
-            //                            gameOver(this, "A játéknak vége!\n" + msg);
-            //                            break;
-            //                        default:
-            //                            break;
-            //                    }
-            //                    break;
-            //                case ServerEvent.Logout:
-            //                    return;
-
-            //                default:
-            //                    break;
-            //            }
-            //        }
-            //        catch (Exception)
-            //        {
-            //            line = sr.ReadLine();
-            //            continue;
-            //        }
-            //    }
-            //}
-        }
-
 
         public void SimpleNotify(ServerEvent @event, string param0)
         {
diff --git a/zsirozas/RawTcpTransport.cs b/zsirozas/RawTcpTransport.cs
index 5adf0fb7ef1dc3a0a8e9e8898f983f6e0c84d451..f3c3d40d411b3e40bb8e33ee5b0cb61f76162092 100644
--- a/zsirozas/RawTcpTransport.cs
+++ b/zsirozas/RawTcpTransport.cs
@@ -5,6 +5,7 @@ using System.IO;
 using System.Net;
 using System.Web.Script.Serialization;
 using System.Linq;
+using System.Threading;
 
 namespace zsirozas
 {
@@ -77,12 +78,105 @@ namespace zsirozas
     /// </summary>
     class RawTcpRemoteServer : IServerApiProvider
     {
-        public RawTcpRemoteServer(IPAddress IP, int port)
+
+        IAppClient client;
+
+        //incoming message loop
+        void ListenForServer()
+        {
+            using (var sr = new StreamReader(messageStream))
+            {
+                while (true)
+                {
+                    try
+                    {
+                        client.ParseNextMessage(sr);
+                    }
+                    catch (Exception ex)
+                    {
+                        Console.WriteLine(ex.StackTrace);
+                        System.Diagnostics.Debugger.Break();
+                        return;
+                    }
+                }
+            }
+            //using (var sr = new StreamReader(messageStream))
+            //{
+            //    string line = "";
+            //    while (true)
+            //    {
+            //        try
+            //        {
+            //            while (string.IsNullOrEmpty(line))
+            //            {
+            //                line = sr.ReadLine();
+            //            }
+            //            var @event = (ServerEvent)Enum.Parse(typeof(ServerEvent), line);
+            //            switch (@event)
+            //            {
+            //                case ServerEvent.GameEvent:
+            //                    //ToODO: validálni
+            //                    line = sr.ReadLine();
+            //                    GameEvent gameEvent;
+            //                    Enum.TryParse<GameEvent>(line, out gameEvent);
+            //                    switch (gameEvent)
+            //                    {
+            //                        case GameEvent.NewTurn:
+            //                            gameState = new JavaScriptSerializer().Deserialize<MidGameState>(sr.ReadLine());
+
+            //                            //ToODO: ezt majd valahol máshol nézegetni...
+            //                            playerIDX = Array.IndexOf<string>(gameState.playersByOrder, userID);
+
+            //                            gameStateCanged(this, gameEvent);
+            //                            //SendRequest(ServerAction.GameAction, PlayerAction.GetCards + "\n0");
+            //                            remoteServer.GameAction(gameID, userID, PlayerAction.GetCards, 0); cardsChanged();
+            //                            break;
+            //                        case GameEvent.CardAction:
+            //                            gameState = new JavaScriptSerializer().Deserialize<MidGameState>(sr.ReadLine());
+            //                            gameStateCanged(this, gameEvent);
+            //                            break;
+            //                        case GameEvent.GameOver:
+            //                            string msg = sr.ReadLine();
+            //                            var dummy = new { ID = "", score = 0 };
+            //                            var scores = new JavaScriptSerializer()
+            //                                         .Deserialize<IEnumerable<object>>(msg)
+            //                                         .Select((arg) => CastByExample(dummy, arg));
+            //                            msg = string.Join("\n", scores.Select((arg) => arg.ID + "\t" + arg.score).ToArray());
+            //                            gameOver(this, "A játéknak vége!\n" + msg);
+            //                            break;
+            //                        default:
+            //                            break;
+            //                    }
+            //                    break;
+            //                case ServerEvent.Logout:
+            //                    return;
+
+            //                default:
+            //                    break;
+            //            }
+            //        }
+            //        catch (Exception)
+            //        {
+            //            line = sr.ReadLine();
+            //            continue;
+            //        }
+            //    }
+            //}
+        }
+
+
+
+        public RawTcpRemoteServer(IPAddress serverIP, int serverPort, IAppClient client, IPAddress listenIP, int listenPort)
         {
-            server = new IPEndPoint(IP, port);
+            this.client = client;
+            server = new IPEndPoint(serverIP, serverPort);
+            incomingListener = new TcpListener(listenIP, listenPort);
+            incomingListener.Start();
+
         }
         public IPEndPoint server;
-
+        public TcpListener incomingListener;
+        public Stream messageStream = null;
         //
         //Implemetation of the server API
         //
@@ -146,6 +240,12 @@ namespace zsirozas
                         userID = sr.ReadLine();
                     }
                 }
+
+                //initialize the incoming message loop
+                messageStream = incomingListener.AcceptTcpClient().GetStream();
+                new Thread(ListenForServer) { IsBackground = true }.Start();
+
+
                 return userID;
             }
         }
@@ -216,7 +316,7 @@ namespace zsirozas
                         throw new ServerErrorException(status);
                     }
                     status = sr.ReadLine();
-                    return status.Split(' ').ToArray();
+                    return status.Split(' ').Where(s => !string.IsNullOrEmpty(s)).ToArray();
                 }
             }
         }
diff --git a/zsirozas/SignalR-Transport.cs b/zsirozas/SignalR-Transport.cs
index 7fc04cef1529805a403f423abcf130f05a50f843..03adcf523541f266047f0bf7b12e670472e07821 100644
--- a/zsirozas/SignalR-Transport.cs
+++ b/zsirozas/SignalR-Transport.cs
@@ -17,7 +17,7 @@ namespace zsirozas
         {
             this.client = client;
             hub = new HubConnection(server_url).CreateHubProxy(nameof(SignalRServerHub));
-            //proxy calls from srver
+            //proxy calls from server
             hub.On<ServerEvent, string>(nameof(client.SimpleNotify), client.SimpleNotify);
             hub.On<GameEvent, string>(nameof(client.InGameNotify), client.InGameNotify);
         }