diff --git a/html/images/icons/apps.png b/html/images/icons/apps.png
new file mode 100755
index 0000000000..851950db7c
Binary files /dev/null and b/html/images/icons/apps.png differ
diff --git a/html/pages/device.php b/html/pages/device.php
index d59ac3ea3a..fe54f2e7b8 100644
--- a/html/pages/device.php
+++ b/html/pages/device.php
@@ -65,6 +65,15 @@ if($health) {
');
}
+if(@mysql_result(mysql_query("select count(app_id) from applications WHERE device_id = '" . $device['device_id'] . "'"), 0) > '0')
+{
+ echo('
+
+
Apps
+
+');
+}
+
### This needs to die, rolled into generic sensors! (still need to implement booleans, tx/rx powers and currents)
#$cisco_sensors = mysql_result(mysql_query("SELECT count(*) FROM `entPhysical` WHERE device_id = '".$device['device_id']."' AND entSensorType != '' AND entSensorType NOT LIKE 'No%'"),0);
diff --git a/html/pages/device/applications.inc.php b/html/pages/device/applications.inc.php
new file mode 100644
index 0000000000..267643b7f1
--- /dev/null
+++ b/html/pages/device/applications.inc.php
@@ -0,0 +1,73 @@
+");
+ echo('
');
+ } else {
+ echo('
');
+ }
+ echo(" " . $type_text[$type] ."\n");
+ if ($_GET['opta'] == $type) { echo(""); }
+ $sep = " | ";
+}
+
+print_optionbar_end();
+
+if (is_file("pages/device/health/".mres($_GET['opta']).".inc.php"))
+{
+ include("pages/device/health/".mres($_GET['opta']).".inc.php");
+} else {
+ foreach ($datas as $type) {
+ if($type != "overview") {
+ $graph_title = $type_text[$type];
+ $graph_type = "device_".$type;
+ include ("includes/print-device-graph.php");
+ }
+ }
+}
+
+
+?>
diff --git a/includes/polling/applications.inc.php b/includes/polling/applications.inc.php
new file mode 100644
index 0000000000..fd33155cda
--- /dev/null
+++ b/includes/polling/applications.inc.php
@@ -0,0 +1,25 @@
+
diff --git a/includes/polling/applications/apache.inc.php b/includes/polling/applications/apache.inc.php
new file mode 100644
index 0000000000..bcb8f58cac
--- /dev/null
+++ b/includes/polling/applications/apache.inc.php
@@ -0,0 +1,51 @@
+