diff -Naur -X exclude.txt observium-orig/html/includes/graphs/device/cisco-dsp.inc.php observium/html/includes/graphs/device/cisco-dsp.inc.php
--- observium-orig/html/includes/graphs/device/cisco-dsp.inc.php	1970-01-01 10:00:00.000000000 +1000
+++ observium/html/includes/graphs/device/cisco-dsp.inc.php	2013-10-29 16:57:34.374809774 +1000
@@ -0,0 +1,32 @@
+<?php
+
+include("includes/graphs/common.inc.php");
+
+$rrd_options .= " -l 0 -E ";
+
+$rrd_filename  = $config['rrd_dir'] . "/" . $device['hostname'] . "/cisco-dsp.rrd";
+
+$rrd_options .= " COMMENT:'                            Cur   Min  Max\\n'";
+$RRDDS['totaldsp']['display']	= 'Total';
+$RRDDS['totaldsp']['desc']	= 'DSPs total              ';
+$RRDDS['totaldsp']['line']	= '#0000ee';
+$RRDDS['totaldsp']['shade']	= '#c099ff';
+$RRDDS['activedsp']['display']	= 'Active';
+$RRDDS['activedsp']['desc']	= 'DSPs in use             ';
+$RRDDS['activedsp']['line']	= '#00ee00';
+$RRDDS['activedsp']['shade']	= '#aaff99';
+
+if (file_exists($rrd_filename))
+{
+  foreach ($RRDDS as $DS => $DATA)
+  {
+    $rrd_options .= " DEF:".$DATA['display']."=".$rrd_filename.":".$DS.":AVERAGE ";
+    $rrd_options .= " AREA:".$DATA['display'].$DATA['shade'];
+    $rrd_options .= " LINE1.25:".$DATA['display'].$DATA['line'].":'".$DATA['desc']."' ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":LAST:%3.0lf ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":MIN:%3.0lf ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":MAX:%3.0lf\\\l ";
+  }
+  $graph_return   = array('descr' => 'Displays Digital Signal Processor Utilisation on Cisco Routers.', 'rrds' => array($rrd_filename));
+}
+?>
\ No newline at end of file
diff -Naur -X exclude.txt observium-orig/html/includes/graphs/device/cisco-hwmtp.inc.php observium/html/includes/graphs/device/cisco-hwmtp.inc.php
--- observium-orig/html/includes/graphs/device/cisco-hwmtp.inc.php	1970-01-01 10:00:00.000000000 +1000
+++ observium/html/includes/graphs/device/cisco-hwmtp.inc.php	2013-10-29 16:57:08.170664435 +1000
@@ -0,0 +1,32 @@
+<?php
+
+include("includes/graphs/common.inc.php");
+
+$rrd_options .= " -l 0 -E ";
+
+$rrd_filename  = $config['rrd_dir'] . "/" . $device['hostname'] . "/cisco-hwmtp.rrd";
+
+$rrd_options .= " COMMENT:'                            Cur   Min  Max\\n'";
+$RRDDS['totalmtp']['display']	= 'Total';
+$RRDDS['totalmtp']['desc']	= 'Hardware MTP total      ';
+$RRDDS['totalmtp']['line']	= '#0000ee';
+$RRDDS['totalmtp']['shade']	= '#c099ff';
+$RRDDS['activemtp']['display']	= 'Active';
+$RRDDS['activemtp']['desc']	= 'Hardware MTP in use     ';
+$RRDDS['activemtp']['line']	= '#00ee00';
+$RRDDS['activemtp']['shade']	= '#aaff99';
+
+if (file_exists($rrd_filename))
+{
+  foreach ($RRDDS as $DS => $DATA)
+  {
+    $rrd_options .= " DEF:".$DATA['display']."=".$rrd_filename.":".$DS.":AVERAGE ";
+    $rrd_options .= " AREA:".$DATA['display'].$DATA['shade'];
+    $rrd_options .= " LINE1.25:".$DATA['display'].$DATA['line'].":'".$DATA['desc']."' ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":LAST:%3.0lf ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":MIN:%3.0lf ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":MAX:%3.0lf\\\l ";
+  }
+  $graph_return   = array('descr' => 'Displays Media Termination Point Utilisation on Cisco Routers.', 'rrds' => array($rrd_filename));
+}
+?>
\ No newline at end of file
diff -Naur -X exclude.txt observium-orig/html/includes/graphs/device/cisco-pri.inc.php observium/html/includes/graphs/device/cisco-pri.inc.php
--- observium-orig/html/includes/graphs/device/cisco-pri.inc.php	1970-01-01 10:00:00.000000000 +1000
+++ observium/html/includes/graphs/device/cisco-pri.inc.php	2013-10-29 16:47:51.975580314 +1000
@@ -0,0 +1,33 @@
+<?php
+
+include("includes/graphs/common.inc.php");
+
+$rrd_options .= " -l 0 -E ";
+
+$rrd_filename  = $config['rrd_dir'] . "/" . $device['hostname'] . "/cisco-pri.rrd";
+
+$rrd_options .= " COMMENT:'                            Cur   Min  Max\\n'";
+$RRDDS['totalds0s']['display']	= 'TotalDS0s';
+$RRDDS['totalds0s']['desc']	= 'PRI Channels total      ';
+$RRDDS['totalds0s']['line']	= '#0000ee';
+$RRDDS['totalds0s']['shade']	= '#c099ff';
+$RRDDS['activeds0s']['display']	= 'ActiveDS0s';
+$RRDDS['activeds0s']['desc']	= 'PRI Channels in use     ';
+$RRDDS['activeds0s']['line']	= '#00ee00';
+$RRDDS['activeds0s']['shade']	= '#aaff99';
+
+if (file_exists($rrd_filename))
+{
+  foreach ($RRDDS as $DS => $DATA)
+  {
+    $rrd_options .= " DEF:".$DATA['display']."=".$rrd_filename.":".$DS.":AVERAGE ";
+    $rrd_options .= " AREA:".$DATA['display']. $DATA['shade'];
+    $rrd_options .= " LINE1.25:".$DATA['display'].$DATA['line'].":'".$DATA['desc']."' ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":LAST:%3.0lf ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":MIN:%3.0lf ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":MAX:%3.0lf\\\l ";
+  }
+  $graph_return   = array('descr' => 'Displays Utilisation for PRI (E1/T1) Interfaces on Cisco Routers.', 'rrds' => array($rrd_filename));
+
+}
+?>
\ No newline at end of file
diff -Naur -X exclude.txt observium-orig/html/includes/graphs/device/cisco-xcode.inc.php observium/html/includes/graphs/device/cisco-xcode.inc.php
--- observium-orig/html/includes/graphs/device/cisco-xcode.inc.php	1970-01-01 10:00:00.000000000 +1000
+++ observium/html/includes/graphs/device/cisco-xcode.inc.php	2013-10-30 11:05:34.573365124 +1000
@@ -0,0 +1,32 @@
+<?php
+
+include("includes/graphs/common.inc.php");
+
+$rrd_options .= " -l 0 -E ";
+
+$rrd_filename  = $config['rrd_dir'] . "/" . $device['hostname'] . "/cisco-xcode.rrd";
+
+$rrd_options .= " COMMENT:'                                Cur   Min  Max\\n'";
+$RRDDS['totalxcode']['display']		= 'Total';
+$RRDDS['totalxcode']['desc']		= 'Transcoder Resources Total  ';
+$RRDDS['totalxcode']['line']		= '#0000ee';
+$RRDDS['totalxcode']['shade']		= '#c099ff';
+$RRDDS['activexcode']['display']	= 'Active';
+$RRDDS['activexcode']['desc']		= 'Transcoder Resources in use ';
+$RRDDS['activexcode']['line']		= '#00ee00';
+$RRDDS['activexcode']['shade']		= '#aaff99';
+
+if (file_exists($rrd_filename))
+{
+  foreach ($RRDDS as $DS => $DATA)
+  {
+    $rrd_options .= " DEF:".$DATA['display']."=".$rrd_filename.":".$DS.":AVERAGE ";
+    $rrd_options .= " AREA:".$DATA['display'].$DATA['shade'];
+    $rrd_options .= " LINE1.25:".$DATA['display'].$DATA['line'].":'".$DATA['desc']."' ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":LAST:%3.0lf ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":MIN:%3.0lf ";
+    $rrd_options .= " GPRINT:".$DATA['display'].":MAX:%3.0lf\\\l ";
+  }
+  $graph_return   = array('descr' => 'Displays Transcoder Utilisation on Cisco Routers.', 'rrds' => array($rrd_filename));
+}
+?>
\ No newline at end of file
diff -Naur -X exclude.txt observium-orig/includes/defaults.inc.php observium/includes/defaults.inc.php
--- observium-orig/includes/defaults.inc.php	2013-10-01 23:47:08.000000000 +1000
+++ observium/includes/defaults.inc.php	2013-10-29 16:02:29.048481476 +1000
@@ -655,6 +655,10 @@
 $config['poller_modules']['entity-physical']              = 1;
 $config['poller_modules']['applications']                 = 1;
 $config['poller_modules']['fdb-table']                    = 1;
+$config['poller_modules']['cisco-pri']                    = 1;
+$config['poller_modules']['cisco-dsp']                    = 1;
+$config['poller_modules']['cisco-hwmtp']                  = 1;
+$config['poller_modules']['cisco-xcode']                  = 1;
 
 // List of discovery modules. Need to be in this array to be
 // considered for execution.
diff -Naur -X exclude.txt observium-orig/includes/definitions/graphtypes.inc.php observium/includes/definitions/graphtypes.inc.php
--- observium-orig/includes/definitions/graphtypes.inc.php	2013-09-26 15:36:31.000000000 +1000
+++ observium/includes/definitions/graphtypes.inc.php	2013-10-29 16:22:41.607205246 +1000
@@ -2,7 +2,7 @@
 
 // Graph sections is used to categorize /device/graphs/
 
-$config['graph_sections'] = array('general', 'system', 'firewall', 'netstats', 'wireless', 'storage', 'vpdn', 'load balancer', 'appliance', 'poller', 'netapp');
+$config['graph_sections'] = array('general', 'system', 'firewall', 'netstats', 'wireless', 'storage', 'vpdn', 'load balancer', 'appliance', 'poller', 'netapp', 'voice');
 
 // Graph types
 
@@ -42,6 +42,22 @@
 $config['graph_types']['device']['agent']['order'] = '0';
 $config['graph_types']['device']['agent']['descr'] = 'Agent Execution Time';
 
+$config['graph_types']['device']['cisco-pri']['section']  = 'voice';
+$config['graph_types']['device']['cisco-pri']['order']    = '0';
+$config['graph_types']['device']['cisco-pri']['descr']    = 'PRI Utilisation';
+
+$config['graph_types']['device']['cisco-dsp']['section']  = 'voice';
+$config['graph_types']['device']['cisco-dsp']['order']    = '0';
+$config['graph_types']['device']['cisco-dsp']['descr']    = 'DSP Utilisation';
+
+$config['graph_types']['device']['cisco-hwmtp']['section']  = 'voice';
+$config['graph_types']['device']['cisco-hwmtp']['order']    = '0';
+$config['graph_types']['device']['cisco-hwmtp']['descr']    = 'Hardware MTP Utilisation';
+
+$config['graph_types']['device']['cisco-xcode']['section']  = 'voice';
+$config['graph_types']['device']['cisco-xcode']['order']    = '0';
+$config['graph_types']['device']['cisco-xcode']['descr']    = 'Transcoder Utilisation';
+
 $config['graph_types']['device']['netstat_arista_sw_ip'] = array(
  'section' => 'netstats', 'order' => '0', 'descr' => "Software forwarded IPv4 Statistics");
 $config['graph_types']['device']['netstat_arista_sw_ip_frag'] = array(
diff -Naur -X exclude.txt observium-orig/includes/polling/cisco-dsp.inc.php observium/includes/polling/cisco-dsp.inc.php
--- observium-orig/includes/polling/cisco-dsp.inc.php	1970-01-01 10:00:00.000000000 +1000
+++ observium/includes/polling/cisco-dsp.inc.php	2013-11-07 10:59:04.295632870 +1000
@@ -0,0 +1,42 @@
+<?php
+
+# Cisco DSP - Aaron Daniels <aaron@daniels.id.au>
+# Gathers DSP stats from cisco voice gateways.
+#
+
+if ($device['os_group'] == "cisco")
+{
+  # Total - add the totals of each DSP together.
+  $dsptotal = 0;
+  
+  foreach ( snmpwalk_cache_oid_num($device, "1.3.6.1.4.1.9.9.86.1.2.1.1.6", NULL) as $key => $value)
+  {
+    $dsptotal += $value[''];
+  }
+
+  # Get currently in use.
+  $dspactive = 0;
+  foreach ( snmpwalk_cache_oid_num($device, "1.3.6.1.4.1.9.9.86.1.2.1.1.7", NULL) as $key => $value)
+  {
+    $dspactive += $value[''];
+  }
+
+  if (isset($dsptotal) && $dsptotal != "")
+  {
+    $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("cisco-dsp.rrd");
+
+      if (!file_exists($rrd_filename))
+      {
+        rrdtool_create($rrd_filename, " DS:totaldsp:GAUGE:600:0:U DS:activedsp:GAUGE:600:0:U" . $config['rrd_rra']);
+      }
+
+      rrdtool_update($rrd_filename, "N:" . $dsptotal . ":" . $dspactive);
+
+      $graphs['cisco-dsp']   = TRUE;
+
+      echo(" Cisco DSP ");
+  }
+  unset($dsptotal, $dspactive, $rrd_filename);
+}
+
+?>
diff -Naur -X exclude.txt observium-orig/includes/polling/cisco-hwmtp.inc.php observium/includes/polling/cisco-hwmtp.inc.php
--- observium-orig/includes/polling/cisco-hwmtp.inc.php	1970-01-01 10:00:00.000000000 +1000
+++ observium/includes/polling/cisco-hwmtp.inc.php	2013-11-07 11:00:25.176081324 +1000
@@ -0,0 +1,38 @@
+<?php
+
+# Cisco Hardware MTP - Aaron Daniels <aaron@daniels.id.au>
+# Gathers Hardware MTP stats from cisco voice gateways.
+#
+
+if ($device['os_group'] == "cisco")
+{
+  # Total
+  $mtptotal = snmpwalk_cache_oid_num($device, "1.3.6.1.4.1.9.9.86.1.6.4.1.3", NULL);
+  $mtptotal = $mtptotal['1.3.6.1.4.1.9.9.86.1.6.4.1.3'][''];
+      
+  # Available
+  $mtpavail = snmpwalk_cache_oid_num($device, "1.3.6.1.4.1.9.9.86.1.6.4.1.4", NULL);
+  $mtpavail = $mtpavail['1.3.6.1.4.1.9.9.86.1.6.4.1.4'][''];
+
+  if (isset($mtptotal) && $mtptotal != "")
+  {
+    # Work out active.
+    $mtpactive = $mtptotal - $mtpavail;
+
+    $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("cisco-hwmtp.rrd");
+
+    if (!file_exists($rrd_filename))
+    {
+      rrdtool_create($rrd_filename, " DS:totalmtp:GAUGE:600:0:U DS:activemtp:GAUGE:600:0:U" . $config['rrd_rra']);
+    }
+
+    rrdtool_update($rrd_filename, "N:" . $mtptotal . ":" . $mtpactive);
+
+    $graphs['cisco-hwmtp']   = TRUE;
+
+    echo(" Cisco HW MTP ");
+  }
+  unset($mtptotal, $mtpavail, $mtpactive, $rrd_filename);
+}
+
+?>
diff -Naur -X exclude.txt observium-orig/includes/polling/cisco-pri.inc.php observium/includes/polling/cisco-pri.inc.php
--- observium-orig/includes/polling/cisco-pri.inc.php	1970-01-01 10:00:00.000000000 +1000
+++ observium/includes/polling/cisco-pri.inc.php	2013-11-07 10:35:24.603760527 +1000
@@ -0,0 +1,36 @@
+<?php
+
+# Cisco PRI - Aaron Daniels <aaron@daniels.id.au>
+# Gathers PRI stats from cisco voice gateways.
+#
+
+if ($device['os_group'] == "cisco")
+{
+  # Total - Count all ports of type 'ds0'
+  # 
+  # TODO: Need to consider partial PRI. Find an OID that only counts timeslots in-service.
+  # 
+  $ds0total = count(snmpwalk_cache_oid_num($device, "1.3.6.1.2.1.10.20.1.2.1.1.2", NULL));
+
+  # Get currently in use.
+  $ds0active = snmpwalk_cache_oid_num($device, "1.3.6.1.4.1.9.10.19.1.1.4.0", NULL);
+  $ds0active = $ds0active['1.3.6.1.4.1.9.10.19.1.1.4.0'][''];
+
+  if (isset($ds0active) && $ds0active != "")
+  {
+    $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("cisco-pri.rrd");
+
+      if (!file_exists($rrd_filename))
+      {
+        rrdtool_create($rrd_filename, " DS:totalds0s:GAUGE:600:0:U DS:activeds0s:GAUGE:600:0:U" . $config['rrd_rra']);
+      }
+
+      rrdtool_update($rrd_filename, "N:" . $ds0total . ":" . $ds0active);
+
+      $graphs['cisco-pri']   = TRUE;
+
+      echo(" Cisco PRI ");
+  }
+  unset($ds0total, $ds0active, $rrd_filename);
+}
+?>
diff -Naur -X exclude.txt observium-orig/includes/polling/cisco-xcode.inc.php observium/includes/polling/cisco-xcode.inc.php
--- observium-orig/includes/polling/cisco-xcode.inc.php	1970-01-01 10:00:00.000000000 +1000
+++ observium/includes/polling/cisco-xcode.inc.php	2013-11-07 11:00:19.016047462 +1000
@@ -0,0 +1,36 @@
+<?php
+
+# Cisco Transcoder - Aaron Daniels <aaron@daniels.id.au>
+# Gathers Transcoder stats from cisco voice gateways.
+#
+
+if ($device['os_group'] == "cisco")
+{
+  # Total
+  $xcodetotal = snmpwalk_cache_oid_num($device, "1.3.6.1.4.1.9.9.86.1.7.1.0", NULL);
+  $xcodetotal = $xcodetotal['1.3.6.1.4.1.9.9.86.1.7.1.0'][''];
+      
+  # Available
+  $xcodeavail = snmpwalk_cache_oid_num($device, "1.3.6.1.4.1.9.9.86.1.7.2.0", NULL);
+  $xcodeavail = $xcodeavail['1.3.6.1.4.1.9.9.86.1.7.2.0'][''];
+
+  if (isset($xcodetotal) && $xcodetotal != "")
+  {
+    # Work out active.
+    $xcodeactive = $xcodetotal - $xcodeavail;
+    $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("cisco-xcode.rrd");
+
+    if (!file_exists($rrd_filename))
+    {
+      rrdtool_create($rrd_filename, " DS:totalxcode:GAUGE:600:0:U DS:activexcode:GAUGE:600:0:U" . $config['rrd_rra']);
+    }
+
+    rrdtool_update($rrd_filename, "N:" . $xcodetotal . ":" . $xcodeactive);
+
+    $graphs['cisco-xcode']   = TRUE;
+
+    echo(" Cisco Transcoder ");
+  }
+  unset($xcodetotal, $xcodeavail, $xcodeactive, $rrd_filename);
+}
+?>
