private JMenu setupInstructions(StateManager stateManager)
	{
		// create instruction category submenus
		JMenu arithmeticLogicalMenu = new JMenu("Arithmetic & Logical");
		JMenu moveMenu              = new JMenu("Move");
		JMenu comparisonMenu        = new JMenu("Comparison");
		JMenu shiftRotateMenu       = new JMenu("Shift & Rotate");
		JMenu programControlMenu    = new JMenu("Program Control");
		JMenu dataTransferMenu      = new JMenu("Data Transfer");
		JMenu otherMenu             = new JMenu("Other");

		JMenu submenu;

		// add instructions to category submenus
		ArrayList<InstructionSyntax> instructions = InstructionManager.getAllInstructionSyntax();

		if (instructions != null) {
			for (InstructionSyntax instruction : instructions)
			{
				// get submenu depending on instruction category
				switch (instruction.getCategory())
				{
					case ARITHMETIC_LOGICAL:
						submenu = arithmeticLogicalMenu;
						break;
					case MOVE:
						submenu = moveMenu;
						break;
					case COMPARISON:
						submenu = comparisonMenu;
						break;
					case SHIFT_ROTATE:
						submenu = shiftRotateMenu;
						break;
					case PROGRAM_CONTROL:
						submenu = programControlMenu;
						break;
					case DATA_TRANSFER:
						submenu = dataTransferMenu;
						break;
					default:
						submenu = otherMenu;
						break;
				}

				// add instruction to submenu
				submenu.add(
					createMenuItem(instruction.getName(), EventManager.EVENT.EDITOR_INSERT_INSTRUCTION + DELIMITER_CHAR + instruction.getName())
				);
			}
		}

		JMenu menu = new JMenu("Instruction");

		// add instruction categories as submenus
		menu.add(arithmeticLogicalMenu);
		menu.add(moveMenu);
		menu.add(comparisonMenu);
		menu.add(shiftRotateMenu);
		menu.add(programControlMenu);
		menu.add(dataTransferMenu);
		menu.add(otherMenu);

		return menu;
	}