diff --git a/Framework/DataHandling/inc/MantidDataHandling/LoadILLDiffraction.h b/Framework/DataHandling/inc/MantidDataHandling/LoadILLDiffraction.h
index e1a0c84ccb1092b2702ad37c650c2e2721a5c403..7719a39d79f040279966ccca07a418891f8874b8 100644
--- a/Framework/DataHandling/inc/MantidDataHandling/LoadILLDiffraction.h
+++ b/Framework/DataHandling/inc/MantidDataHandling/LoadILLDiffraction.h
@@ -64,6 +64,7 @@ private:
   };
 
   void init() override;
+  std::map<std::string, std::string> validateInputs() override;
   void exec() override;
 
   std::vector<Types::Core::DateAndTime>
@@ -72,6 +73,7 @@ private:
   std::vector<double> getDurations(const NeXus::NXDouble &) const;
   std::vector<double> getMonitor(const NeXus::NXDouble &) const;
   std::string getInstrumentFilePath(const std::string &) const;
+  bool containsCalibratedData(const std::string &filename) const;
 
   void fillDataScanMetaData(const NeXus::NXDouble &);
   std::vector<double>
diff --git a/Framework/DataHandling/src/LoadILLDiffraction.cpp b/Framework/DataHandling/src/LoadILLDiffraction.cpp
index 8176e63740fe180c69fe5f3868c34310a1f3bd12..df1ac556b1facec6c2f59365f00a9032cf73d00f 100644
--- a/Framework/DataHandling/src/LoadILLDiffraction.cpp
+++ b/Framework/DataHandling/src/LoadILLDiffraction.cpp
@@ -100,6 +100,16 @@ void LoadILLDiffraction::init() {
                   "Type of data, with or without calibration already applied.");
 }
 
+std::map<std::string, std::string> LoadILLDiffraction::validateInputs() {
+  std::map<std::string, std::string> issues;
+  if (getPropertyValue("DataType") == "Calibrated" &&
+      !containsCalibratedData(getPropertyValue("Filename"))) {
+    issues["DataType"] = "Calibrated data requested, but only raw data exists "
+                         "in this NeXus file.";
+  }
+  return issues;
+}
+
 /**
  * Executes the algorithm.
  */
@@ -138,7 +148,8 @@ void LoadILLDiffraction::loadDataScan() {
   // read the detector data
 
   std::string dataName;
-  if (getPropertyValue("DataType") == "Calibrated")
+  if (getPropertyValue("DataType") == "Calibrated" ||
+      !containsCalibratedData(m_fileName))
     dataName = "data_scan/detector_data/data";
   else
     dataName = "data_scan/detector_data/raw_data";
@@ -710,5 +721,20 @@ LoadILLDiffraction::getInstrumentFilePath(const std::string &instName) const {
   return fullPath.toString();
 }
 
+/**
+ * Returns true if the file contains calibrated data
+ *
+ * @param filename The filename to check
+ * @return True if the file contains calibrated data, false otherwise
+ */
+bool LoadILLDiffraction::containsCalibratedData(
+    const std::string &filename) const {
+  NexusDescriptor descriptor(filename);
+  // This is unintuitive, but if the file has calibrated data there are entries
+  // for 'data' and 'raw_data'. If there is no calibrated data only 'data' is
+  // present.
+  return descriptor.pathExists("/entry0/data_scan/detector_data/raw_data");
+}
+
 } // namespace DataHandling
 } // namespace Mantid
diff --git a/Framework/DataHandling/test/LoadILLDiffractionTest.h b/Framework/DataHandling/test/LoadILLDiffractionTest.h
index 5bed2ede23d51c4901f06c8422841dccb0296b88..6f1315be53c92f8a49768994ab138b30f770a86a 100644
--- a/Framework/DataHandling/test/LoadILLDiffractionTest.h
+++ b/Framework/DataHandling/test/LoadILLDiffractionTest.h
@@ -78,13 +78,13 @@ public:
     TS_ASSERT_EQUALS(outputWS->y(3072)[0], 0.)
     TS_ASSERT_EQUALS(outputWS->e(3072)[0], 0.)
 
-    TS_ASSERT(outputWS->run().hasProperty("simulated_d20"))
-    TS_ASSERT(outputWS->run().hasProperty("AcquisitionSpy"))
-    TS_ASSERT(outputWS->run().hasProperty("SampleSettings"))
+    TS_ASSERT(outputWS->run().hasProperty("simulated_d20.TotalCount"))
+    TS_ASSERT(outputWS->run().hasProperty("AcquisitionSpy.Time"))
+    TS_ASSERT(outputWS->run().hasProperty("SampleSettings.SampleTemp"))
 
-    const auto sim = outputWS->run().getLogData("simulated_d20");
-    const auto spy = outputWS->run().getLogData("AcquisitionSpy");
-    const auto sample = outputWS->run().getLogData("SampleSettings");
+    const auto sim = outputWS->run().getLogData("simulated_d20.TotalCount");
+    const auto spy = outputWS->run().getLogData("AcquisitionSpy.Time");
+    const auto sample = outputWS->run().getLogData("SampleSettings.SampleTemp");
 
     TS_ASSERT_EQUALS(sim->size(), 1)
     TS_ASSERT_EQUALS(spy->size(), 1)
@@ -131,13 +131,13 @@ public:
       }
     }
 
-    TS_ASSERT(outputWS->run().hasProperty("Omega"))
-    TS_ASSERT(outputWS->run().hasProperty("Detector"))
-    TS_ASSERT(outputWS->run().hasProperty("AcquisitionSpy"))
-    TS_ASSERT(outputWS->run().hasProperty("SampleSettings"))
-    TS_ASSERT(outputWS->run().hasProperty("MagneticField"))
+    TS_ASSERT(outputWS->run().hasProperty("Omega.Position"))
+    TS_ASSERT(outputWS->run().hasProperty("Detector.TotalCount"))
+    TS_ASSERT(outputWS->run().hasProperty("AcquisitionSpy.Time"))
+    TS_ASSERT(outputWS->run().hasProperty("SampleSettings.SampleTemp"))
+    TS_ASSERT(outputWS->run().hasProperty("MagneticField.field"))
 
-    const auto omega = outputWS->run().getLogData("Omega");
+    const auto omega = outputWS->run().getLogData("Omega.Position");
 
     TS_ASSERT_EQUALS(omega->size(), 21)
 
diff --git a/Framework/Kernel/src/NexusDescriptor.cpp b/Framework/Kernel/src/NexusDescriptor.cpp
index a2e41cb63ce50ceea4395e5e5a3992a03a0e0540..4602b60679d2408ee8f929f53a1cb021f2b91a7d 100644
--- a/Framework/Kernel/src/NexusDescriptor.cpp
+++ b/Framework/Kernel/src/NexusDescriptor.cpp
@@ -125,9 +125,10 @@ NexusDescriptor::NexusDescriptor(const std::string &filename)
   }
   try {
     initialize(filename);
-  } catch (::NeXus::Exception &) {
-    throw std::invalid_argument("NexusDescriptor::initialize - File '" +
-                                filename + "' does not look like a HDF file.");
+  } catch (::NeXus::Exception &e) {
+    throw std::invalid_argument(
+        "NexusDescriptor::initialize - File '" + filename +
+        "' does not look like a HDF file.\n Error was: " + e.what());
   }
 }
 
diff --git a/Testing/Data/UnitTest/ILL/D20/000017.nxs.md5 b/Testing/Data/UnitTest/ILL/D20/000017.nxs.md5
index 128f8c9be8bf9568515f10322170f5dc89750635..1c3a6f8128ee20fc7dc93d7f7c2a82e1450ac9e9 100644
--- a/Testing/Data/UnitTest/ILL/D20/000017.nxs.md5
+++ b/Testing/Data/UnitTest/ILL/D20/000017.nxs.md5
@@ -1 +1 @@
-65d8027268f1cf53eb20ef076fbb3655
+cc3a75118e65e22546c52629cf4812fd