diff --git a/.gitignore b/.gitignore
index e0a6469cddd90f040d138bc51e03211c4d5c5ed0..a0a668eb3c26531fe58f3282fe35eb796d1d93b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 /KvizClient/.idea/vcs.xml
 /KvizServer/.idea/vcs.xml
+/KvizClient/.idea/misc.xml
diff --git a/KvizClient/app/src/main/java/onlab/kvizclient/LobbyActivity.java b/KvizClient/app/src/main/java/onlab/kvizclient/LobbyActivity.java
index 8760b661de724cf53f5636c9b876d758b3ff0a91..3cab457e137e38082507307264aa4ecc80e73fdf 100644
--- a/KvizClient/app/src/main/java/onlab/kvizclient/LobbyActivity.java
+++ b/KvizClient/app/src/main/java/onlab/kvizclient/LobbyActivity.java
@@ -6,18 +6,11 @@ import android.net.nsd.NsdManager;
 import android.net.nsd.NsdServiceInfo;
 import android.os.Bundle;
 import android.os.Handler;
-import android.support.design.widget.FloatingActionButton;
-import android.support.design.widget.Snackbar;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.DividerItemDecoration;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.Toolbar;
 import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.TextView;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -30,7 +23,6 @@ import java.net.Socket;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 
-import onlab.kvizclient.model.ServerInfo;
 import onlab.kvizclient.model.ServerModel;
 
 public class LobbyActivity extends AppCompatActivity implements ServerConnection {
@@ -49,10 +41,6 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
     private int hostPort;
     private NsdManager mNsdManager;
     private NsdServiceInfo mService;
-    //private TextView txtip;
-    //private TextView txtport;
-    //private TextView txthostname;
-    //private Button btnconnect;
 
     Handler updateConversationHandler;
 
@@ -65,9 +53,6 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_lobby);
-        //txtip = findViewById(R.id.txtip);
-        //txtport = findViewById(R.id.txtport);
-        //txthostname = findViewById(R.id.txthostname);
 
         servers = new ArrayList<ServerModel>();
 
@@ -156,15 +141,14 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
             // When the network service is no longer available.
             // Internal bookkeeping code goes here.
             Log.e(TAG, "service lost" + service);
-            
             //
             for (ServerModel server: servers) {
-                if(server.getSocket().getInetAddress() == service.getHost())
-                {
+                if(server.getSocket().isClosed()) {
+                    Log.d("fdsa", "bbbbbbbbbbbbbbbbbbb");
+                    int position = servers.indexOf(server);
+                    updateConversationHandler.post(new updateUIThread(Operation.REMOVE_SERVER, Integer.toString(position)));
                     servers.remove(server);
-                    // TODO: 2018. 03. 16. //refresh list
                 }
-                
             }
         }
 
@@ -216,23 +200,17 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
             hostPort = serviceInfo.getPort();
             hostAddress = serviceInfo.getHost();
 
-
-            runOnUiThread(new Runnable() {
-                public void run() {
-                    //txtip.setText(hostAddress.getHostAddress());
-                    //txtport.setText(Integer.toString(hostPort));
-                    //txthostname.setText(hostname);
-                    //Log.d("MEGVAN", hostAddress.getHostAddress());
-                    adapter.addItem(new ServerInfo(hostAddress.getHostAddress(), Integer.toString(hostPort), hostname));
-              }
-
-            });
-
             //-----Socket-----//
             try {
                 Socket s = new Socket(hostAddress,hostPort);
-                ServerModel serverModel = new ServerModel("Unknown", s);
+                ServerModel serverModel = new ServerModel(serviceInfo, s);
                 servers.add(serverModel);
+                runOnUiThread(new Runnable() {
+                    public void run() {
+                        adapter.addItem();
+                    }
+
+                });
                 CommunicationThread commThread = new CommunicationThread(serverModel);
                 new Thread(commThread).start();
             } catch (IOException e) {
@@ -244,16 +222,16 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
 
 
     //-----Socket----//
-    public void onClick(int serverNumber) {
+    public void onConnect(int serverNumber) {
         try {
-            if(servers.size() >0) {
+            if(servers.size() > serverNumber) {
                 String str = "Connect##"+CLIENT_NAME;
+                Socket socket = servers.get(serverNumber).getSocket();
+                SocketHolder.setSocket(socket);
                 PrintWriter out = new PrintWriter(new BufferedWriter(
-                        new OutputStreamWriter(servers.get(serverNumber).getSocket().getOutputStream())), true);
+                        new OutputStreamWriter(socket.getOutputStream())), true);
                 out.println(str);
             }
-
-
         } catch (UnknownHostException e) {
             e.printStackTrace();
         } catch (IOException e) {
@@ -263,11 +241,21 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
         }
     }
 
-
+    public void onDisconnect() {
+        try {
+            if (SocketHolder.getSocket() != null) {
+                String str = "Disconnect##"+CLIENT_NAME;
+                PrintWriter out = new PrintWriter(new BufferedWriter(
+                        new OutputStreamWriter(SocketHolder.getSocket().getOutputStream())), true);
+                out.println(str);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
 
     class CommunicationThread implements Runnable {
 
-        //private Socket serverSocket;
         private ServerModel serverModel;
 
         private BufferedReader input;
@@ -290,8 +278,6 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
                 PrintWriter out = new PrintWriter(new BufferedWriter(
                         new OutputStreamWriter(serverModel.getSocket().getOutputStream())),true);
                 out.println(str);
-
-
             } catch (UnknownHostException e) {
                 e.printStackTrace();
             } catch (IOException e) {
@@ -301,32 +287,41 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
             }
             while (!Thread.currentThread().isInterrupted()) {
                 try {
-                    String read = input.readLine();
-                    PrintWriter out = new PrintWriter(new BufferedWriter(
-                            new OutputStreamWriter(serverModel.getSocket().getOutputStream())), true);
-                    String params[] = read.split("##");
-                    switch (params[0])
-                    {
-                        case "Hostname":
-                            int serverIndex = servers.indexOf(serverModel);
-                            updateConversationHandler.post(new updateUIThread(params[1], serverIndex));
-                            break;
-                        case "Connect":
-                            if(params[1].equals("Ok!"))
-                            {
-                                //továbblépni
+                    if (serverModel.getSocket().isConnected()) {
+                        Log.d("LobbyActivity", "Connected");
+                        String read = input.readLine();
+                        Log.d("LobbyActivity", "Read");
+                        if (read != null) {
+                            String params[] = read.split("##");
+                            switch (params[0]) {
+                                case "Hostname":
+                                    int serverIndex = servers.indexOf(serverModel);
+                                    serverModel.setHostName(params[1]);
+                                    updateConversationHandler.post(new updateUIThread(Operation.UPDATE_SERVER, Integer.toString(serverIndex)));
+                                    break;
+                                case "Connect":
+                                    if(params[1].equals("Ok!")) {
+                                        //továbblépni
+                                    } else {
+                                        //nem sikerült
+                                    }
+                                    break;
+                                case "Disconnect":
+                                    //sikeres disconnect, vagy pedig a szerver csatlakozott le
+                                    break;
                             }
-                            else
-                            {
-                                //nem sikerült
+                        }
+                    } else {
+                        Log.d("LobbyActivity", "Not connected");
+                        for (ServerModel server : servers) {
+                            if (server.getSocket() == serverModel.getSocket()) {
+                                int position = servers.indexOf(server);
+                                updateConversationHandler.post(new updateUIThread(Operation.REMOVE_SERVER, Integer.toString(position)));
+                                servers.remove(server);
+                                break;
                             }
-                            break;
-                        case "Disconnect":
-                            //sikeres disconnect, vagy pedig a szerver csatlakozott le
-                            break;
+                        }
                     }
-
-
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
@@ -336,23 +331,36 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
     }
 
     class updateUIThread implements Runnable {
+        private Operation op;
         private String msg;
-        private int serverIndex;
 
-        public updateUIThread(String str, int serverIndex) {
+        public updateUIThread(Operation op, String str) {
+            this.op = op;
             this.msg = str;
-            this.serverIndex = serverIndex;
         }
+
         @Override
         public void run() {
-            //txthostname.setText(msg);
-            adapter.updateHostName(serverIndex, msg);
+            switch (op) {
+                case ADD_SERVER:
+                    adapter.addItem();
+                    break;
+                case REMOVE_SERVER:
+                    adapter.removeItem(Integer.parseInt(msg));
+                    break;
+                case UPDATE_SERVER:
+                    adapter.updateItem(Integer.parseInt(msg));
+                default:
+                    Log.d("updateUIThread", "Unknown operation");
+                    break;
+            }
         }
     }
 
+
     private void initRecyclerView() {
         recyclerView = (RecyclerView) findViewById(R.id.MainRecyclerView);
-        adapter = new ServerListAdapter(this);
+        adapter = new ServerListAdapter(this, servers);
         recyclerView.setLayoutManager(new LinearLayoutManager(this));
         recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
         recyclerView.setAdapter(adapter);
@@ -360,3 +368,6 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection
 
 }
 
+enum Operation {
+    ADD_SERVER, REMOVE_SERVER, UPDATE_SERVER;
+}
diff --git a/KvizClient/app/src/main/java/onlab/kvizclient/ServerConnection.java b/KvizClient/app/src/main/java/onlab/kvizclient/ServerConnection.java
index 17a5fb0a3835688da4a4e63775e3cf72c78db929..a222e766f2874284b66ca3dbe5c43f2026d51caf 100644
--- a/KvizClient/app/src/main/java/onlab/kvizclient/ServerConnection.java
+++ b/KvizClient/app/src/main/java/onlab/kvizclient/ServerConnection.java
@@ -1,5 +1,9 @@
 package onlab.kvizclient;
 
 public interface ServerConnection {
-    public void onClick(int serverNumber);
+
+    public void onConnect(int serverNumber);
+
+    public void onDisconnect();
+
 }
diff --git a/KvizClient/app/src/main/java/onlab/kvizclient/ServerListAdapter.java b/KvizClient/app/src/main/java/onlab/kvizclient/ServerListAdapter.java
index 97b830f2adacf34e6ea5b1458cb9946f01ad345a..5fd42859fd2ca38b61add52cd5097a5de73331fa 100644
--- a/KvizClient/app/src/main/java/onlab/kvizclient/ServerListAdapter.java
+++ b/KvizClient/app/src/main/java/onlab/kvizclient/ServerListAdapter.java
@@ -4,21 +4,22 @@ import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageButton;
+import android.widget.Button;
 import android.widget.TextView;
 
-import java.util.ArrayList;
 import java.util.List;
 
-import onlab.kvizclient.model.ServerInfo;
+import onlab.kvizclient.model.ConnectionStatus;
+import onlab.kvizclient.model.ServerModel;
 
 public class ServerListAdapter extends RecyclerView.Adapter<ServerListAdapter.ServerViewHolder> {
 
-    private final List<ServerInfo> items = new ArrayList<>();
+    private final List<ServerModel> items;
 
     private final ServerConnection serverConnection;
 
-    public ServerListAdapter(ServerConnection sc) {
+    public ServerListAdapter(ServerConnection sc, List<ServerModel> servers) {
+        items = servers;
         serverConnection = sc;
     }
 
@@ -31,14 +32,42 @@ public class ServerListAdapter extends RecyclerView.Adapter<ServerListAdapter.Se
 
     @Override
     public void onBindViewHolder(final ServerViewHolder holder, final int position) {
-        final ServerInfo item = items.get(position);
-        holder.ipTextView.setText(item.getIp());
-        holder.portTextView.setText(item.getPort());
+        final ServerModel item = items.get(position);
+        holder.ipTextView.setText(item.getHostAddress());
+        holder.portTextView.setText(Integer.toString(item.getPort()));
         holder.hostNameTextView.setText(item.getHostName());
+        switch (item.getConnectionStatus()) {
+            case CONNECTED:
+                holder.connectButton.setEnabled(false);
+                holder.disconnectButton.setEnabled(true);
+                break;
+            case NOT_CONNECTED:
+                holder.connectButton.setEnabled(true);
+                holder.disconnectButton.setEnabled(false);
+                break;
+            default:
+                holder.connectButton.setEnabled(false);
+                holder.disconnectButton.setEnabled(false);
+        }
         holder.connectButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                serverConnection.onClick(position);
+                serverConnection.onConnect(position);
+                for (ServerModel server : items) {
+                    server.setConnectionStatus(ConnectionStatus.CONNECTED_TO_OTHER_SERVER);
+                }
+                item.setConnectionStatus(ConnectionStatus.CONNECTED);
+                notifyDataSetChanged();
+            }
+        });
+        holder.disconnectButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                serverConnection.onDisconnect();
+                for (ServerModel server : items) {
+                    server.setConnectionStatus(ConnectionStatus.NOT_CONNECTED);
+                }
+                notifyDataSetChanged();
             }
         });
     }
@@ -53,35 +82,36 @@ public class ServerListAdapter extends RecyclerView.Adapter<ServerListAdapter.Se
         TextView ipTextView;
         TextView portTextView;
         TextView hostNameTextView;
-        ImageButton connectButton;
+        Button connectButton;
+        Button disconnectButton;
 
         public ServerViewHolder(View itemView) {
             super(itemView);
             ipTextView = (TextView) itemView.findViewById(R.id.ipTextView);
             portTextView = (TextView) itemView.findViewById(R.id.portTextView);
             hostNameTextView = (TextView) itemView.findViewById(R.id.hostNameTextView);
-            connectButton = (ImageButton) itemView.findViewById(R.id.connectButton);
+            connectButton = (Button) itemView.findViewById(R.id.connectButton);
+            disconnectButton = (Button) itemView.findViewById(R.id.disconnectButton);
         }
     }
 
-    public void addItem(ServerInfo item) {
-        items.add(item);
+    public void addItem() {
         notifyItemInserted(items.size() - 1);
     }
 
-    public void update(List<ServerInfo> serverInfos) {
-        items.clear();
-        items.addAll(serverInfos);
+    public void update() {
         notifyDataSetChanged();
     }
 
-    public void updateHostName(int index, String name) {
-        ServerInfo si = items.get(index);
-        si.setHostName(name);
+    public void updateItem(int index) {
         notifyItemChanged(index);
     }
 
-    public ServerInfo getItem(int position) {
+    public void removeItem(int position) {
+        notifyItemRemoved(position);
+    }
+
+    public ServerModel getItem(int position) {
         return items.get(position);
     }
 
diff --git a/KvizClient/app/src/main/java/onlab/kvizclient/SocketHolder.java b/KvizClient/app/src/main/java/onlab/kvizclient/SocketHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..e69c19ec384d6ef222dbaa6cfadbb478bf522c6f
--- /dev/null
+++ b/KvizClient/app/src/main/java/onlab/kvizclient/SocketHolder.java
@@ -0,0 +1,15 @@
+package onlab.kvizclient;
+
+import java.net.Socket;
+
+public class SocketHolder {
+    private static Socket socket;
+
+    public static Socket getSocket() {
+        return socket;
+    }
+
+    public static void setSocket(Socket socket) {
+        SocketHolder.socket = socket;
+    }
+}
diff --git a/KvizClient/app/src/main/java/onlab/kvizclient/model/ConnectionStatus.java b/KvizClient/app/src/main/java/onlab/kvizclient/model/ConnectionStatus.java
new file mode 100644
index 0000000000000000000000000000000000000000..573d1809734e85a0b150be976fb8469dfb1a039c
--- /dev/null
+++ b/KvizClient/app/src/main/java/onlab/kvizclient/model/ConnectionStatus.java
@@ -0,0 +1,5 @@
+package onlab.kvizclient.model;
+
+public enum ConnectionStatus {
+    CONNECTED, NOT_CONNECTED, CONNECTED_TO_OTHER_SERVER
+}
diff --git a/KvizClient/app/src/main/java/onlab/kvizclient/model/ServerInfo.java b/KvizClient/app/src/main/java/onlab/kvizclient/model/ServerInfo.java
deleted file mode 100644
index 9bbfa198683dc526e1df097004216dc0b78ed9b3..0000000000000000000000000000000000000000
--- a/KvizClient/app/src/main/java/onlab/kvizclient/model/ServerInfo.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package onlab.kvizclient.model;
-
-public class ServerInfo {
-    String ip;
-    String port;
-    String hostName;
-
-    public ServerInfo(String ip, String port, String hostName) {
-        this.ip = ip;
-        this.port = port;
-        this.hostName = hostName;
-    }
-
-    public String getIp() {
-        return ip;
-    }
-
-    public String getPort() {
-        return port;
-    }
-
-    public String getHostName() {
-        return hostName;
-    }
-
-    public void setHostName(String hostName) {
-        this.hostName = hostName;
-    }
-}
diff --git a/KvizClient/app/src/main/java/onlab/kvizclient/model/ServerModel.java b/KvizClient/app/src/main/java/onlab/kvizclient/model/ServerModel.java
index a6eeb7e0e32f01e594597bf04a2c239ad820590d..22ed73d704a19c3fb00ffa5917179babdc0889dc 100644
--- a/KvizClient/app/src/main/java/onlab/kvizclient/model/ServerModel.java
+++ b/KvizClient/app/src/main/java/onlab/kvizclient/model/ServerModel.java
@@ -1,5 +1,7 @@
 package onlab.kvizclient.model;
 
+import android.net.nsd.NsdServiceInfo;
+
 import java.net.InetAddress;
 import java.net.Socket;
 
@@ -8,15 +10,16 @@ import java.net.Socket;
  */
 
 public class ServerModel {
-    private String hostName;
+    private String hostName = "";
     private Socket socket;
     private boolean joinrequest = false;
+    private NsdServiceInfo serviceInfo;
+    private ConnectionStatus connectionStatus = ConnectionStatus.NOT_CONNECTED;
 
-    public ServerModel(String hname, Socket sock)
+    public ServerModel(NsdServiceInfo serviceInfo, Socket socket)
     {
-        this.hostName = hname;
-        this.socket = sock;
-
+        this.serviceInfo = serviceInfo;
+        this.socket = socket;
     }
 
     public String getHostName() {
@@ -42,4 +45,20 @@ public class ServerModel {
     public void setJoinrequest(boolean joinrequest) {
         this.joinrequest = joinrequest;
     }
+
+    public int getPort() {
+        return serviceInfo.getPort();
+    }
+
+    public String getHostAddress() {
+        return serviceInfo.getHost().getHostAddress();
+    }
+
+    public ConnectionStatus getConnectionStatus() {
+        return connectionStatus;
+    }
+
+    public void setConnectionStatus(ConnectionStatus connectionStatus) {
+        this.connectionStatus = connectionStatus;
+    }
 }
diff --git a/KvizClient/app/src/main/res/layout/activity_main.xml b/KvizClient/app/src/main/res/layout/activity_main.xml
index 1c1968cff2abd3494d559082e98e12596d3d5d26..6c8ab59a2f1b693794a6995e637bbf1f32df55ca 100644
--- a/KvizClient/app/src/main/res/layout/activity_main.xml
+++ b/KvizClient/app/src/main/res/layout/activity_main.xml
@@ -19,7 +19,7 @@
     <EditText
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="Unknown"
+        android:text="kli"
         android:id="@+id/txtname"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toLeftOf="parent"
diff --git a/KvizClient/app/src/main/res/layout/item_server_list.xml b/KvizClient/app/src/main/res/layout/item_server_list.xml
index 91d0666e7da4ff2433ff9cb5d51a1e98f8dd1f29..bf9039cd8b3365a492c5bc571851e11cdaf73a4c 100644
--- a/KvizClient/app/src/main/res/layout/item_server_list.xml
+++ b/KvizClient/app/src/main/res/layout/item_server_list.xml
@@ -39,14 +39,19 @@
 
     </LinearLayout>
 
-    <ImageButton
+    <Button
         android:id="@+id/connectButton"
-        android:layout_width="80dp"
-        android:layout_height="80dp"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="@+id/disconnectButton"
+        android:text="Connect"/>
+
+    <Button
+        android:id="@+id/disconnectButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
-        android:src="@drawable/ic_transfer_within_a_station_black_48dp"
-        android:scaleType="fitXY"
-        style="@style/Widget.AppCompat.Button.Borderless"
-        />
+        android:text="Disconnect"
+        android:enabled="false"/>
 
 </RelativeLayout>
\ No newline at end of file
diff --git a/KvizServer/app/src/main/java/onlab/kvizserver/ClientListAdapter.java b/KvizServer/app/src/main/java/onlab/kvizserver/ClientListAdapter.java
index 3296a4bb790738823b12534331499b4c8288670c..8989d310968fd20ed924bd2838d9aa0e41165cec 100644
--- a/KvizServer/app/src/main/java/onlab/kvizserver/ClientListAdapter.java
+++ b/KvizServer/app/src/main/java/onlab/kvizserver/ClientListAdapter.java
@@ -9,9 +9,17 @@ import android.widget.TextView;
 import java.util.ArrayList;
 import java.util.List;
 
+import onlab.kvizserver.model.ClientModel;
+
 public class ClientListAdapter extends RecyclerView.Adapter<ClientListAdapter.ServerViewHolder> {
 
-    private final List<String> items = new ArrayList<>();
+    //private final List<String> items = new ArrayList<>();
+
+    private final ArrayList<ClientModel> items;
+
+    public ClientListAdapter(ArrayList<ClientModel> items) {
+        this.items = items;
+    }
 
     @Override
     public ServerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@@ -22,8 +30,7 @@ public class ClientListAdapter extends RecyclerView.Adapter<ClientListAdapter.Se
 
     @Override
     public void onBindViewHolder(final ServerViewHolder holder, final int position) {
-        final String item = items.get(position);
-        holder.clientNameTextView.setText(item);
+        holder.clientNameTextView.setText(items.get(position).getName());
     }
 
     @Override
@@ -41,18 +48,19 @@ public class ClientListAdapter extends RecyclerView.Adapter<ClientListAdapter.Se
         }
     }
 
-    public void addItem(String item) {
-        items.add(item);
+    public void addItem() {
         notifyItemInserted(items.size() - 1);
     }
 
-    public void update(List<String> clients) {
-        items.clear();
-        items.addAll(clients);
+    public void update() {
         notifyDataSetChanged();
     }
 
-    public String getItem(int position) {
+    public void removeItem(int position) {
+        notifyItemRemoved(position);
+    }
+
+    public ClientModel getItem(int position) {
         return items.get(position);
     }
 
diff --git a/KvizServer/app/src/main/java/onlab/kvizserver/LobbyActivity.java b/KvizServer/app/src/main/java/onlab/kvizserver/LobbyActivity.java
index 246afa80c968130e435f8f67e27c60e4c80ba39a..fd2e2e25578690665bc09bd8271c2d40c08fbb91 100644
--- a/KvizServer/app/src/main/java/onlab/kvizserver/LobbyActivity.java
+++ b/KvizServer/app/src/main/java/onlab/kvizserver/LobbyActivity.java
@@ -87,6 +87,11 @@ public class LobbyActivity extends AppCompatActivity {
 
     @Override
     protected void onPause() {
+        try {
+            serverSocket.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
         if (mNsdManager != null && registred) {
             mNsdManager.unregisterService(mRegistrationListener);
             registred = false;
@@ -116,7 +121,6 @@ public class LobbyActivity extends AppCompatActivity {
         } catch (IOException e) {
             e.printStackTrace();
         }
-
         super.onDestroy();
     }
 
@@ -248,23 +252,20 @@ public class LobbyActivity extends AppCompatActivity {
                                         cname = params[1];
                                     }
                                     clients.add(new ClientModel(cname, clientSocket));
-                                    updateConversationHandler.post(new updateUIThread(cname));
+                                    updateConversationHandler.post(new updateUIThread(Operation.ADD_CLIENT, ""));
                                 }
-
-
-                                // TODO: 2018. 03. 11. refresh lobby
                                 out.println("Connect##Ok!");
                                 break;
                             case "Disconnect":
                                 for (ClientModel client : clients) {
                                     if (client.getClientsocket() == clientSocket) {
+                                        int position = clients.indexOf(client);
+                                        updateConversationHandler.post(new updateUIThread(Operation.REMOVE_CLIENT, Integer.toString(position)));
                                         clients.remove(client);
                                         break;
                                     }
                                 }
                                 out.println("Disconnect##Ok!");
-                                // TODO: 2018. 03. 11. refresh lobby
-
                                 break;
 
                             default:
@@ -272,11 +273,11 @@ public class LobbyActivity extends AppCompatActivity {
 
                                 break;
                         }
-                    }
-                    else
-                    {
+                    } else {
                         for (ClientModel client : clients) {
                             if (client.getClientsocket() == clientSocket) {
+                                int position = clients.indexOf(client);
+                                updateConversationHandler.post(new updateUIThread(Operation.REMOVE_CLIENT, Integer.toString(position)));
                                 clients.remove(client);
                                 break;
                             }
@@ -293,22 +294,33 @@ public class LobbyActivity extends AppCompatActivity {
     }
 
     class updateUIThread implements Runnable {
+        private Operation op;
         private String msg;
 
-        public updateUIThread(String str) {
+        public updateUIThread(Operation op, String str) {
+            this.op = op;
             this.msg = str;
         }
+
         @Override
         public void run() {
-            //TextView txt = findViewById(R.id.txtclientname);
-            //txt.setText(msg);
-            adapter.addItem(msg);
+            switch (op) {
+                case ADD_CLIENT:
+                    adapter.addItem();
+                    break;
+                case REMOVE_CLIENT:
+                    adapter.removeItem(Integer.parseInt(msg));
+                    break;
+                default:
+                    Log.d("updateUIThread", "Unknown operation");
+                    break;
+            }
         }
     }
 
     private void initRecyclerView() {
         recyclerView = (RecyclerView) findViewById(R.id.MainRecyclerView);
-        adapter = new ClientListAdapter();
+        adapter = new ClientListAdapter(clients);
         recyclerView.setLayoutManager(new LinearLayoutManager(this));
         recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
         recyclerView.setAdapter(adapter);
@@ -316,6 +328,9 @@ public class LobbyActivity extends AppCompatActivity {
 
 }
 
+enum Operation {
+    ADD_CLIENT, REMOVE_CLIENT;
+}
 
 
 
diff --git a/KvizServer/app/src/main/res/layout/activity_main.xml b/KvizServer/app/src/main/res/layout/activity_main.xml
index 5e4c0b33b740dc22d0c695fdc09a89c9b13cb6d2..b30c17da02cec4ccb80c034b217dd49db37debc0 100644
--- a/KvizServer/app/src/main/res/layout/activity_main.xml
+++ b/KvizServer/app/src/main/res/layout/activity_main.xml
@@ -20,7 +20,7 @@
     <EditText
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="Unknown"
+        android:text="ser"
         android:id="@+id/txtName"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toLeftOf="parent"