private void createFileMenuBar(Stage primaryStage) {

		MenuItem load = new MenuItem("Load Expression");
		MenuItem saveExpression = new MenuItem("Save Expression");
		MenuItem saveTable = new MenuItem("Save LaTeX Table");
		MenuItem reset = new MenuItem("Reset Fields");
		MenuItem exit = new MenuItem("Exit");

		fileMenu.getItems().addAll(load, saveExpression, saveTable, reset, exit);

		//START FILE EVENT HANDLING
		load.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent event) {
				String currentDir = System.getProperty("user.dir") + File.separator;
				FileChooserBuilder fcb = FileChooserBuilder.create();
				FileChooser fc = fcb.title("Expression to Load").initialDirectory(new File(currentDir)).build();
				File file = fc.showOpenDialog(primaryStage);

				if (file != null) { //null means they cancelled out
					while (!file.toString().endsWith(".txt") || !file.exists()) {
						createErrorBox("Incorrect Expression file");
						file = fc.showOpenDialog(primaryStage);
						if (file == null) {
							break;
						}
					}
					if (file != null) {
						FileIO f = new FileIO();
						expression.setText(f.loadExpression(file.toString()));
						Expression.setEnteredExpression(expression.getText());
						submitExpression(true);
					}
				}
			}
		});

		saveExpression.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				String currentDir = System.getProperty("user.dir") + File.separator;
				FileChooserBuilder fcb = FileChooserBuilder.create();
				FileChooser fc = fcb.title("Save Expression").initialDirectory(new File(currentDir)).build();

				File file = fc.showSaveDialog(primaryStage);
				if (file != null) {
					FileIO f = new FileIO();
					f.saveExpression(file.toString(), expression.getText());
				}
			}
		});

		saveTable.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				String currentDir = System.getProperty("user.dir") + File.separator;
				FileChooserBuilder fcb = FileChooserBuilder.create();
				FileChooser fc = fcb.title("Save Table").initialDirectory(new File(currentDir)).build();

				File file = fc.showSaveDialog(primaryStage);

				if (file != null) {
					if (Expression.expressionExists()) {
						try {
							Expression.validate();

							FileIO f = new FileIO();
							FullTableGenerator ft = new FullTableGenerator();
							CompactTableGenerator ct = new CompactTableGenerator();
							f.saveLaTeXTable(file.toString(), ct.getTable(), ft.getTable());
						} catch (ValidationException e) {
							createErrorBox("Cannot Save Table for Invalid Expression");
						}

					} else {
						createErrorBox("Cannont Save Table for Empty Expression");
					}

				}
			}
		});

		reset.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent t) {
				expression.setText("");

				//some table updater
				outputResponseSpeed = "Batch";
				displayResponseSpeedButton.setGraphic(
						new ImageView(ImageGetter.getTeXImage("Batch \\leftarrow Dynamic")));

				outputMode = "Compact";
				modeButton.setGraphic(
						new ImageView(ImageGetter.getTeXImage("Compact \\leftarrow Full")));

				outputDisplaySpeed = "Instant";
				displaySpeedButton.setGraphic(
						new ImageView(ImageGetter.getTeXImage("instant \\leftarrow Step")));

				submitExpression(false);
			}
		});

		exit.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent t) {
				Platform.runLater(new Runnable() {
					@Override
					public void run() {
						primaryStage.close();
					}
				});
			}
		});
		//end file event handling
		//	START Keyboard Accelerators
		//CTRL ALT L
		load.setAccelerator(new KeyCodeCombination(
				KeyCode.L, KeyCombination.ALT_DOWN, KeyCombination.CONTROL_DOWN));
		//CTRL ALT S
		saveExpression.setAccelerator(new KeyCodeCombination(
				KeyCode.S, KeyCombination.ALT_DOWN, KeyCombination.CONTROL_DOWN));
		//CTRL ALT T
		saveTable.setAccelerator(new KeyCodeCombination(
				KeyCode.T, KeyCombination.ALT_DOWN, KeyCombination.CONTROL_DOWN));
		//CTRL ALT R
		reset.setAccelerator(new KeyCodeCombination(
				KeyCode.R, KeyCombination.ALT_DOWN, KeyCombination.CONTROL_DOWN));
		//CTRL ALT E
		exit.setAccelerator(new KeyCodeCombination(
				KeyCode.E, KeyCombination.ALT_DOWN, KeyCombination.CONTROL_DOWN));

	}