private void initializeJob() {
		if (job == null) {
			job = new Job("3D Molecular Simulator #" + jobIndex++) {

				public void run() {
					while (true) {
						super.run();
						while (!isStopped()) {
							modelTime += getTimeStep();
							advance(indexOfStep++);
							execute();
						}
						synchronized (this) {
							try {
								wait();
							} catch (InterruptedException e) {
								// e.printStackTrace();
								break;
							}
						}
					}
				}

				public void runScript(String script) {
					if (script != null)
						runTaskScript(script);
				}

				public void notifyChange() {
					MolecularModel.this.notifyChange();
				}

			};
			job.setInitTaskAction(new Runnable() {
				public void run() {
					getView().getActionMap().get("properties").actionPerformed(null);
				}
			});

		}
		if (!recorderDisabled && !job.contains(movieUpdater))
			job.add(movieUpdater);
		if (!job.contains(paintView))
			job.add(paintView);
	}