public synchronized boolean start() throws Exception {
		if (thread != null) {
			throw new Exception("Heartbeat Checker already started.");
		}
		
		thread = new Thread(new Runnable() {
			/** run()
			 * 
			 * First establishes connection with node.
			 * Later sends commands and waits for responses.
			 */
			@Override
			public void run() {
				try {
					if (oos == null) {
						oos = new ObjectOutputStream(sock.getOutputStream());
					}
					if (ois == null) {
						ois = new ObjectInputStream(sock.getInputStream());
					}
					oos.writeObject("Still alive?");
					sock.setSoTimeout(5000);
					String response = "";
					try {
						response = (String)ois.readObject();
					//Worker didn't respond in time.
					} catch (SocketTimeoutException e) {
						isStillAlive = false;
					}
					//Resume the thread if we should send work again
					if (response.equals("Yes")) {
						isStillAlive = true;
					}
				} catch (IOException e) {
					mwp.shutDownSelf();
				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				}
			}
		});
		
		thread.start();
		thread.join();
		return isStillAlive;
	}