diff -urN observium/includes/defaults.inc.php observium.new/includes/defaults.inc.php
--- observium/includes/defaults.inc.php	2013-07-19 16:34:05.000000000 +0200
+++ observium.new/includes/defaults.inc.php	2013-07-19 16:38:18.000000000 +0200
@@ -538,6 +538,9 @@
 // Unix Agent settings
 $config['unix-agent']['port'] = 36602; // Default agent port
 
+// Munin Node settings
+$config['munin-node']['port'] = 4949; // Default Munin Node port
+
 // Hardcoded ASN descriptions
 $config['astext'][65332] = "Cymru FullBogon Feed";
 $config['astext'][65333] = "Cymru Bogon Feed";
@@ -603,6 +606,7 @@
 // List of poller modules. Need to be in the array to be
 // considered for execution.
 
+$config['poller_modules']['munin-node']                   = 0;
 $config['poller_modules']['unix-agent']                   = 0;
 $config['poller_modules']['system']                       = 1;
 $config['poller_modules']['os']                           = 1;
diff -urN observium/includes/polling/munin-node.inc.php observium.new/includes/polling/munin-node.inc.php
--- observium/includes/polling/munin-node.inc.php	1970-01-01 01:00:00.000000000 +0100
+++ observium.new/includes/polling/munin-node.inc.php	2013-07-19 16:31:14.000000000 +0200
@@ -0,0 +1,110 @@
+<?php
+
+global $debug;
+
+if ($device['os_group'] == "unix")
+{
+  echo("Munin Node: ");
+
+  // FIXME - this should be overridable in database
+  $node_port = $config['munin-node']['port'];
+
+  // Try Official port
+  $node_start = utime();
+  $node_socket = "tcp://".$device['hostname'].":".$node_port;
+  $node = @stream_socket_client($node_socket, $errno, $errstr, 10);
+
+  if (!$node)
+  {
+    echo("Connection to Munin Node on ".$node_socket." failed. ERROR: ".$errno." ".$errstr."\n");
+    logfile("Connection to Munin Node on ".$node_socket." failed. ERROR: ".$errno." ".$errstr);
+
+    // Try check_mk port if the official one doesn't work.
+    $node_port = "4949";
+    $node_start = utime();
+    $node_socket = "tcp://".$device['hostname'].":".$node_port;
+    $node = @stream_socket_client($node_socket, $errno, $errstr, 10);
+
+    if (!$node)
+    {
+      echo("Connection to Munin Node on ".$node_socket." failed. ERROR: ".$errno." ".$errstr."\n");
+      logfile("Connection to Munin Node on ".$node_socket." failed. ERROR: ".$errno." ".$errstr);
+    } else {
+      $greeting = fgets($node);
+    }
+  } else {
+    $greeting = fgets($node);
+  }
+
+  // Valid Munin Node initiates session
+  // by sending the greeting message
+  if (!$greeting || !preg_match("/\#.*(?:lrrd|munin) (?:client|node) at (\S+)/", $greeting))
+  {
+    echo("Got unknown reply from Munin Node ".$device['hostname']."\n");
+    logfile("Got unknown reply from Munin Node ".$device['hostname']);
+  } else {
+    // First, we need the list of plugins on this node
+    fputs($node, "list\n");
+    $munin_plugins = fgets($node);
+    // Can't go on without the list
+    if (!$munin_plugins)
+    {
+      echo("Failed to retrieve list of plugins from Munin Node ".$device['hostname']."\n");
+      logfile("Failed to retrieve list of plugins from Munin Node ".$device['hostname']);
+    } else {
+      // Now we can poll plugins one by one
+      foreach (explode(" ", trim($munin_plugins)) as $munin_plugin)
+      {
+        if (!empty($munin_plugin))
+        {
+          $data = "";
+          // Request plugin data
+          fputs($node, "fetch ".$munin_plugin."\n");
+          // Plugin returns a set of AV pairs, each on a separate line,
+          // ending its data set with a single "." on a separate line
+          while (($line = fgets($node)) && !empty($line) && !preg_match("/^\.$/", $line))
+          {
+            // Append data AV pair to the data set
+            $data .= $line;
+          }
+          // Request plugin config
+          fputs($node, "config ".$munin_plugin."\n");
+          // A set of AV pairs is returned in the same manner as before
+          while (($line = fgets($node)) && !empty($line) && !preg_match("/^\.$/", $line))
+          {
+            // Append config AV pair to the data set
+            $data .= $line;
+          }
+          // Data set for this plugin is done
+          $agent_data['munin'][$munin_plugin] = trim($data);
+        }
+      }
+      // Gracefully terminate session
+      fputs($node, "quit\n");
+      // Determine how long it took to collect data
+      $node_end = utime();
+      $node_time = round(($node_end - $node_start) * 1000);
+      echo("execution time: ".$node_time."ms");
+      // Process collected Munin Node data
+      if (is_array($agent_data['munin']) && $agent_data['munin'] > 0)
+      {
+        // Dump collected data if debug is on
+        if ($debug) { print_r($agent_data); }
+        // Leave data to unix-agent's munin code
+        include("unix-agent/munin-plugins.inc.php");
+      }
+
+//      $node_rrd = $config['rrd_dir'] . "/" . $device['hostname'] . "/agent.rrd";
+//      if (!is_file($node_rrd))
+//      {
+//        rrdtool_create ($node_rrd, "DS:time:GAUGE:600:0:U ".$config['rrd_rra']);
+//      }
+//      rrdtool_update($node_rrd, "N:".$node_time);
+//      $graphs['agent'] = TRUE;
+    }
+  }
+  // Explicitly close socket to the node
+  fclose($node);
+}
+
+?>
