diff --git a/mpod.cpp b/mpod.cpp
index 1190c9c592313c7d3edd9ae3fae4e7a3679bd364..4ceb264867b8642de2ca540992e7a299ca29412f 100644
--- a/mpod.cpp
+++ b/mpod.cpp
@@ -81,6 +81,9 @@ bool MPOD::message(const SNMP::Message *message) {
             case OID::OUTPUTSTATUS: {
                 // OUTPUTSTATUS is defined in MIB as BITS but encoded as OCTETSTRING by MPOD
                 OctetStringBER *status = static_cast<OctetStringBER *>(varbind->getValue());
+                if (status->getLength() == 0) {
+                    break;
+                }
                 _on = status->getBit(0);
                 _rampingUp = status->getBit(11);
                 _rampingDown = status->getBit(12);
@@ -88,31 +91,50 @@ bool MPOD::message(const SNMP::Message *message) {
                 found++;
                 break;
             case OID::OUTPUTMEASUREMENTSENSEVOLTAGE:
-                // Use private helper function to extract float value
+                if (varbind->getLength() != 25) {
+                    break;
+                }
                 _measurementSenseVoltage = getFloatFromVarBind(varbind);
                 found++;
                 break;
             case OID::OUTPUTMEASUREMENTCURRENT:
+                if (varbind->getLength() != 25) {
+                    break;
+                }
                 _measurementCurrent = getFloatFromVarBind(varbind);
                 found++;
                 break;
             case OID::OUTPUTSWITCH:
                 // Use private helper function to extract integer value
+                Serial.print("Output Switch Length: ");
+                Serial.println(varbind->getLength());
                 _on = getIntegerFromVarBind(varbind);
                 found++;
                 break;
             case OID::OUTPUTVOLTAGE:
+                if (varbind->getLength() != 25) {
+                    break;
+                }
                 _voltage = getFloatFromVarBind(varbind);
                 found++;
                 break;
             case OID::OUTPUTCURRENT:
+                if (varbind->getLength() != 25) {
+                    break;
+                }
                 _current = getFloatFromVarBind(varbind);
                 found++;
                 break;
             case OID::OUTPUTVOLTAGERISERATE:
+                if (varbind->getLength() != 25) {
+                    break;
+                }
                 _voltageRiseRate = getFloatFromVarBind(varbind);
                 found++;
                 break;
+            default:
+                Serial.println(name);
+                break;
         }
 
         // Get the channel ID from the last value in the varbind name
@@ -120,6 +142,11 @@ bool MPOD::message(const SNMP::Message *message) {
         // that far.
         const char *channel = strrchr(varbind->getName(), '.') + 1;
         _channel = atoi(channel);
+
+        // MPOD SNMP channel 0 does not exist (starts from 1; U0 is 1).
+        // Mark the channel as 0 if invalid data was received.
+        // This can be used later to validate a sent request.
+        _channel = found ? _channel : 0;
     }
     // Return true if nodes found, that means this is a valid response from MPOD
     return found;
@@ -200,7 +227,7 @@ void onMessage(const SNMP::Message *message, const IPAddress remote, const uint1
         Serial.print(mpod.getVoltageRiseRate());
         Serial.println(" V/s");
     } else {
-        Serial.println("Received non-MPOD traffic");
+        Serial.println("Received non-MPOD traffic (invalid channel?).");
     }
 }
 
diff --git a/rest.cpp b/rest.cpp
index 2f1b0aef913d5460618ed72a54d48bf336c2c6bc..e4bbea1f025e0beae09f5fd353127b3718a6f917 100644
--- a/rest.cpp
+++ b/rest.cpp
@@ -161,7 +161,7 @@ void sendSNMP() {
 
     if (output != NONE && channel != 0) {
         setChannelStateAndWait(&ipAddr, channel, output);
-        success = true;  // validates input parameters, not MPOD status, reported separately
+        success = mpod.getChannel() ? true : false;
     }
 
     String http_msg = "{\n";
@@ -285,7 +285,12 @@ void pollMPODChannel() {
         delay(MPOD_UPDATE_LATENCY);
         snmp.loop();  // Force loop to update now
 
-        ret = mpod.toJSON();
+        if (mpod.getChannel()) {
+            ret = mpod.toJSON();
+        } else {
+            ret = "\"reason\": \"Invalid channel\"";
+            channel = 0;
+        }
     }
 
     String http_msg = "{\n";