@Override
		public void run() {
			while (alive){
				//We keep consuming jobs while they are available
				IJob job = null;
				synchronized (jobQueue){
					if (jobs.size() > 0)
						job = jobs.remove(0);
					else 
						alive = false;
				}
				//Make sure not to hog the synchronization of the queue when we don't need it
				if (job != null)
					executeJob(job);
			}
			//When our job queue is empty we can either shut down or wait for more jobs to come
			//Our consumer Thread will stop either way
			if (callExit){
				try {
					updateable.send(new StatusUpdate("VM " + id + " Shutting down on soft exit request.", id, VMState.SHUTDOWN));
				} catch (IOException e) {
					e.printStackTrace();
				} catch (JSchException e) {
					e.printStackTrace();
				}
				System.exit(0);
			} else {
				try {
					updateable.send(new StatusUpdate("VM " + id + " Done processing all jobs.", id, VMState.DONE, JobType.WAITING));
				} catch (IOException e) {
					e.printStackTrace();
				} catch (JSchException e) {
					e.printStackTrace();
				}
			}
		}