diff --git a/ChangeLog b/ChangeLog
index 9ccd37de40760eacd84c5a96fca4e1f48cbc4fea..98bd5bdd28da7ad10f425b3a0da5dd94f381b304 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2024-10-14  Uwe Schulzweida
+
+	* Diff: added check for NANs
+
 2024-10-01  Uwe Schulzweida
 
 	* ydrunpctl: parameter pm=r8 failed (bug fix)
diff --git a/src/Diff.cc b/src/Diff.cc
index e1999ae8cfad8172b7866db65f786ea39d213c93..71e3c5e90b493a7d969328fcddffd539ec5728d7 100644
--- a/src/Diff.cc
+++ b/src/Diff.cc
@@ -20,6 +20,7 @@
 #include "cdo_task.h"
 #include "process_int.h"
 #include "mpmo_color.h"
+#include "cdo_math.h"
 #include "cdo_options.h"
 #include "printinfo.h"
 #include "cdo_zaxis.h"
@@ -241,9 +242,22 @@ print_header2(int operfunc, DiffParam &params)
 }
 
 static void
-compare_fields(const Field &field1, const Field &field2, int recordNumber, const CdoVar &var, int levelID, int operfunc,
-               CdiDateTime vDateTime, DiffParam &params, bool operfunc2)
+compare_fields(Field &field1, Field &field2, int recordNumber, const CdoVar &var, int levelID, int operfunc, CdiDateTime vDateTime,
+               DiffParam &params, bool operfunc2)
 {
+  size_t numNANs1 = std::isnan(field1.missval) ? 0 : field_num_NANs(field1);
+  if (numNANs1 && field1.numMissVals == 0)
+    {
+      field1.missval = cdo::NaN();
+      field1.numMissVals = numNANs1;
+    }
+  size_t numNANs2 = std::isnan(field2.missval) ? 0 : field_num_NANs(field2);
+  if (numNANs2 && field2.numMissVals == 0)
+    {
+      field2.missval = cdo::NaN();
+      field2.numMissVals = numNANs2;
+    }
+
   auto dr = (operfunc2 == 0) ? diff(var.gridsize, field1, field2) : diff2(var.gridsize, field1, field2);
 
   auto checkRelativeLimit = true;
@@ -292,6 +306,15 @@ compare_fields(const Field &field1, const Field &field2, int recordNumber, const
 
   if (dr.absm > params.absLimit || (checkRelativeLimit && dr.relm >= params.relLimit)) params.numDiffRecords++;
   if (dr.absm > params.absLimit2 || (checkRelativeLimit && dr.relm >= params.relLimit)) params.numDiffRecords2++;
+
+  if (numNANs1)
+    cdo_warning("Found %zu NaNs in infile1 which are not treated as missing values. This can lead to incorrect CDO results in all "
+                "other arithmetic functions!",
+                numNANs1);
+  if (numNANs2)
+    cdo_warning("Found %zu NaNs in infile2 which are not treated as missing values. This can lead to incorrect CDO results in all "
+                "other arithmetic functions!",
+                numNANs2);
 }
 
 class Diff : public Process
@@ -440,7 +463,7 @@ public:
               }
 
             std::function<void()> compare_fields_func
-                = std::bind(compare_fields, std::cref(field1), std::cref(field2), numSets + 1, std::cref(var1), levelID, operfunc,
+                = std::bind(compare_fields, std::ref(field1), std::ref(field2), numSets + 1, std::cref(var1), levelID, operfunc,
                             vDateTime, std::ref(params), operfunc2);
             runAsync ? task->doAsync(compare_fields_func) : compare_fields_func();
 
diff --git a/src/Info.cc b/src/Info.cc
index ae99bb969da06220de0f13fc9335a5295ec3e8b0..ac937b5958e03eeaa8152bfa1462753440e40ebb 100644
--- a/src/Info.cc
+++ b/src/Info.cc
@@ -407,7 +407,7 @@ info(Field &field, int indg, int indf, int tsID, int recID, int levelID, CdiDate
     }
 
   if (numNANs)
-    cdo_warning("Found %zu NAN values which are not treated as missing values. This can lead to incorrect CDO results in all "
+    cdo_warning("Found %zu NaNs which are not treated as missing values. This can lead to incorrect CDO results in all "
                 "other arithmetic functions!",
                 numNANs);
   if (imiss != numMissVals && numMissVals) cdo_warning("Found %zu of %zu missing values!", imiss, numMissVals);