diff --git a/include/NVMeSensor.hpp b/include/NVMeSensor.hpp
index d713211..a0dce78 100644
--- a/include/NVMeSensor.hpp
+++ b/include/NVMeSensor.hpp
@@ -19,10 +19,14 @@
 
     NVMeSensor& operator=(const NVMeSensor& other) = delete;
 
+    bool sample();
+
     int bus;
 
   private:
+    const unsigned int scanDelayTicks = 5 * 60;
     sdbusplus::asio::object_server& objServer;
+    unsigned int scanDelay;
 
     void checkThresholds(void) override;
 };
diff --git a/src/NVMeBasicContext.cpp b/src/NVMeBasicContext.cpp
index c755e23..29dab7a 100644
--- a/src/NVMeBasicContext.cpp
+++ b/src/NVMeBasicContext.cpp
@@ -263,6 +263,13 @@
         return;
     }
 
+    /* Potentially defer sampling the sensor sensor if it is in error */
+    if (!sensor->sample())
+    {
+        readAndProcessNVMeSensor(iter);
+        return;
+    }
+
     auto command = encodeBasicQuery(sensor->bus, 0x6a, 0x00);
 
     /* Issue the request */
@@ -331,12 +338,6 @@
                 return;
             }
 
-            if (length == 1)
-            {
-                std::cerr << "Basic query failed\n";
-                return;
-            }
-
             /* Deserialise the response */
             response->consume(1); /* Drop the length byte */
             std::istream is(response.get());
@@ -389,28 +390,19 @@
 void NVMeBasicContext::processResponse(std::shared_ptr<NVMeSensor>& sensor,
                                        void* msg, size_t len)
 {
-    if (msg == nullptr)
+    if (msg == nullptr || len < 6)
     {
-        std::cerr << "Bad message received\n";
-        return;
-    }
-
-    if (len < 6)
-    {
-        std::cerr << "Invalid message length: " << len << "\n";
+        sensor->incrementError();
         return;
     }
 
     uint8_t* messageData = static_cast<uint8_t*>(msg);
     double value = getTemperatureReading(messageData[2]);
-
-    if (std::isfinite(value))
+    if (!std::isfinite(value))
     {
-        sensor->updateValue(value);
-    }
-    else
-    {
-        sensor->markAvailable(false);
         sensor->incrementError();
+        return;
     }
+
+    sensor->updateValue(value);
 }
diff --git a/src/NVMeSensor.cpp b/src/NVMeSensor.cpp
index d293737..213e320 100644
--- a/src/NVMeSensor.cpp
+++ b/src/NVMeSensor.cpp
@@ -31,7 +31,7 @@
     Sensor(escapeName(sensorName), std::move(thresholdsIn), sensorConfiguration,
            NVMeSensor::configType, false, false, maxReading, minReading, conn,
            PowerState::on),
-    bus(busNumber), objServer(objectServer)
+    bus(busNumber), objServer(objectServer), scanDelay(0)
 {
     if (bus < 0)
     {
@@ -67,6 +67,21 @@
     objServer.remove_interface(association);
 }
 
+bool NVMeSensor::sample()
+{
+    if (inError())
+    {
+        if (scanDelay == 0)
+        {
+            scanDelay = scanDelayTicks;
+        }
+
+        scanDelay--;
+    }
+
+    return scanDelay == 0;
+}
+
 void NVMeSensor::checkThresholds(void)
 {
     thresholds::checkThresholds(this);
