Index: html/pages/device/loadbalancer/lb_virtuals.inc.php
===================================================================
--- html/pages/device/loadbalancer/lb_virtuals.inc.php	(revision 7328)
+++ html/pages/device/loadbalancer/lb_virtuals.inc.php	(working copy)
@@ -115,6 +115,7 @@
       </td>
       </tr>");
     }
+    unset($pool, $virt_type, $virt_class, $virt_state, $rules);
   }
 
   echo("</table>");
@@ -275,6 +276,7 @@
     echo('</tr>');
 
     $i++;
+    unset($pool, $virt_type, $virt_class, $virt_state, $rules);
   }
 
   echo('</table>');
Index: includes/polling/loadbalancer/f5-bigip-local-mib.inc.php
===================================================================
--- includes/polling/loadbalancer/f5-bigip-local-mib.inc.php	(revision 7328)
+++ includes/polling/loadbalancer/f5-bigip-local-mib.inc.php	(working copy)
@@ -14,6 +14,7 @@
 /// Virtuals
 ## F5-BIGIP-LOCAL-MIB::ltmVirtualServNumber.0 = INTEGER: 155
 ## F5-BIGIP-LOCAL-MIB::ltmVirtualServName."/Common/dns" = STRING: /Common/dns
+## F5-BIGIP-LOCAL-MIB::ltmVirtualServAddrType."/Common/dns" = INTEGER: ipv4(1)
 ## F5-BIGIP-LOCAL-MIB::ltmVirtualServAddr."/Common/dns" = Hex-STRING: AC 19 AC 35
 ## F5-BIGIP-LOCAL-MIB::ltmVirtualServWildmask."/Common/dns" = Hex-STRING: FF FF FF FF
 ## F5-BIGIP-LOCAL-MIB::ltmVirtualServPort."/Common/dns" = Gauge32: 53
@@ -65,14 +66,16 @@
 
 // Attributes
 $virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServName", NULL, $mib, mib_dirs('f5'));
+$virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServVaName", NULL, $mib, mib_dirs('f5'));
+$virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServAddrType", $virts, $mib, mib_dirs('f5'), OBS_SNMP_ALL_ENUM);
 $virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServAddr", $virts, $mib, mib_dirs('f5'));
 $virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServWildmask", $virts, $mib, mib_dirs('f5'));
 $virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServPort", $virts, $mib, mib_dirs('f5'));
 $virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServIpProto", $virts, $mib, mib_dirs('f5'));
-$virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServEnabled", $virts, $mib, mib_dirs('f5'));
-$virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServType", $virts, $mib, mib_dirs('f5'));
+$virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServEnabled", $virts, $mib, mib_dirs('f5'), OBS_SNMP_ALL_ENUM);
+$virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServType", $virts, $mib, mib_dirs('f5'), OBS_SNMP_ALL_ENUM);
 $virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServDefaultPool", $virts, $mib, mib_dirs('f5'));
-$virts = snmpwalk_cache_multi_oid($device, "ltmVsStatusAvailState", $virts, $mib, mib_dirs('f5'));
+$virts = snmpwalk_cache_multi_oid($device, "ltmVsStatusAvailState", $virts, $mib, mib_dirs('f5'), OBS_SNMP_ALL_ENUM);
 // Stats
 $virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServStatClientBytesIn", $virts, $mib, mib_dirs('f5'));
 $virts = snmpwalk_cache_multi_oid($device, "ltmVirtualServStatClientBytesOut", $virts, $mib, mib_dirs('f5'));
@@ -97,28 +100,50 @@
 
 foreach ($virts as $name => $virt)
 {
-  $addr = hex2ip($virt['ltmVirtualServAddr']);
-
   switch ($virt[ltmVirtualServIpProto])
   {
     case 0:
       $proto = "IP";
       break;
+    case 1:
+      $proto = "ICMP";
+      break;
     case 6:
       $proto = "TCP";
       break;
     case 17:
       $proto = "UDP";
       break;
+    case 58:
+      $proto = "IPv6-ICMP";
   }
 
-  if (strpos($virt['addr'],":"))
+  $addr = hex2ip($virt['ltmVirtualServAddr']);
+  switch ($virt[ltmVirtualServAddrType])
   {
-      echo(str_pad($name, 45) . " | " . str_pad($addr.".".$virt['ltmVirtualServPort'],25)."/".$proto . " - ");
-  } else {
-      echo(str_pad($name, 45) . " | " . str_pad($addr.":".$virt['ltmVirtualServPort'],25)."/".$proto . " - ");
+    case 3: // ipv4z
+      $tmp = explode("%",$virt['ltmVirtualServVaName']);
+      if (count($tmp) == 2) {
+        $rd = "%" . $tmp[1];
+      }
+      $addr = hex2ip(substr($virt['ltmVirtualServAddr'],0,11));  // 'AA BB CC DD XX XX XX XX'
+    case 1: // ipv4, fallthrough from ipv4z
+      $sep = ":";
+      break;
+    case 4: // ipv6z
+      $tmp = explode("%",$virt['ltmVirtualServVaName']);
+      if (count($tmp) == 2) {
+        $rd = "%" . $tmp[1];
+      }
+    case 2: // ipv6, fallthrough from ipv6z
+      $sep = ".";
+      break;
   }
+  $addr = $addr . $rd;
 
+  echo(str_pad($name, 45) . " | " . str_pad($addr.$sep.$virt['ltmVirtualServPort'],25)."/".$proto . " - ");
+  $mask = hex2ip($virt['ltmVirtualServWildmask']);
+
   if (is_array($virts_db[$name]))
   {
     echo("Virtual exists\n");
@@ -133,7 +158,7 @@
     if ( ! $virts_db[virt_ip])
     {
       dbUpdate(array('virt_ip' => $addr,
-                     'virt_mask' => $virt['ltmVirtualServMask'],
+                     'virt_mask' => $mask,
                      'virt_port' => $virt[ltmVirtualServPort],
                      'virt_proto' => $proto,
                      'virt_type' => $virt['ltmVirtualServType'],
@@ -181,6 +206,8 @@
 
   if (!file_exists($rrd_file)) { rrdtool_create($device, $rrd_file, $rrd_create); }
   rrdtool_update($device, $rrd_file, $rrdupdate);
+
+  unset($name, $addr, $mask, $proto, $rd, $sep, $tmp);
 }
 
 if ($debug) { print_r($virts_exist); }
Index: includes/snmp.inc.php
===================================================================
--- includes/snmp.inc.php	(revision 7328)
+++ includes/snmp.inc.php	(working copy)
@@ -1053,6 +1053,7 @@
   }
   $output = "QUs";
   if (is_flag_set(OBS_SNMP_NUMERIC, $flags)) { $output .= "b"; }
+  if (is_flag_set(OBS_SNMP_ENUM, $flags)) { $output .= "e"; }
 
   $data = snmp_walk($device, $oid, "-O$output", $mib, $mibdir, $flags);
   foreach (explode("\n", $data) as $entry)
Index: includes/definitions.inc.php
===================================================================
--- includes/definitions.inc.php	(revision 7328)
+++ includes/definitions.inc.php	(working copy)
@@ -33,10 +33,11 @@
 // Bits 4-7 snmp flags
 define('OBS_SNMP_NUMERIC',  16); // Use numeric index
 define('OBS_SNMP_CONCAT',   32); // Concatinate multiline snmp variable
+define('OBS_SNMP_ENUM',     64); // Don't enumerate SNMP values
 //define('OBS_SNMP_ALL',      OBS_QUOTES_TRIM | OBS_QUOTES_STRIP | OBS_SNMP_CONCAT); // Set of common snmp options
 define('OBS_SNMP_ALL',      OBS_QUOTES_TRIM | OBS_QUOTES_STRIP); // Set of common snmp options
+define('OBS_SNMP_ALL_ENUM', OBS_SNMP_ALL | OBS_SNMP_ENUM);       // Set of common snmp options without enumerating values
 define('OBS_SNMP_ALL_NUMERIC', OBS_SNMP_ALL | OBS_SNMP_NUMERIC); // Set of common snmp options with numeric indexes
-#define('OBS_',              64); // Reserved
 #define('OBS_',             128); // Reserved
 
 // Bits 8-11 network flags
