private final void createStateManager() {
		// I wonder if we can lazily load this each time somehow?
		stateManager = new StateManager("mainMenuStateManager");

		// Add the state which will animate the buttons coming into the screen
		// from either set. When the buttons have reached the middle it will
		// transition into the registerEvents state
		stateManager.addPossibleState(new State("animatingButtons") {
			@Override
			public void logicUpdate(GameTime gameTime) {
				// The current iteration within the foreach loop. foreach loop
				// is faster than for(get(i)), this is why it's outside
				int i = 0;
				int plannedVelocity;
				// iterate through each logical child added to the menuOptions
				// gamelayer, in this case it will be only the
				// GameButtonGraphical children
				for (ILogical logicalObject : menuOptions.getAllLogicalChildren()) {
					// Ilogical object doesn't implement IPositionable, so we
					// have to typecast to the right interface. This allows us
					// to update the x,y coords
					IPositionable option = (IPositionable) logicalObject;

					// Move right if endLocation > current x pos.
					// We set the plannedVelocity to either be the desired
					// menuVelocity given as a field within this class, or we
					// set it to the closest distance that it can be to the goal
					// location so that it doesn't 'overshoot' the mark given
					plannedVelocity = endLocationX > option.getX() ?
							Math.min((int) (endLocationX - option.getX()), menuVelocity) :
							Math.max(-menuVelocity, (int) (endLocationX - option.getX()));

					option.setX(option.getX() + plannedVelocity);
					// Transiton to the next State, if we've reached our goal
					// destination, progress to the next state. Otherwise the
					// next state is our own.
					setTransitionStateName(option.getX() == endLocationX ? "registerEvents" : getName());
				}
			}
		});

		// Registers the button's events by calling the method
		// registerButtonEvents
		stateManager.addPossibleState(new State("registerEvents") {
			@Override
			public void logicUpdate(GameTime gameTime) {
				registerButtonEvents();
				setTransitionStateName("idle");
			}
		});

		stateManager.addPossibleState(new State("idle") {
			@Override
			public void logicUpdate(GameTime gameTime) {
				setTransitionStateName(getName());
			}
		});
	}