diff --git a/html/includes/graphs/application/memcached_data.inc.php b/html/includes/graphs/application/memcached_data.inc.php
new file mode 100644
index 000000000..62677a672
--- /dev/null
+++ b/html/includes/graphs/application/memcached_data.inc.php
@@ -0,0 +1,34 @@
+ array('descr' => 'Capacity', 'colour' => '555555'),
+ 'bytes' => array('descr' => 'Used', 'colour' => 'cc0000', 'areacolour' => 'ff999955'),
+ );
+
+$i = 0;
+
+if (is_file($rrd_filename))
+{
+ foreach ($array as $ds => $vars)
+ {
+ $rrd_list[$i]['filename'] = $rrd_filename;
+ $rrd_list[$i]['descr'] = $vars['descr'];
+ $rrd_list[$i]['ds'] = $ds;
+ $rrd_list[$i]['colour'] = $vars['colour'];
+ if(!empty($vars['areacolour'])) { $rrd_list[$i]['areacolour'] = $vars['areacolour']; }
+ $i++;
+ }
+} else {
+ echo("file missing: $file");
+}
+
+include("includes/graphs/generic_multi_line.inc.php");
+
+?>
diff --git a/html/includes/graphs/application/memcached_items.inc.php b/html/includes/graphs/application/memcached_items.inc.php
new file mode 100644
index 000000000..2e19cbb2a
--- /dev/null
+++ b/html/includes/graphs/application/memcached_items.inc.php
@@ -0,0 +1,33 @@
+ array('descr' => 'Items', 'colour' => '555555'),
+ );
+
+$i = 0;
+
+if (is_file($rrd_filename))
+{
+ foreach ($array as $ds => $vars)
+ {
+ $rrd_list[$i]['filename'] = $rrd_filename;
+ $rrd_list[$i]['descr'] = $vars['descr'];
+ $rrd_list[$i]['ds'] = $ds;
+ $rrd_list[$i]['colour'] = $vars['colour'];
+ if(!empty($vars['areacolour'])) { $rrd_list[$i]['areacolour'] = $vars['areacolour']; }
+ $i++;
+ }
+} else {
+ echo("file missing: $file");
+}
+
+include("includes/graphs/generic_multi_line.inc.php");
+
+?>
diff --git a/html/includes/graphs/application/memcached_threads.inc.php b/html/includes/graphs/application/memcached_threads.inc.php
new file mode 100644
index 000000000..f1023b0ca
--- /dev/null
+++ b/html/includes/graphs/application/memcached_threads.inc.php
@@ -0,0 +1,20 @@
+
diff --git a/html/includes/graphs/application/mysql_status.inc.php b/html/includes/graphs/application/mysql_status.inc.php
new file mode 100644
index 000000000..ffbb8c176
--- /dev/null
+++ b/html/includes/graphs/application/mysql_status.inc.php
@@ -0,0 +1,51 @@
+ 'd2',
+ 'State_copying_to_tmp_table' => 'd3',
+ 'State_end' => 'd4',
+ 'State_freeing_items' => 'd5',
+ 'State_init' => 'd6',
+ 'State_locked' => 'd7',
+ 'State_login' => 'd8',
+ 'State_preparing' => 'd9',
+ 'State_reading_from_net' => 'da',
+ 'State_sending_data' => 'db',
+ 'State_sorting_result' => 'dc',
+ 'State_statistics' => 'dd',
+ 'State_updating' => 'de',
+ 'State_writing_to_net' => 'df',
+ 'State_none' => 'dg',
+ 'State_other' => 'dh'
+);
+
+$i = 0;
+if (is_file($rrd_filename))
+{
+ foreach ($array as $vars => $ds)
+ {
+ $rrd_list[$i]['filename'] = $rrd_filename;
+ if (is_array($vars))
+ {
+ $rrd_list[$i]['descr'] = $vars['descr'];
+ } else {
+ $rrd_list[$i]['descr'] = $vars;
+ }
+ $rrd_list[$i]['descr'] = str_replace("_", " ", $rrd_list[$i]['descr']);
+ $rrd_list[$i]['descr'] = str_replace("State ", "", $rrd_list[$i]['descr']);
+ $rrd_list[$i]['ds'] = $ds;
+ $i++;
+ }
+} else { echo("file missing: $file"); }
+
+$colours = "mixed";
+$nototal = 1;
+$unit_text = "activity";
+
+include("includes/graphs/generic_multi_simplex_seperated.inc.php");
+
+?>
diff --git a/html/includes/graphs/device/agent.inc.php b/html/includes/graphs/device/agent.inc.php
new file mode 100644
index 000000000..c930b0901
--- /dev/null
+++ b/html/includes/graphs/device/agent.inc.php
@@ -0,0 +1,27 @@
+
diff --git a/html/includes/graphs/generic_multi_data_separated.inc.php b/html/includes/graphs/generic_multi_data_separated.inc.php
new file mode 100644
index 000000000..57e422e9c
--- /dev/null
+++ b/html/includes/graphs/generic_multi_data_separated.inc.php
@@ -0,0 +1,120 @@
+ "500")
+{
+ $descr_len=18;
+} else {
+ $descr_len=8;
+ $descr_len += round(($width - 260) / 9.5);
+}
+
+$unit_text = "Bits/sec";
+
+if($width > "500")
+{
+ $rrd_options .= " COMMENT:'".substr(str_pad($unit_text, $descr_len+5),0,$descr_len+5)." Current Average Maximum '";
+ if (!$nototal) { $rrd_options .= " COMMENT:'Total '"; }
+ $rrd_options .= " COMMENT:'\l'";
+} else {
+ $rrd_options .= " COMMENT:'".substr(str_pad($unit_text, $descr_len+5),0,$descr_len+5)." Now Ave Max\l'";
+
+}
+
+if(!isset($multiplier)) { $multiplier = "8"; }
+
+foreach ($rrd_list as $rrd)
+{
+ if (!$config['graph_colours'][$colours_in][$iter] || !$config['graph_colours'][$colours_out][$iter]) { $iter = 0; }
+
+ $colour_in=$config['graph_colours'][$colours_in][$iter];
+ $colour_out=$config['graph_colours'][$colours_out][$iter];
+
+ if (isset($rrd['descr_in']))
+ {
+ $descr = str_replace(":", "\:", substr(str_pad($rrd['descr_in'], $descr_len),0,$descr_len)) . " In";
+ } else {
+ $descr = str_replace(":", "\:", substr(str_pad($rrd['descr'], $descr_len),0,$descr_len)) . " In";
+ }
+ $descr_out = str_replace(":", "\:", substr(str_pad($rrd['descr_out'], $descr_len),0,$descr_len)). " Out";
+
+ $descr = str_replace("'", "", $descr);
+ $descr_out = str_replace("'", "", $descr_out);
+
+ $rrd_options .= " DEF:".$in.$i."=".$rrd['filename'].":".$ds_in.":AVERAGE ";
+ $rrd_options .= " DEF:".$out.$i."=".$rrd['filename'].":".$ds_out.":AVERAGE ";
+ $rrd_options .= " CDEF:inB".$i."=in".$i.",$multiplier,* ";
+ $rrd_options .= " CDEF:outB".$i."=out".$i.",$multiplier,*";
+ $rrd_options .= " CDEF:outB".$i."_neg=outB".$i.",-1,*";
+ $rrd_options .= " CDEF:octets".$i."=inB".$i.",outB".$i.",+";
+
+ if (!$args['nototal'])
+ {
+
+ $in_thing .= $seperator . $in . $i . ",UN,0," . $in . $i . ",IF";
+ $out_thing .= $seperator . $out . $i . ",UN,0," . $out . $i . ",IF";
+ $pluses .= $plus;
+ $seperator = ",";
+ $plus = ",+";
+
+ $rrd_options .= " VDEF:totin".$i."=inB".$i.",TOTAL";
+ $rrd_options .= " VDEF:totout".$i."=outB".$i.",TOTAL";
+ $rrd_options .= " VDEF:tot".$i."=octets".$i.",TOTAL";
+ }
+
+ if ($i) { $stack="STACK"; }
+
+ $rrd_options .= " AREA:inB".$i."#" . $colour_in . ":'" . $descr . "':$stack";
+ $rrd_options .= " GPRINT:inB".$i.":LAST:%6.2lf%s$units";
+ $rrd_options .= " GPRINT:inB".$i.":AVERAGE:%6.2lf%s$units";
+ $rrd_options .= " GPRINT:inB".$i.":MAX:%6.2lf%s$units\l";
+
+ if (!$nototal) { $rrd_options .= " GPRINT:totin".$i.":%6.2lf%s$total_units"; }
+
+ $rrd_options .= " 'HRULE:0#" . $colour_out.":".$descr_out."'";
+ $rrd_optionsb .= " 'AREA:outB".$i."_neg#" . $colour_out . "::$stack'";
+ $rrd_options .= " GPRINT:outB".$i.":LAST:%6.2lf%s$units";
+ $rrd_options .= " GPRINT:outB".$i.":AVERAGE:%6.2lf%s$units";
+ $rrd_options .= " GPRINT:outB".$i.":MAX:%6.2lf%s$units\l";
+
+ if (!$nototal) { $rrd_options .= " GPRINT:totout".$i.":%6.2lf%s$total_units"; }
+
+ $rrd_options .= " 'COMMENT:\l'";
+ $i++; $iter++;
+}
+
+if ($custom_graph) { $rrd_options .= $custom_graph; }
+
+if(!$nototal)
+{
+ $rrd_options .= " CDEF:".$in."octets=" . $in_thing . $pluses;
+ $rrd_options .= " CDEF:".$out."octets=" . $out_thing . $pluses;
+ $rrd_options .= " CDEF:octets=inoctets,outoctets,+";
+ $rrd_options .= " CDEF:doutoctets=outoctets,-1,*";
+ $rrd_options .= " CDEF:inbits=inoctets,8,*";
+ $rrd_options .= " CDEF:outbits=outoctets,8,*";
+ $rrd_options .= " CDEF:doutbits=doutoctets,8,*";
+
+ $rrd_options .= " VDEF:95thin=inbits,95,PERCENT";
+ $rrd_options .= " VDEF:95thout=outbits,95,PERCENT";
+ $rrd_options .= " VDEF:d95thout=doutbits,5,PERCENT";
+
+ $rrd_options .= " VDEF:totin=inoctets,TOTAL";
+ $rrd_options .= " VDEF:totout=outoctets,TOTAL";
+ $rrd_options .= " VDEF:tot=octets,TOTAL";
+
+# $rrd_options .= " AREA:totin#" . $colour_in . ":'" . $descr . "':$stack";
+# $rrd_options .= " GPRINT:totin:LAST:%6.2lf%s$units";
+# $rrd_options .= " GPRINT:totin:AVERAGE:%6.2lf%s$units";
+# $rrd_options .= " GPRINT:totin:MAX:%6.2lf%s$units\l";
+
+
+}
+
+
+$rrd_options .= $rrd_optionsb;
+$rrd_options .= " HRULE:0#999999";
+
+?>