private Token next() {
		Token token = null;

		if (this.unsupportedDirective != null) {
			while (this.unsupportedDirective.size() > 0) {
				token = this.unsupportedDirective.removeFirst();
				if (!(token instanceof Marker)) {
					return token;
				}
			}

			this.unsupportedDirective = null;
		}

		if (this.copybookTokenizer != null) {
			token = this.copybookTokenizer.nextToken();

			if (token != null)
				return token;

			this.copybookTokenizer.quit();
			this.copybookTokenizer = null;
		}

		if (this.sourceSink != null) {
			token = this.sourceSink.nextToken();

			if (token != null)
				return token;

			this.sourceSink = null;
		}

		token = this.sourceTokenizer.nextToken();

		return token;
	}