public void QueueDataForXfer(ScienceHardDrive drive, IScienceDataContainer container, ScienceData data) {
			Dictionary<ScienceData, IScienceDataContainer> queue;

			if(!xferQueues.Any(kvp => kvp.Value.ContainsKey(data))) {
				if(xferQueues.TryGetValue(drive, out queue)) {
					float queueAmount = 0;

					foreach(ScienceData d in queue.Keys) {
						queueAmount += d.dataAmount;
					}

					if(data.dataAmount + queueAmount <= drive.freeSpace) {
						Print("Queue for " + drive.part.partInfo.title + " found and queuing " + data.title);
						queue.Add(data, container);
					}
					else {
						Print("Not enough room to queue " + data.title + " in the queue for " + drive.part.partInfo.title);
					}
				}
				else {
					if(data.dataAmount <= drive.freeSpace) {
						Print(drive.part.partInfo.title + " doesn't have a queue. Making one and queuing " + data.title);
						xferQueues.Add(drive, new Dictionary<ScienceData, IScienceDataContainer> { { data, container } });
					}
					else {
						Print("Not enough room to queue " + data.title + " in the queue for " + drive.part.partInfo.title);
					}
				}

				if(!drive.IsXfering()) {
					Print(drive.part.partInfo.title + " starting data transfer.");
					StartCoroutine(TransferData(drive));
				}
				else {
					Print(drive.part.partInfo.title + " is already tranfering data.");
				}
			}
			else {
				Print(data.title + " is already queued.");
			}
		}