 bool arduino_mib(SNMP::PDU& pdu)
 {
   // Match with Arduino MIB OID root
-  int sys = pdu.oid.match(SNMP::ARDUINO_MIB, false);
-  if (sys < 0 || pdu.oid.length != 11) return (false);
-
-  // Access pin number and requested object
-  uint8_t pin = pdu.oid.name[sys + 1];
-  sys = pdu.oid.name[sys];
+  int pos = pdu.oid.match(SNMP::ARDUINO_MIB, false);
+  if (pos < 0 || pdu.oid.length != 11) return (false);
+
+  // Access pin type and number
+  uint8_t sys = pdu.oid.name[pos];
+  uint8_t pin = pdu.oid.name[pos + 1];
+  
+  // Get next value; adjust pin referens
+  if (pdu.type == SNMP::PDU_GET_NEXT) {
+    switch (sys) {
+    case 0:
+      sys = SNMP::ardDigitalPin;
+      pin = 0;
+      break;
+    case SNMP::ardDigitalPin:
+      if (pin < 22)
+	pin += 1;
+      else {
+	pin = 0;
+	sys = SNMP::ardAnalogPin;
+      } 
+      break;
+    case SNMP::ardAnalogPin:
+      if (pin < 7)
+	pin += 1;
+      else {
+	pin = 0; 
+	sys = SNMP::ardVcc;
+      }
+      break;
+    case SNMP::ardVcc:
+      return (false);
+    }
+    pdu.oid.name[pos] = sys;
+    pdu.oid.name[pos + 1] = pin;
+    pdu.type = SNMP::PDU_GET;
+  }
+
+  // Check request type
   if (sys < SNMP::ardDigitalPin || sys > SNMP::ardVcc) return (false);
-
+  
   // Get value for digital or analog pin, or power supply voltage
   if (pdu.type == SNMP::PDU_GET) {
     switch (sys) {

      pdu.value.encode(SNMP::SYNTAX_UINT32, Watchdog::millis() / 1000L);
      break;
    case SNMP::sysServices:
      pdu.value.encode(SNMP::SYNTAX_INT, 42);
      break;
    case SNMP::sysContact:
      static const char CONTACT[] PROGMEM = "<your name>";

  // Wait for a request
  if (snmp.recv(pdu) < 0) return;

  // Check for root getnext request
  if ((pdu.type == SNMP::PDU_GET_NEXT) 
      && (pdu.oid.length == 1) 
      && (pdu.oid.name[0] == 0)) {
    memcpy_P(&pdu.oid, SNMP::MIB2_SYSTEM, pgm_read_byte(SNMP::MIB2_SYSTEM) + 1);
    pdu.oid.name[pdu.oid.length++] = 0;
  }

  // Match with MIB handlers
  if (!system_mib(pdu) && !arduino_mib(pdu))
    pdu.error_status = SNMP::NO_SUCH_NAME;
  
  // Send the response value
