private void addBundleInput( DCPackage input) {
		if(input.getPayload().length != DCPackage.PAYLOAD_SIZE) {
			throw new InputMismatchException("The provided input has length " + input.getPayload().length + " but should be " + DCPackage.PAYLOAD_SIZE);
		} else {
			int round = input.getNumber();
			if(round != currentRound) {
				// we refuse this package.
				Debugger.println("protocol", "[ConnectionBundle] Refusing package because of wrong round number. Is " + round + " but should be " + currentRound);
				return;
			}
			if(pendingPackage == null) {
				pendingPackage = input;
			} else {
				try {
					pendingPackage.combine(input);
				} catch(InputMismatchException e) {
					Debugger.println("protocol", "[ConnectionBundle] An error occurred while trying to combine a new package with the existing package.");
					return;
				}
			}
			remaining--;
			Debugger.println("protocol", "[ConnectionBundle] Remaining messages: " + remaining);
			if(remaining == 0) {
				Debugger.println("protocol", "[ConnectionBundle] Round " + currentRound + " is completed.");
				inputBuffer.add(pendingPackage);
				inputAvailable.release();
				currentRound = (pendingPackage.getNumber()+1) % pendingPackage.getNumberRange();

				resetRound();
			}
		}
	}