private void runHelper(final Client client) {
		final String client_state = getClientState(client);

		// TODO fix this right here (5-10-2015), prevents my other stuff from working
		if (client_state != null) {
			if (client_state.equals("BUSY")) {
				return;
			}
			else if (client_state.equals("interactive_login")) {
				final String temp = client.getResponse();

				if (temp != null) {
					client.setResponseExpected(false);

					// TODO figure out why I echo this here
					// TODO resolve the problem that when I fail to echo here
					// that I need newlines for formatting purposes
					echo(temp, client);

					// get client data
					final LoginData ld = getLoginData(client);

					if (ld != null) {
						if (ld.state.equals("NAME")) {
							ld.username = temp;
							ld.state = "PASS";
						}
						else if (ld.state.equals("PASS")) {
							ld.password = temp;
							ld.state = "LOGIN";
						}

						// TODO need to be careful about printing out password in plain text
						System.out.println("NAME:  " + ld.username);
						System.out.println("PASS:  " + Utils.padRight("", '*', ld.password.length()));
						System.out.println("STATE: " + ld.state);

						// enter next stage
						handle_interactive_login(client);
					}
					else {
						System.out.println("CLIENT DATA is NULL.");
					}
				}
			}
		}

		final String whatClientSaid = client.getInput();
		
		try {
			// TODO should idling be managed on a timer/tick?
			final Player player = getPlayer(client);

			if (player != null) {
				handle_idle_player(player, whatClientSaid);
			}
			
			// If the client is not null and has something to say
			if (whatClientSaid != null) {
				System.out.println("what client said: \'" + whatClientSaid + "\'");
				
				if( echo_enabled && player.getConfigOption("server_echo") ) {
					echo(whatClientSaid, client);
				}
				
				if( console_enabled ) {
					/*public boolean usingConsole(final Client client) {
						boolean usingConsole = false;
						
						if( console_enabled ) {
							usingConsole = cmon.hasConsole(client);
						}
						
						return usingConsole;
					}*/
					
					// check to see if we are a console user
					if( cmon.hasConsole(client) ) {
						debug("CONSOLE");

						final Console console = cmon.getConsole(client);

						if (console != null) console.processInput(whatClientSaid.trim());
						else                 send("Console not initialized?", client);

						return;
					}
				}
				
				if ( queued_commands ) {
					debug("Putting comand in command queue.");

					CMD cmd = new CMD(whatClientSaid.trim(), null, client);

					cmdQueue.add(cmd);
				}
				else {
					debug("Evaluating command.");

					try {
						cmd(whatClientSaid.trim(), client);
					}
					catch (final NullPointerException npe) {
						debug("runHelper(): command processing issue (exception) [!queued_commands]");
						// usurp the junk below and catch any exceptions here
						System.out.println("--- Stack Trace ---");
						npe.printStackTrace();
					}
				}
			}

			// flush players -- clean up broken connections;
			//flush(); // not sure what the point of this is...

			Thread.sleep(200); // wait 2/10 of a second
		}
		catch (final InterruptedException ie) {
			debug("runHelper(): thread interrupted? (interrupted exception)");
		}
		catch (final Exception e) {
			/*
			 * until I resolve the issue of the possibility that any command
			 * that goes wrong catastrophically and unresolvably could crash the
			 * server, we should assume that any exception is a fatal exception
			 * and reboot, either exiting or reloading from the last save
			 * automatically.
			 * 
			 * hence this code here should report the error, then exit or wait a
			 * pre-determined amount of time and then attempt a reboot.
			 * 
			 * NOTE: I really need a separate thread or means for executing
			 * stuff so that bugs in a command only cause a real problem for the
			 * player who tried to use it. probably the quick solution should be
			 * booting the player and having them lose all their progress since
			 * the last save. Tentatively, if I can find a way to verify that
			 * the error is not going to effect them, I can save their
			 * character, tell them to reconnect in a little while and kick
			 * them. A live character restore system would be really awesome but
			 * I'm sure how it would integrate with any system fitting my
			 * description above.
			 */

			debug("Exception(RUN): " + e.getMessage());
			System.out.println("--- Stack Trace ---");
			e.printStackTrace();

			send("Game> Fatal Exception! Halting...");

			/*
			 * - halt command interpretation (if it isn't mangled already)
			 * - clear command queue
			 * - send a message to everyone (if possible)
			 * - disconnect players (saving if possible)
			 * - backup session data
			 * - stop threads
			 * - restart server
			 * - start threads
			 */

			send("Pausing game!");

			input_hold = true; // Halt Player Input
			game_time.pauseLoop(); // Pause the time tracking
			
			// Put the game into Maintenance mode (no new logins, except Wizards)
			changeMode(GameMode.MAINTENANCE);
			
			send("Entering " + mode.toString() + " Mode.");
			
			// do cleanup
			
			// need to use some scratch space to retain data to copyover so I can reinstantiate the server

			//restart?
			// MUDServer.main(new String[] {"--port=4202", "--debug"} );
		}
	}