private void createActions() {

		// save model action
		Action a = new SaveModelAction(this);
		view.getActionMap().put("save model", a);
		view.getInputMap().put((KeyStroke) a.getValue(ACCELERATOR_KEY), "save model");

		// open model action
		a = new OpenModelAction(this);
		view.getActionMap().put("open model", a);
		view.getInputMap().put((KeyStroke) a.getValue(ACCELERATOR_KEY), "open model");

		// spin action
		a = new DefaultAction() {
			public void actionPerformed(ActionEvent e) {
				view.setSpinOn(((AbstractButton) e.getSource()).isSelected());
			}
		};
		a.putValue(NAME, "Spin");
		a.putValue(SHORT_DESCRIPTION, "Spin the model");
		a.putValue(MNEMONIC_KEY, KeyEvent.VK_I);
		a.putValue(SMALL_ICON, IconPool.getIcon("spin"));
		a.putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0));
		a.putValue("state", view.isSpinOn() ? Boolean.TRUE : Boolean.FALSE);
		view.getInputMap().put((KeyStroke) a.getValue(ACCELERATOR_KEY), "spin");
		view.getActionMap().put("spin", a);

		// perspective depth switch
		a = new DefaultAction() {
			public void actionPerformed(ActionEvent e) {
				AbstractButton ab = (AbstractButton) e.getSource();
				view.getViewer().setPerspectiveDepth(ab.isSelected());
				view.repaint();
			}
		};
		a.putValue(NAME, "Perspective Depth");
		a.putValue(SHORT_DESCRIPTION, "Perspective Depth");
		a.putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_V));
		a.putValue("state", view.getViewer().getPerspectiveDepth() ? Boolean.TRUE : Boolean.FALSE);
		view.getActionMap().put("perspective depth", a);

		// run action
		runAction = new DefaultAction() {
			public void actionPerformed(ActionEvent e) {
				resetToolBar();
				setToolBarEnabled(false);
				model.getMovie().enableMovieActions(false);
				if (model.getMovie().getCurrentFrameIndex() < model.getMovie().length()) {
					Thread t = new Thread("Movie Player") {
						public void run() {
							if (model.getMovie().play()) {
								EventQueue.invokeLater(new Runnable() {
									public void run() {
										MolecularContainer.this.run();
									}
								});
							}
						}
					};
					t.setPriority(Thread.MIN_PRIORITY);
					t.start();
				}
				else {
					run();
				}
				notifyModelListeners(new ModelEvent(MolecularContainer.this, ModelEvent.MODEL_RUN));
				notifyPageComponentListeners(new PageComponentEvent(MolecularContainer.this, PageComponentEvent.COMPONENT_RUN));
			}
		};
		runAction.putValue(NAME, "Run");
		runAction.putValue(SHORT_DESCRIPTION, "Run the model");
		runAction.putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_R));
		runAction.putValue(SMALL_ICON, IconPool.getIcon("play"));
		view.getActionMap().put("run", runAction);
		model.getMovie().setRunAction(runAction);

		// stop action
		stopAction = new DefaultAction() {
			public void actionPerformed(ActionEvent e) {
				if (model.getMovie().getCurrentFrameIndex() >= model.getMovie().length() - 2)
					stop();
				model.getMovie().pause();
				model.getMovie().enableMovieActions(true);
				setToolBarEnabled(true);
				notifyModelListeners(new ModelEvent(MolecularContainer.this, ModelEvent.MODEL_STOP));
			}
		};
		stopAction.putValue(NAME, "Stop");
		stopAction.putValue(SHORT_DESCRIPTION, "Stop");
		stopAction.putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_P));
		stopAction.putValue(SMALL_ICON, IconPool.getIcon("pause"));
		stopAction.setEnabled(false);
		view.getActionMap().put("stop", stopAction);
		model.getMovie().setStopAction(stopAction);

		// reset action
		resetAction = new DefaultAction() {
			public void actionPerformed(ActionEvent e) {
				if (model.getMovie().getCurrentFrameIndex() >= model.getMovie().length() - 2)
					stop();
				if (e != null) {
					if (actionReminder.show(ActionReminder.RESET_TO_SAVED_STATE) == JOptionPane.NO_OPTION)
						return;
				}
				if (resourceAddress != null) {
					if (isApplet()) {
						try {
							input(new URL(resourceAddress), true);
						}
						catch (MalformedURLException e1) {
							e1.printStackTrace();
						}
					}
					else {
						input(resourceAddress, true);
					}
				}
				else reset();
				model.readdMouseAndKeyScripts();
				notifyModelListeners(new ModelEvent(MolecularContainer.this, ModelEvent.MODEL_RESET));
				notifyPageComponentListeners(new PageComponentEvent(MolecularContainer.this, PageComponentEvent.COMPONENT_RESET));
			}
		};
		resetAction.putValue(NAME, "Reset");
		resetAction.putValue(SHORT_DESCRIPTION, "Reset");
		resetAction.putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_T));
		resetAction.putValue(SMALL_ICON, IconPool.getIcon("reset"));
		view.getActionMap().put("reset", resetAction);

		// heat action
		a = new DefaultAction() {
			public void actionPerformed(ActionEvent e) {
				model.transferKE(0.005f);
			}
		};
		a.putValue(NAME, "Heat");
		a.putValue(SHORT_DESCRIPTION, "Heat");
		a.putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_H));
		a.putValue(SMALL_ICON, IconPool.getIcon("heat"));
		view.getActionMap().put("heat", a);

		// cool action
		a = new DefaultAction() {
			public void actionPerformed(ActionEvent e) {
				model.transferKE(-0.005f);
			}
		};
		a.putValue(NAME, "Cool");
		a.putValue(SHORT_DESCRIPTION, "Cool");
		a.putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_C));
		a.putValue(SMALL_ICON, IconPool.getIcon("cool"));
		view.getActionMap().put("cool", a);

		a = new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				view.showViewProperties();
			}
		};
		a.putValue(NAME, "Show View Options");
		a.putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_V));
		a.putValue(SHORT_DESCRIPTION, "Show view options");
		a.putValue(SMALL_ICON, IconPool.getIcon("view"));
		a.putValue(ACCELERATOR_KEY, System.getProperty("os.name").startsWith("Mac") ? KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.ALT_MASK | KeyEvent.META_MASK, true) : KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.ALT_MASK | KeyEvent.CTRL_MASK, true));
		view.getInputMap().put((KeyStroke) a.getValue(ACCELERATOR_KEY), "view options");
		view.getActionMap().put("view options", a);

		a = new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				ModelProperties modelProperties = new ModelProperties(JOptionPane.getFrameForComponent(MolecularContainer.this), model);
				if (e == null)
					modelProperties.selectInitializationScriptTab();
				modelProperties.setLocationRelativeTo(MolecularContainer.this);
				modelProperties.setVisible(true);
			}
		};
		a.putValue(NAME, "Access Model Properties");
		a.putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_P));
		a.putValue(SHORT_DESCRIPTION, "Access model properties");
		a.putValue(SMALL_ICON, IconPool.getIcon("properties"));
		a.putValue(ACCELERATOR_KEY, System.getProperty("os.name").startsWith("Mac") ? KeyStroke.getKeyStroke(KeyEvent.VK_M, KeyEvent.ALT_MASK | KeyEvent.META_MASK, true) : KeyStroke.getKeyStroke(KeyEvent.VK_M, KeyEvent.ALT_MASK | KeyEvent.CTRL_MASK, true));
		view.getInputMap().put((KeyStroke) a.getValue(ACCELERATOR_KEY), "properties");
		view.getActionMap().put("properties", a);

		a = new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				showTaskManager();
			}
		};
		a.putValue(NAME, "Task Manager");
		a.putValue(SHORT_DESCRIPTION, "Task manager");
		a.putValue(SMALL_ICON, IconPool.getIcon("taskmanager"));
		view.getActionMap().put("task manager", a);

		view.getActionMap().put("show energy", new ShowEnergyAction(this));

	}