private void startNode() {
		if (node != null) {
			failNode();
		}
		if (server != null) {
			System.err.println("Error: Node was null but server wasn't?");
			killServer();
		}

		if (!Replay.isReplaying()) {
			// start up the server
			try {
				server = new NodeServer(routerName, routerPort, address, this);
			} catch (IOException e) {
				System.err.println("Error while constructing server");
				e.printStackTrace();
				stop();
			}
			IOFinished = false;
		}

		// start up the node
		try {
			node = nodeImpl.newInstance();
		} catch (Exception e) {
			System.err.println("Error while constructing node: " + e);
			killServer();
			stop();
		}

		node.init(this, address);
		vtimes.put(node.addr, new VectorTime(MAX_ADDRESS));
		logEventWithNodeField(node, "START");
		failed = false;

		try {
			node.start();
		} catch (NodeCrashException e) {
			failNode();
		}
	}