diff --git a/LCS/ApplCommon/src/Observation.cc b/LCS/ApplCommon/src/Observation.cc
index d2635ca6e956e1e07a4ef49b3a5f1ff6a0c4d972..1b33e4b93e33372ccc2019f3eb54e02808ae1df3 100644
--- a/LCS/ApplCommon/src/Observation.cc
+++ b/LCS/ApplCommon/src/Observation.cc
@@ -358,6 +358,8 @@ Observation::Observation(const ParameterSet*		aParSet,
 			vector<string> locations = aParSet->getStringVector(prefix+str(format("DataProducts.Output_%s.locations") % dataProductNames[d]), true);
 			vector<unsigned> &psets = dataProductPhases[d] == 2 ? phaseTwoPsets : phaseThreePsets;
 
+			ASSERTSTR(filenames.size() == locations.size(), "Parset provides " << filenames.size() << " filenames but only " << locations.size() << " locations.");
+
 			unsigned numFiles = filenames.size();
 			unsigned filesPerPset = (numFiles + psets.size() - 1) / psets.size();
 
@@ -371,6 +373,8 @@ Observation::Observation(const ParameterSet*		aParSet,
 				a.sourcePset = psets[i / filesPerPset];
 
 				vector<string> locparts = StringUtil::split(locations[i],':');
+			    ASSERTSTR(locparts.size() == 2, "A DataProduct location must be of the format host:directory (but I found " << locations[i] << ")");
+
 				a.destStorageNode = locparts[0];
 				a.destDirectory = locparts[1];