private boolean incrementSequence() {
		synchronized (sequenceQueueLock) {
			// Is there a queue, and if so, is there anything in it:
			if (sequenceQueue != null && sequenceQueue.size() > 0) {
				// grab the next filename/URL from the queue:
				filenameURL(SET, sequenceQueue.remove(0));

				// Let everyone know we are busy loading:
				loading(SET, true);

				// Check if we have a sequencer:
				if (sequencer == null) {
					// nope, try and get one now:
					getSequencer();
				} else {
					// We have a sequencer. Stop it now:
					sequencer.stop();
					// rewind to the beginning:
					sequencer.setMicrosecondPosition(0);
					// Stop listening for a moment:
					sequencer.removeMetaEventListener(this);
					// wait a bit for the sequencer to shut down and rewind:
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
					}
				}
				// We need to have a sequencer at this point:
				if (sequencer == null) {
					errorMessage("Unable to set the sequence in method "
							+ "'incrementSequence', because there wasn't "
							+ "a sequencer to use.");

					// Finished loading:
					loading(SET, false);

					// failure:
					return false;
				}
				// set the new sequence to be played:
				setSequence(filenameURL(GET, null).getURL());
				// start playing again:
				sequencer.start();
				// make sure we play at the correct volume:
				// (TODO: This doesn't always work??)
				resetGain();
				// start listening for end of track event again:
				sequencer.addMetaEventListener(this);

				// Finished loading:
				loading(SET, false);

				// We successfully moved to the next sequence:
				return true;
			}
		}

		// Nothing left to load
		return false;
	}