public void transmitOutputWater(){
		InfoPacket info = outputWater();
		Double watertemperature = 0.0;
		Double totalOutput = 0.0;
		Pair<?> currentPair;
		Label currentLabel;
		Iterator<Pair<?>> pairIt = info.namedValues.iterator();
		while (pairIt.hasNext()) {
			currentPair = pairIt.next();
			currentLabel = currentPair.getLabel();
			switch (currentLabel) {
			case Amnt:
				totalOutput = (Double) currentPair.second();
				break;
			case temp:
				watertemperature = (Double) currentPair.second();
				break;
			default:
				break;
			}
		}
		double leftToOutput = totalOutput;
		int count = outputsWaterTo.size();
		double outputPerComponent;
		WaterComponent comp;
		sortOutputs();
		Iterator<WaterComponent> cIt = outputsWaterTo.iterator();
		while(cIt.hasNext()){
			comp = cIt.next();
			outputPerComponent = (leftToOutput / count);
			if (outputPerComponent > comp.maxInput()){
				leftToOutput = leftToOutput - comp.maxInput();// this is the bit where water is transferred
				InfoPacket waterpack = new InfoPacket();
				waterpack.namedValues.add(new Pair<Double>(Pair.Label.Amnt, comp.maxInput()));
				waterpack.namedValues.add(new Pair<Double>(Pair.Label.temp, watertemperature));
				comp.recieveWater(waterpack);
			}else{
				leftToOutput = leftToOutput - outputPerComponent;// this is the bit where water is transferred
				InfoPacket waterpack = new InfoPacket();
				waterpack.namedValues.add(new Pair<Double>(Pair.Label.Amnt, outputPerComponent));
				waterpack.namedValues.add(new Pair<Double>(Pair.Label.temp, watertemperature));
				comp.recieveWater(waterpack);
			}
			count = count - 1;
		}
		setOuputFlowRate(totalOutput - leftToOutput);
		InfoPacket waterpack = new InfoPacket();
		waterpack.namedValues.add(new Pair<Double>(Pair.Label.Amnt, leftToOutput));
		waterpack.namedValues.add(new Pair<Double>(Pair.Label.temp, watertemperature));
		this.recieveWater(waterpack);
	}