diff --git a/Framework/Algorithms/src/ConjoinXRuns.cpp b/Framework/Algorithms/src/ConjoinXRuns.cpp
index d01aebd29c635e9871ba2609db022f0c0148c113..fa05dd89b3656bba8134a41d599e1111544ce7ea 100644
--- a/Framework/Algorithms/src/ConjoinXRuns.cpp
+++ b/Framework/Algorithms/src/ConjoinXRuns.cpp
@@ -114,17 +114,21 @@ std::map<std::string, std::string> ConjoinXRuns::validateInputs() {
   m_logEntry = getPropertyValue(SAMPLE_LOG_X_AXIS_PROPERTY);
 
   std::vector<std::string> workspaces;
-  try {
+  try { // input workspace must be a group or a MatrixWorkspace
     workspaces = RunCombinationHelper::unWrapGroups(inputs_given);
   } catch (const std::exception &e) {
     issues[INPUT_WORKSPACE_PROPERTY] = std::string(e.what());
   }
 
-  // find if there are workspaces that are not Matrix or not a point-data
+  // find if there are grouped workspaces that are not Matrix or not a
+  // point-data
   for (const auto &input : workspaces) {
     MatrixWorkspace_sptr ws =
         AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(input);
-    if (ws->isHistogramData()) {
+    if (!ws) {
+      issues[INPUT_WORKSPACE_PROPERTY] +=
+          "Workspace " + input + " is not a MatrixWorkspace\n";
+    } else if (ws->isHistogramData()) {
       issues[INPUT_WORKSPACE_PROPERTY] +=
           "Workspace " + ws->getName() + " is not a point-data\n";
     } else {
@@ -186,7 +190,8 @@ std::string ConjoinXRuns::checkLogEntry(MatrixWorkspace_sptr ws) const {
       try {
         run.getLogAsSingleValue(m_logEntry);
 
-        // try if numeric time series, then the size must match to the blocksize
+        // try if numeric time series, then the size must match to the
+        // blocksize
         const int blocksize = static_cast<int>(ws->blocksize());
 
         TimeSeriesProperty<double> *timeSeriesDouble(nullptr);