public boolean start() {
    if (!started) {
      started = true;
      new Runnable() {
        @Override
        public void run() {
          Socket clientSocket;
          try {
            serverSocket = new ServerSocket(PORT);
            serverSocket.setSoTimeout(2000);

            while (!stopped) {
              try {
                clientSocket = serverSocket.accept();
                ClientThread clientThread = ClientThread.getInstance(clientSocket);
                clientThread.start();
                addConnection(clientThread.getThreadsConnection());
                // TEST MESSAGE
                System.out.println("New connection established. Connected users: " + connections.size());
              }
              catch (SocketTimeoutException timeOutException) {
                if (stopped) {
                  break;
                }
              }
              catch (IOException getInstanceException) {
                // creating client thread failed
              }
            }
          }
          catch (IOException e) {
            // server failed to start
            started = false;
          }
        }
      }.run();
    }
    return false;
  }