diff --git a/collectd/_common.sls b/collectd/_common.sls
deleted file mode 100644
index 7725520..0000000
--- a/collectd/_common.sls
+++ /dev/null
@@ -1,34 +0,0 @@
-{%- from "collectd/map.jinja" import client with context %}
-
-{%- if grains.os == 'Ubuntu' and (grains.osrelease in ['10.04', '12.04']) %}
-
-collectd_repo:
-  pkgrepo.managed:
-  - human_name: Collectd
-  - ppa: nikicat/collectd
-  - file: /etc/apt/sources.list.d/collectd.list
-  - require_in:
-    - pkg: collectd_client_packages
-
-collectd_amqp_packages:
-  pkg.installed:
-  - names:
-    - librabbitmq0
-
-{%- endif %}
-
-collectd_client_packages:
-  pkg.installed:
-  - names: {{ client.pkgs }}
-
-
-/usr/lib/collectd-python:
-  file.recurse:
-  - source: salt://collectd/files/plugin
-
-collectd_client_grains_dir:
-  file.directory:
-  - name: /etc/salt/grains.d
-  - mode: 700
-  - makedirs: true
-  - user: root
diff --git a/collectd/_service.sls b/collectd/_service.sls
deleted file mode 100644
index cef78e2..0000000
--- a/collectd/_service.sls
+++ /dev/null
@@ -1,145 +0,0 @@
-{%- if client.enabled %}
-
-{{ client.service }}_client_conf_dir:
-  file.directory:
-  - name: {{ client.config_dir }}
-  - user: root
-  - mode: 750
-  - makedirs: true
-
-{{ client.service }}_client_conf_dir_clean:
-  file.directory:
-  - name: {{ client.config_dir }}
-  - clean: true
-
-{%- for plugin_name, plugin in plugins.iteritems() %}
-
-{%- if plugin.get('plugin', 'native') not in ['python'] %}
-
-{{ client.config_dir }}/{{ plugin_name }}.conf:
-  file.managed:
-  {%- if plugin.template is defined %}
-  - source: salt://{{ plugin.template }}
-  - template: jinja
-  - defaults:
-    plugin: {{ plugin|yaml }}
-  {%- else %}
-  - contents: "<LoadPlugin {{ plugin.plugin }}>\n  Globals false\n</LoadPlugin>\n"
-  {%- endif %}
-  - user: root
-  - mode: 660
-  - require:
-    - file: {{ client.service }}_client_conf_dir
-  - require_in:
-    - file: {{ client.service }}_client_conf_dir_clean
-
-{%- endif %}
-
-{%- endfor %}
-
-{%- if client.file_logging %}
-
-{{ client.config_dir }}/00_collectd_logfile.conf:
-  file.managed:
-  - source: salt://collectd/files/collectd_logfile.conf
-  - template: jinja
-  - defaults:
-    service_name: {{ client.service }}
-  - user: root
-  - group: root
-  - mode: 660
-  - require:
-    - file: {{ client.service }}_client_conf_dir
-  - require_in:
-    - file: {{ client.service }}_client_conf_dir_clean
-
-{%- endif %}
-
-{{ client.config_dir }}/collectd_python.conf:
-  file.managed:
-  - source: salt://collectd/files/collectd_python.conf
-  - template: jinja
-  - user: root
-  - group: root
-  - mode: 660
-  - defaults:
-      plugin: {{ plugins|yaml }}
-  - require:
-    - file: {{ client.service }}_client_conf_dir
-  - require_in:
-    - file: {{ client.service }}_client_conf_dir_clean
-
-{{ client.config_file }}:
-  file.managed:
-  - source: salt://collectd/files/collectd.conf
-  - template: jinja
-  - user: root
-  - group: root
-  - mode: 640
-  - defaults:
-    plugin: {{ plugins|yaml }}
-    client: {{ client|yaml }}
-  - require:
-    - file: {{ client.service }}_client_conf_dir
-  - require_in:
-    - file: {{ client.service }}_client_conf_dir_clean
-
-{%- set network_backend = {} %}
-{%- for backend_name, backend in client.backend.iteritems() %}
-
-{%- if backend.engine not in ['network'] %}
-
-{{ client.config_dir }}/collectd_writer_{{ backend_name }}.conf:
-  file.managed:
-  - source: salt://collectd/files/backend/{{ backend.engine }}.conf
-  - template: jinja
-  - user: root
-  - group: root
-  - mode: 660
-  - defaults:
-    backend: {{ backend|yaml }}
-  - require:
-    - file: {{ client.service }}_client_conf_dir
-  - require_in:
-    - file: {{ client.service }}_client_conf_dir_clean
-
-{%- else %}
-
-{%- set network_backend = salt['grains.filter_by']({'default': network_backend}, merge={backend_name: backend}) %}
-
-{%- endif %}
-
-{%- endfor %}
-
-{%- if network_backend|length > 0 %}
-
-{{ client.config_dir }}/collectd_writer_network.conf:
-  file.managed:
-  - source: salt://collectd/files/backend/network.conf
-  - template: jinja
-  - user: root
-  - group: root
-  - mode: 660
-  - defaults:
-    backend: {{ backend|yaml }}
-  - require:
-    - file: {{ client.service }}_client_conf_dir
-  - require_in:
-    - file: {{ client.service }}_client_conf_dir_clean
-
-{%- endif %}
-
-
-{{ client.service }}_service:
-{%- if client.automatic_starting %}
-  service.running:
-  - enable: true
-  - watch:
-    - file: {{ client.config_file }}
-    - file: {{ client.config_dir }}/*
-{%- else %}
-  service.disabled:
-{%- endif %}
-  - name: {{ client.service }}
-
-{%- endif %}
diff --git a/collectd/client.sls b/collectd/client.sls
index eca7071..d81c660 100644
--- a/collectd/client.sls
+++ b/collectd/client.sls
@@ -1,8 +1,26 @@
 {%- from "collectd/map.jinja" import client with context %}
 {%- if client.enabled %}
 
-include:
-- collectd._common
+{%- if grains.os == 'Ubuntu' and (grains.osrelease in ['10.04', '12.04']) %}
+
+collectd_repo:
+  pkgrepo.managed:
+  - human_name: Collectd
+  - ppa: nikicat/collectd
+  - file: /etc/apt/sources.list.d/collectd.list
+  - require_in:
+    - pkg: collectd_client_packages
+
+collectd_amqp_packages:
+  pkg.installed:
+  - names: 
+    - librabbitmq0
+
+{%- endif %}
+
+collectd_client_packages:
+  pkg.installed:
+  - names: {{ client.pkgs }}
 
 /etc/collectd:
   file.directory:
@@ -12,19 +30,38 @@
   - require:
     - pkg: collectd_client_packages
 
-{%- set service_grains = {'collectd': {'remote_plugin': {}, 'local_plugin': {}}} %}
+collectd_client_conf_dir:
+  file.directory:
+  - name: {{ client.config_dir }}
+  - user: root
+  - mode: 750
+  - makedirs: true
+  - require:
+    - pkg: collectd_client_packages
 
+collectd_client_conf_dir_clean:
+  file.directory:
+  - name: {{ client.config_dir }}
+  - clean: true
+
+collectd_client_grains_dir:
+  file.directory:
+  - name: /etc/salt/grains.d
+  - mode: 700
+  - makedirs: true
+  - user: root
+
+/usr/lib/collectd-python:
+  file.recurse:
+  - source: salt://collectd/files/plugin
+
+{%- set service_grains = {'collectd': {'plugin': {}}} %}
 {%- for service_name, service in pillar.items() %}
 {%- if service.get('_support', {}).get('collectd', {}).get('enabled', False) %}
-
 {%- set grains_fragment_file = service_name+'/meta/collectd.yml' %}
-{%- macro load_grains_file() %}{% include grains_fragment_file ignore missing %}{% endmacro %}
+{%- macro load_grains_file() %}{% include grains_fragment_file %}{% endmacro %}
 {%- set grains_yaml = load_grains_file()|load_yaml %}
-
-{%- if grains_yaml is mapping %}
-{%- set service_grains = salt['grains.filter_by']({'default': service_grains}, merge={'collectd': grains_yaml}) %}
-{%- endif %}
-
+{%- set _dummy = service_grains.collectd.plugin.update(grains_yaml.plugin) %}
 {%- endif %}
 {%- endfor %}
 
@@ -49,7 +86,135 @@
   - watch:
     - file: collectd_client_grain
 
-{%- set plugins = service_grains.collectd.local_plugin %}
-{%- include "collectd/_service.sls" %}
+{%- for plugin_name, plugin in service_grains.collectd.get('plugin', {}).iteritems() %}
+
+{%- if (plugin.get('execution', 'local') == 'local' or client.remote_collector) and plugin.get('plugin', 'native') not in ['python'] %}
+
+{{ client.config_dir }}/{{ plugin_name }}.conf:
+  file.managed:
+  {%- if plugin.template is defined %}
+  - source: salt://{{ plugin.template }}
+  - template: jinja
+  - defaults:
+    plugin: {{ plugin|yaml }}
+  {%- else %}
+  - contents: "<LoadPlugin {{ plugin.plugin }}>\n  Globals false\n</LoadPlugin>\n"
+  {%- endif %}
+  - user: root
+  - mode: 660
+  - require:
+    - file: collectd_client_conf_dir
+  - require_in:
+    - file: collectd_client_conf_dir_clean
+  - watch_in:
+    - service: collectd_service
+
+{%- endif %}
+
+{%- endfor %}
+
+{%- if client.file_logging %}
+
+/etc/collectd/conf.d/00_collectd_logfile.conf:
+  file.managed:
+  - source: salt://collectd/files/collectd_logfile.conf
+  - user: root
+  - group: root
+  - mode: 660
+  - watch_in:
+    - service: collectd_service
+  - require:
+    - file: collectd_client_conf_dir
+  - require_in:
+    - file: collectd_client_conf_dir_clean
+
+{%- endif %}
+
+/etc/collectd/conf.d/collectd_python.conf:
+  file.managed:
+  - source: salt://collectd/files/collectd_python.conf
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 660
+  - defaults:
+      plugin: {{ service_grains.collectd.plugin|yaml }}
+  - watch_in:
+    - service: collectd_service
+  - require:
+    - file: collectd_client_conf_dir
+  - require_in:
+    - file: collectd_client_conf_dir_clean
+
+/etc/collectd/filters.conf:
+  file.managed:
+  - source: salt://collectd/files/filters.conf
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 660
+  - watch_in:
+    - service: collectd_service
+  - require:
+    - file: collectd_client_conf_dir
+  - require_in:
+    - file: collectd_client_conf_dir_clean
+
+/etc/collectd/thresholds.conf:
+  file.managed:
+  - source: salt://collectd/files/thresholds.conf
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 660
+  - watch_in:
+    - service: collectd_service
+  - require:
+    - file: collectd_client_conf_dir
+  - require_in:
+    - file: collectd_client_conf_dir_clean
+
+{{ client.config_file }}:
+  file.managed:
+  - source: salt://collectd/files/collectd.conf
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 640
+  - defaults:
+    service_grains: {{ service_grains|yaml }}
+  - require:
+    - file: collectd_client_conf_dir
+  - require_in:
+    - file: collectd_client_conf_dir_clean
+  - watch_in:
+    - service: collectd_service
+
+{%- for backend_name, backend in client.backend.iteritems() %}
+
+{{ client.config_dir }}/collectd_writer_{{ backend_name }}.conf:
+  file.managed:
+  - source: salt://collectd/files/backend/{{ backend.engine }}.conf
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 660
+  - defaults:
+    backend_name: "{{ backend_name }}"
+  - require:
+    - file: collectd_client_conf_dir
+  - require_in:
+    - file: collectd_client_conf_dir_clean
+  - watch_in:
+    - service: collectd_service
+
+{%- endfor %}
+
+collectd_service:
+  service.running:
+  - name: collectd
+  - enable: true
+  - require:
+    - pkg: collectd_client_packages
 
 {%- endif %}
diff --git a/collectd/files/backend/amqp.conf b/collectd/files/backend/amqp.conf
index ed2f968..606f446 100644
--- a/collectd/files/backend/amqp.conf
+++ b/collectd/files/backend/amqp.conf
@@ -1,3 +1,4 @@
+{%- set backend = salt['pillar.get']('collectd:client:backend:'+backend_name) %}
 <LoadPlugin amqp>
   Globals false
 </LoadPlugin>
diff --git a/collectd/files/backend/carbon.conf b/collectd/files/backend/carbon.conf
index 7758f97..d39f4a4 100644
--- a/collectd/files/backend/carbon.conf
+++ b/collectd/files/backend/carbon.conf
@@ -1,3 +1,4 @@
+{%- set backend = salt['pillar.get']('collectd:client:backend:'+backend_name) %}
 <LoadPlugin write_graphite>
   Globals false
 </LoadPlugin>
diff --git a/collectd/files/backend/http.conf b/collectd/files/backend/http.conf
index 752df40..66401be 100644
--- a/collectd/files/backend/http.conf
+++ b/collectd/files/backend/http.conf
@@ -1,3 +1,4 @@
+{%- set backend = salt['pillar.get']('collectd:client:backend:'+backend_name) %}
 <LoadPlugin write_http>
   Globals false
 </LoadPlugin>
diff --git a/collectd/files/backend/network.conf b/collectd/files/backend/network.conf
index e97c530..08fcd63 100644
--- a/collectd/files/backend/network.conf
+++ b/collectd/files/backend/network.conf
@@ -1,8 +1,9 @@
+{%- from "collectd/map.jinja" import client with context %}
 <LoadPlugin network>
   Globals false
 </LoadPlugin>
 
-{%- for _, backend in client.backend.iteritems() %}
+{%- for backend_name in client.backend.iteritems() %}
 <Plugin network>
 	{%- if backend.mode == 'client' %}
 	Server "{{ backend.host }}" "{{ backend.port }}"
diff --git a/collectd/files/collectd.conf b/collectd/files/collectd.conf
index d815eb1..03175e2 100644
--- a/collectd/files/collectd.conf
+++ b/collectd/files/collectd.conf
@@ -1,3 +1,4 @@
+{%- from "collectd/map.jinja" import client with context %}
 {%- from "linux/map.jinja" import system with context %}
 
 # Config file for collectd(1).
@@ -14,11 +15,7 @@
 # Global settings for the daemon.                                            #
 ##############################################################################
 
-{%- if client.use_fqdn %}
 Hostname "{{ system.name }}.{{ system.domain }}"
-{%- else %}
-Hostname "{{ system.name }}"
-{%- endif %}
 FQDNLookup false
 
 #BaseDir "/var/lib/collectd"
@@ -45,12 +42,10 @@
 # accessed.                                                                  #
 ##############################################################################
 
-{%- if client.syslog_logging %}
 LoadPlugin syslog
 <Plugin syslog>
 	LogLevel info
 </Plugin>
-{%- endif %}
 
 ##############################################################################
 # LoadPlugin section                                                         #
@@ -884,10 +879,10 @@
 #</Plugin>
 
 {%- if client.file_logging %}
-Include "{{ client.config_dir }}/00_collectd_logfile.conf"
+Include "/etc/collectd/conf.d/00_collectd_logfile.conf"
 {%- endif %}
-{%- for plugin_name, plugin in plugin.iteritems() %}
-{%- if plugin.get('plugin', 'native') not in ['python'] %}
+{%- for plugin_name, plugin in service_grains.collectd.get('plugin', {}).iteritems() %}
+{%- if (plugin.get('execution', 'local') == 'local' or client.remote_collector) and plugin.get('plugin', 'native') not in ['python'] %}
 Include "{{ client.config_dir }}/{{ plugin_name }}.conf"
 {%- endif %}
 {%- endfor %}
@@ -895,3 +890,6 @@
 {%- for backend_name, backend in client.backend.iteritems() %}
 Include "{{ client.config_dir }}/collectd_writer_{{ backend_name }}.conf"
 {%- endfor %}
+
+Include "/etc/collectd/filters.conf"
+Include "/etc/collectd/thresholds.conf"
diff --git a/collectd/files/collectd_check_local_endpoint.conf b/collectd/files/collectd_check_local_endpoint.conf
index b154564..4144e96 100644
--- a/collectd/files/collectd_check_local_endpoint.conf
+++ b/collectd/files/collectd_check_local_endpoint.conf
@@ -1,4 +1,6 @@
+
 {%- if plugin.get('endpoint', {})|length > 0 %}
+
 Import "check_local_endpoint"
 
 <Module "check_local_endpoint">
@@ -11,4 +13,5 @@
   Url "{{ endpoint_name }}" "{{ endpoint.url }}"
   {%- endfor %}
 </Module>
-{%- endif %}
+
+{%- endif %}
\ No newline at end of file
diff --git a/collectd/files/collectd_logfile.conf b/collectd/files/collectd_logfile.conf
index 6d4fb6e..55bfbff 100644
--- a/collectd/files/collectd_logfile.conf
+++ b/collectd/files/collectd_logfile.conf
@@ -4,7 +4,7 @@
 
 <Plugin logfile>
   LogLevel warning
-  File "/var/log/{{ service_name }}.log"
+  File "/var/log/collectd.log"
   Timestamp true
   PrintSeverity false
 </Plugin>
diff --git a/collectd/files/collectd_python.conf b/collectd/files/collectd_python.conf
index 53ad6f4..a30ee36 100644
--- a/collectd/files/collectd_python.conf
+++ b/collectd/files/collectd_python.conf
@@ -1,3 +1,4 @@
+{%- from "collectd/map.jinja" import client with context %}
 <LoadPlugin python>
   Globals false
 </LoadPlugin>
@@ -6,12 +7,12 @@
   ModulePath "/usr/lib/collectd-python"
   LogTraces false
   Interactive false
-
+  {%- if plugin is mapping %}
   {%- for plugin_name, plugin in plugin.iteritems() %}
-  {%- if plugin.get('plugin', 'native') == 'python' %}
-  {% include plugin.template %}
+  {%- if (plugin.get('execution', 'local') == 'local' or client.remote_collector) and plugin.get('plugin', 'native') == 'python' %}
+  {%- include plugin.template %}
   {%- endif %}
-
   {%- endfor %}
+  {%- endif %}
 
 </Plugin>
diff --git a/collectd/files/collectd_systemd.service b/collectd/files/collectd_systemd.service
deleted file mode 100644
index ddb0a62..0000000
--- a/collectd/files/collectd_systemd.service
+++ /dev/null
@@ -1,22 +0,0 @@
-[Unit]
-Description=Statistics collection and monitoring daemon
-After=local-fs.target network.target
-Requires=local-fs.target network.target
-ConditionPathExists={{ config_file }}
-Documentation=man:collectd(1)
-Documentation=man:collectd.conf(5)
-Documentation=https://collectd.org
-
-[Service]
-Type=notify
-NotifyAccess=main
-EnvironmentFile=-/etc/default/{{ service_name }}
-ExecStartPre=/usr/sbin/collectd -t -C {{ config_file }}
-ExecStart=/usr/sbin/collectd -C {{ config_file }}
-Restart=always
-RestartSec=10
-
-{%- if automatic_starting %}
-[Install]
-WantedBy=multi-user.target
-{%- endif %}
diff --git a/collectd/files/collectd_upstart.service b/collectd/files/collectd_upstart.service
deleted file mode 100644
index f728999..0000000
--- a/collectd/files/collectd_upstart.service
+++ /dev/null
@@ -1,12 +0,0 @@
-# {{ service_name }}
-
-description     "{{ service_name }}"
-
-{%- if automatic_starting %}
-start on runlevel [2345]
-stop on runlevel [!2345]
-{%- endif %}
-
-respawn
-
-exec /usr/bin/collectd -f -C {{ config_file }}
diff --git a/collectd/files/plugin/collectd_apache_check.py b/collectd/files/plugin/collectd_apache_check.py
index 790a60f..63ef855 100644
--- a/collectd/files/plugin/collectd_apache_check.py
+++ b/collectd/files/plugin/collectd_apache_check.py
@@ -50,6 +50,10 @@
 plugin = ApacheCheckPlugin(collectd)
 
 
+def init_callback():
+    plugin.restore_sigchld()
+
+
 def config_callback(conf):
     plugin.config_callback(conf)
 
@@ -57,5 +61,6 @@
 def read_callback():
     plugin.read_callback()
 
+collectd.register_init(init_callback)
 collectd.register_config(config_callback)
 collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/collectd_base.py b/collectd/files/plugin/collectd_base.py
index 28cea12..f042628 100644
--- a/collectd/files/plugin/collectd_base.py
+++ b/collectd/files/plugin/collectd_base.py
@@ -17,6 +17,7 @@
 import json
 import signal
 import subprocess
+import sys
 import time
 import traceback
 
@@ -168,8 +169,8 @@
 
             ("foobar\n", "")
 
-            (None, None) if the command couldn't be executed or returned a
-            non-zero status code
+            None if the command couldn't be executed or returned a non-zero
+            status code
         """
         start_time = time.time()
         try:
@@ -185,14 +186,14 @@
         except Exception as e:
             self.logger.error("Cannot execute command '%s': %s : %s" %
                               (cmd, str(e), traceback.format_exc()))
-            return (None, None)
+            return None
 
         returncode = proc.returncode
 
         if returncode != 0:
             self.logger.error("Command '%s' failed (return code %d): %s" %
                               (cmd, returncode, stderr))
-            return (None, None)
+            return None
         if self.debug:
             elapsedtime = time.time() - start_time
             self.logger.info("Command '%s' returned %s in %0.3fs" %
@@ -221,16 +222,18 @@
 
     @staticmethod
     def restore_sigchld():
-        """Restores the SIGCHLD handler.
+        """Restores the SIGCHLD handler for Python <= v2.6.
 
         This should be provided to collectd as the init callback by plugins
-        that execute external programs and want to check the return code.
+        that execute external programs.
 
         Note that it will BREAK the exec plugin!!!
 
-        See contrib/python/getsigchld.py in the collectd project for details.
+        See https://github.com/deniszh/collectd-iostat-python/issues/2 for
+        details.
         """
-        signal.signal(signal.SIGCHLD, signal.SIG_DFL)
+        if sys.version_info[0] == 2 and sys.version_info[1] <= 6:
+            signal.signal(signal.SIGCHLD, signal.SIG_DFL)
 
     def notification_callback(self, notification):
         if not self.depends_on_resource:
diff --git a/collectd/files/plugin/collectd_contrail_apis.py b/collectd/files/plugin/collectd_contrail_apis.py
deleted file mode 100644
index ad2260e..0000000
--- a/collectd/files/plugin/collectd_contrail_apis.py
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2016 Mirantis, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import collectd
-import requests
-import xml.dom.minidom
-import xml
-
-import collectd_base as base
-
-
-NAME = 'contrail'
-# Default sampling interval
-INTERVAL = 60
-
-
-def check_state(item, state):
-    return item.getElementsByTagName(
-        "state")[0].childNodes[0].toxml() == state
-
-
-class ContrailApiPlugin(base.Base):
-
-    def __init__(self, *args, **kwargs):
-        super(ContrailApiPlugin, self).__init__(*args, **kwargs)
-        self.plugin = NAME
-        self.session = requests.Session()
-        self.session.mount(
-            'http://',
-            requests.adapters.HTTPAdapter(max_retries=self.max_retries)
-        )
-        self.session.mount(
-            'https://',
-            requests.adapters.HTTPAdapter(max_retries=self.max_retries)
-        )
-        self.urls = {}
-        self.xml_element = {}
-        self.result_type = {}
-        self.state = {}
-
-    def config_callback(self, config):
-        super(ContrailApiPlugin, self).config_callback(config)
-        for node in config.children:
-            self.logger.debug("Got config request for '{}': {} {}".format(
-                node.key.lower(), node.values[0], node.values[1])
-            )
-            if node.key.lower() == "url":
-                self.urls[node.values[0]] = node.values[1]
-            elif node.key.lower() == 'xmlelement':
-                self.xml_element[node.values[0]] = node.values[1]
-            elif node.key.lower() == 'resulttype':
-                self.result_type[node.values[0]] = node.values[1]
-            elif node.key.lower() == 'state':
-                self.state[node.values[0]] = node.values[1]
-
-    def itermetrics(self):
-        for name, url in self.urls.items():
-            self.logger.debug("Requesting {} URL {}".format(
-                name, url)
-            )
-            try:
-                r = self.session.get(url, timeout=self.timeout)
-            except Exception as e:
-                msg = "Got exception for '{}': {}".format(name, e)
-                raise base.CheckException(msg)
-            else:
-                if r.status_code != 200:
-                    self.logger.error(
-                        ("{} ({}) responded with code {} "
-                         "").format(name, url,
-                                    r.status_code))
-                    yield {'type_instance': name, 'values': self.FAIL}
-                else:
-                    try:
-                        self.logger.debug(
-                            "Got response from {}: '{}'"
-                            "".format(url, r.text))
-                        px = xml.dom.minidom.parseString(r.text)
-                        itemlist = px.getElementsByTagName(
-                            self.xml_element[name]
-                        )
-                        if name not in self.result_type:
-                            count = 0
-                            state = self.state.get('name')
-                            for i in itemlist:
-                                if state is None or check_state(i, state):
-                                    count = count + 1
-                            self.logger.debug(
-                                "Got count for {}: '{}'".format(name, count))
-                            yield {'type_instance': name, 'values': count}
-                        else:
-                            rval = itemlist[0].getElementsByTagName(
-                                self.result_type[name]
-                            )[0].childNodes[0].toxml()
-                        self.logger.debug(
-                            "Got val for {}: '{}'".format(name, rval))
-                        yield {'type_instance': name, 'values': rval}
-                    except Exception as e:
-                        msg = ("Got exception while parsing "
-                               "response for '{}': {}").format(name, e)
-                        raise base.CheckException(msg)
-
-
-plugin = ContrailApiPlugin(collectd)
-
-
-def config_callback(conf):
-    plugin.config_callback(conf)
-
-
-def notification_callback(notification):
-    plugin.notification_callback(notification)
-
-
-def read_callback():
-    plugin.conditional_read_callback()
-
-collectd.register_config(config_callback)
-collectd.register_notification(notification_callback)
-collectd.register_read(read_callback, INTERVAL)
diff --git a/collectd/files/plugin/collectd_glusterfs.py b/collectd/files/plugin/collectd_glusterfs.py
deleted file mode 100644
index fbcfc1f..0000000
--- a/collectd/files/plugin/collectd_glusterfs.py
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 Mirantis, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import collectd
-import re
-
-import collectd_base as base
-
-NAME = 'glusterfs'
-GLUSTER_BINARY = '/usr/sbin/gluster'
-
-peer_re = re.compile(r'^Hostname: (?P<peer>.+)$', re.MULTILINE)
-state_re = re.compile(r'^State: (?P<state>.+)$', re.MULTILINE)
-
-vol_status_re = re.compile(r'\n\s*\n', re.MULTILINE)
-vol_block_re = re.compile(r'^-+', re.MULTILINE)
-volume_re = re.compile(r'^Status of volume:\s+(?P<volume>.+)', re.MULTILINE)
-brick_server_re = re.compile(r'^Brick\s*:\s*Brick\s*(?P<peer>[^:]+)',
-                             re.MULTILINE)
-disk_free_re = re.compile(
-    r'^Disk Space Free\s*:\s+(?P<disk_free>[.\d]+)(?P<unit>\S+)',
-    re.MULTILINE)
-disk_total_re = re.compile(
-    r'^Total Disk Space\s*:\s+(?P<disk_total>[.\d]+)(?P<unit>\S+)',
-    re.MULTILINE)
-inode_free_re = re.compile(r'^Free Inodes\s*:\s+(?P<inode_free>\d+)',
-                           re.MULTILINE)
-inode_count_re = re.compile(r'^Inode Count\s*:\s+(?P<inode_count>\d+)',
-                            re.MULTILINE)
-
-
-def convert_to_bytes(v, unit):
-    try:
-        i = ('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB').index(unit)
-    except ValueError:
-        i = 1
-    return float(v) * (1024 ** i)
-
-
-class GlusterfsPlugin(base.Base):
-
-    def __init__(self, *args, **kwargs):
-        super(GlusterfsPlugin, self).__init__(*args, **kwargs)
-        self.plugin = NAME
-
-    def itermetrics(self):
-        # Collect peers' metrics
-        out, err = self.execute([GLUSTER_BINARY, 'peer', 'status'],
-                                shell=False)
-        if not out:
-            raise base.CheckException("Failed to execute 'gluster peer'")
-
-        total = 0
-        total_by_state = {
-            'up': 0,
-            'down': 0
-        }
-
-        for line in out.split('\n\n'):
-            peer_m = peer_re.search(line)
-            state_m = state_re.search(line)
-            if peer_m and state_m:
-                total += 1
-                if state_m.group('state') == 'Peer in Cluster (Connected)':
-                    v = 1
-                    total_by_state['up'] += 1
-                else:
-                    v = 0
-                    total_by_state['down'] += 1
-                yield {
-                    'type_instance': 'peer_state',
-                    'values': v,
-                    'meta': {
-                        'peer': peer_m.group('peer')
-                    }
-                }
-
-        for state, count in total_by_state.items():
-            yield {
-                'type_instance': 'peers_count',
-                'values': count,
-                'meta': {
-                    'state': state
-                }
-            }
-            yield {
-                'type_instance': 'peers_percent',
-                'values': 100.0 * count / total,
-                'meta': {
-                    'state': state
-                }
-            }
-
-        # Collect volumes' metrics
-        out, err = self.execute(
-            [GLUSTER_BINARY, 'volume', 'status', 'all', 'detail'],
-            shell=False)
-        if not out:
-            raise base.CheckException("Failed to execute 'gluster volume'")
-
-        for vol_block in vol_status_re.split(out):
-            volume_m = volume_re.search(vol_block)
-            if not volume_m:
-                continue
-            volume = volume_m.group('volume')
-            for line in vol_block_re.split(vol_block):
-                peer_m = brick_server_re.search(line)
-                if not peer_m:
-                    continue
-                volume = volume_m.group('volume')
-                peer = peer_m.group('peer')
-                disk_free_m = disk_free_re.search(line)
-                disk_total_m = disk_total_re.search(line)
-                inode_free_m = inode_free_re.search(line)
-                inode_count_m = inode_count_re.search(line)
-                if disk_free_m and disk_total_m:
-                    free = convert_to_bytes(
-                        disk_free_m.group('disk_free'),
-                        disk_free_m.group('unit'))
-                    total = convert_to_bytes(
-                        disk_total_m.group('disk_total'),
-                        disk_total_m.group('unit'))
-                    used = total - free
-                    yield {
-                        'type_instance': 'space_free',
-                        'values': free,
-                        'meta': {
-                            'volume': volume,
-                            'peer': peer,
-                        }
-                    }
-                    yield {
-                        'type_instance': 'space_percent_free',
-                        'values': free * 100.0 / total,
-                        'meta': {
-                            'volume': volume,
-                            'peer': peer,
-                        }
-                    }
-                    yield {
-                        'type_instance': 'space_used',
-                        'values': used,
-                        'meta': {
-                            'volume': volume,
-                            'peer': peer,
-                        }
-                    }
-                    yield {
-                        'type_instance': 'space_percent_used',
-                        'values': used * 100.0 / total,
-                        'meta': {
-                            'volume': volume,
-                            'peer': peer,
-                        }
-                    }
-                if inode_free_m and inode_count_m:
-                    free = int(inode_free_m.group('inode_free'))
-                    total = int(inode_count_m.group('inode_count'))
-                    used = total - free
-                    yield {
-                        'type_instance': 'inodes_free',
-                        'values': free,
-                        'meta': {
-                            'volume': volume,
-                            'peer': peer,
-                        }
-                    }
-                    yield {
-                        'type_instance': 'inodes_percent_free',
-                        'values': free * 100.0 / total,
-                        'meta': {
-                            'volume': volume,
-                            'peer': peer,
-                        }
-                    }
-                    yield {
-                        'type_instance': 'inodes_used',
-                        'values': used,
-                        'meta': {
-                            'volume': volume,
-                            'peer': peer,
-                        }
-                    }
-                    yield {
-                        'type_instance': 'inodes_percent_used',
-                        'values': used * 100.0 / total,
-                        'meta': {
-                            'volume': volume,
-                            'peer': peer,
-                        }
-                    }
-
-
-plugin = GlusterfsPlugin(collectd)
-
-
-def init_callback():
-    plugin.restore_sigchld()
-
-
-def config_callback(conf):
-    plugin.config_callback(conf)
-
-
-def read_callback():
-    plugin.read_callback()
-
-collectd.register_init(init_callback)
-collectd.register_config(config_callback)
-collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/collectd_libvirt_check.py b/collectd/files/plugin/collectd_libvirt_check.py
index d0df216..4660609 100644
--- a/collectd/files/plugin/collectd_libvirt_check.py
+++ b/collectd/files/plugin/collectd_libvirt_check.py
@@ -49,6 +49,10 @@
 plugin = LibvirtCheckPlugin(collectd)
 
 
+def init_callback():
+    plugin.restore_sigchld()
+
+
 def config_callback(conf):
     plugin.config_callback(conf)
 
@@ -56,5 +60,6 @@
 def read_callback():
     plugin.read_callback()
 
+collectd.register_init(init_callback)
 collectd.register_config(config_callback)
 collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/collectd_memcached_check.py b/collectd/files/plugin/collectd_memcached_check.py
index 5d0dd26..fb44aeb 100644
--- a/collectd/files/plugin/collectd_memcached_check.py
+++ b/collectd/files/plugin/collectd_memcached_check.py
@@ -60,6 +60,10 @@
 plugin = MemcachedCheckPlugin(collectd)
 
 
+def init_callback():
+    plugin.restore_sigchld()
+
+
 def config_callback(conf):
     plugin.config_callback(conf)
 
@@ -67,5 +71,6 @@
 def read_callback():
     plugin.read_callback()
 
+collectd.register_init(init_callback)
 collectd.register_config(config_callback)
 collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/collectd_mysql_check.py b/collectd/files/plugin/collectd_mysql_check.py
index 3f59896..a42414c 100644
--- a/collectd/files/plugin/collectd_mysql_check.py
+++ b/collectd/files/plugin/collectd_mysql_check.py
@@ -103,6 +103,10 @@
 plugin = MySQLCheckPlugin(collectd)
 
 
+def init_callback():
+    plugin.restore_sigchld()
+
+
 def config_callback(conf):
     plugin.config_callback(conf)
 
@@ -110,5 +114,6 @@
 def read_callback():
     plugin.read_callback()
 
+collectd.register_init(init_callback)
 collectd.register_config(config_callback)
 collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/collectd_nginx_check.py b/collectd/files/plugin/collectd_nginx_check.py
deleted file mode 100644
index 9b8210e..0000000
--- a/collectd/files/plugin/collectd_nginx_check.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 Mirantis, Inc.
-#
-# Licensed under the nginx License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.nginx.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import collectd
-import collectd_base as base
-import requests
-
-NAME = 'nginx'
-
-
-class NginxCheckPlugin(base.Base):
-
-    def __init__(self, *args, **kwargs):
-        super(NginxCheckPlugin, self).__init__(*args, **kwargs)
-        self.plugin = NAME
-        self.url = None
-
-    def config_callback(self, conf):
-        super(NginxCheckPlugin, self).config_callback(conf)
-
-        for node in conf.children:
-            if node.key == 'Url':
-                self.url = node.values[0]
-                break
-
-        if self.url is None:
-            self.logger.error("{}: Missing Url parameter".format(NAME))
-
-    def read_callback(self):
-        try:
-            requests.get(self.url, timeout=self.timeout)
-            self.dispatch_check_metric(self.OK)
-        except Exception as err:
-            msg = "{}: Failed to check service: {}".format(NAME, err)
-            self.logger.error(msg)
-            self.dispatch_check_metric(self.FAIL, msg)
-
-
-plugin = NginxCheckPlugin(collectd)
-
-
-def config_callback(conf):
-    plugin.config_callback(conf)
-
-
-def read_callback():
-    plugin.read_callback()
-
-collectd.register_config(config_callback)
-collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/collectd_vrrp.py b/collectd/files/plugin/collectd_vrrp.py
deleted file mode 100644
index b020ec2..0000000
--- a/collectd/files/plugin/collectd_vrrp.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 Mirantis, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import collectd
-
-import collectd_base as base
-
-from pyroute2 import IPRoute
-
-NAME = 'vrrp'
-
-
-class VrrpPlugin(base.Base):
-
-    def __init__(self, *args, **kwargs):
-        super(VrrpPlugin, self).__init__(*args, **kwargs)
-        self.plugin = NAME
-        self.ip_addresses = []
-        self.ipr = IPRoute()
-
-    def config_callback(self, conf):
-        """Parse the plugin configuration.
-
-        Example:
-
-        <Module "collectd_vrrp">
-            <IPAddress>
-                address "172.16.10.254"
-                label "Foo"
-            </IPAddress>
-            <IPAddress>
-                address "172.16.10.253"
-            </IPAddress>
-        </Module>
-        """
-        super(VrrpPlugin, self).config_callback(conf)
-
-        for node in conf.children:
-            if node.key == 'IPAddress':
-                item = {}
-                for child_node in node.children:
-                    if child_node.key not in ('address', 'label'):
-                        continue
-                    item[child_node.key] = child_node.values[0]
-                if 'address' not in item:
-                    self.logger.error("vrrp: Missing 'address' parameter")
-                self.ip_addresses.append(item)
-
-        if len(self.ip_addresses) == 0:
-            self.logger.error("vrrp: Missing 'IPAddress' parameter")
-
-    def itermetrics(self):
-        for ip_address in self.ip_addresses:
-            v = 1 if self.ipr.get_addr(address=ip_address['address']) else 0
-            data = {'values': v, 'meta': {'ip_address': ip_address['address']}}
-            if 'label' in ip_address:
-                data['meta']['label'] = ip_address['label']
-            yield data
-
-
-plugin = VrrpPlugin(collectd)
-
-
-def config_callback(conf):
-    plugin.config_callback(conf)
-
-
-def read_callback():
-    plugin.read_callback()
-
-collectd.register_config(config_callback)
-collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/contrail_ifmap_elements_count.py b/collectd/files/plugin/contrail_ifmap_elements_count.py
deleted file mode 100644
index a9831d2..0000000
--- a/collectd/files/plugin/contrail_ifmap_elements_count.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/python
-#
-#    Copyright 2016 Mirantis, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-#
-
-import time
-import signal
-import string
-import subprocess
-import sys
-
-plugin_name = "contrail"
-plugin_instance = "ifmap-elements-count"
-plugin_interval = 90
-plugin_type = 'gauge'
-
-command = "/usr/bin/ifmap-view visual visual 2>&1 | wc -l"
-
-
-def restore_sigchld():
-    signal.signal(signal.SIGCHLD, signal.SIG_DFL)
-
-
-def log_verbose(msg):
-    collectd.info('%s plugin [verbose]: %s' % (plugin_name, msg))
-
-
-def payload():
-    ifmap_view_number_of_elements = subprocess.check_output(
-        command, shell=True)
-    return ifmap_view_number_of_elements
-
-
-def configure_callback(conf):
-    for node in conf.children:
-        val = str(node.values[0])
-
-
-def payload_callback():
-    value = payload()
-    # log_verbose(
-    #     'Sending value: %s.%s=%s' % (
-    #         plugin_name, '-'.join([val.plugin, val.type]), value))
-    val = collectd.Values(
-        plugin=plugin_name,  # metric source
-        plugin_instance=plugin_instance,
-        type=plugin_type,
-        type_instance=plugin_name,
-        interval=plugin_interval,
-        meta={'0': True},
-        values=[value]
-    )
-
-    val.dispatch()
-
-
-if __name__ == '__main__':
-    print "Plugin: " + plugin_name
-    payload = payload()
-    print("%s" % (payload))
-    sys.exit(0)
-else:
-    import collectd
-
-    collectd.register_init(restore_sigchld)
-    collectd.register_config(configure_callback)
-    collectd.register_read(payload_callback, plugin_interval)
diff --git a/collectd/files/plugin/elasticsearch_cluster.py b/collectd/files/plugin/elasticsearch_cluster.py
index e08d08a..c3dcf37 100644
--- a/collectd/files/plugin/elasticsearch_cluster.py
+++ b/collectd/files/plugin/elasticsearch_cluster.py
@@ -35,7 +35,6 @@
         self.plugin = NAME
         self.address = '127.0.0.1'
         self.port = 9200
-        self._node_id = None
         self.session = requests.Session()
         self.url = None
         self.session.mount(
@@ -52,41 +51,25 @@
             if node.key == 'Port':
                 self.port = node.values[0]
 
-        self.url = "http://{address}:{port}/".format(
+        self.url = "http://{address}:{port}/_cluster/health".format(
             **{
                 'address': self.address,
                 'port': int(self.port),
             })
 
-    def query_api(self, resource):
-        url = "{}{}".format(self.url, resource)
+    def itermetrics(self):
         try:
-            r = self.session.get(url)
+            r = self.session.get(self.url)
         except Exception as e:
-            msg = "Got exception for '{}': {}".format(url, e)
+            msg = "Got exception for '{}': {}".format(self.url, e)
             raise base.CheckException(msg)
 
         if r.status_code != 200:
-            msg = "{} responded with code {}".format(url, r.status_code)
+            msg = "{} responded with code {}".format(
+                self.url, r.status_code)
             raise base.CheckException(msg)
 
-        return r.json()
-
-    @property
-    def node_id(self):
-        if self._node_id is None:
-            local_node = self.query_api('_nodes/_local')
-            self._node_id = local_node.get('nodes', {}).keys()[0]
-
-        return self._node_id
-
-    def itermetrics(self):
-        # Collect cluster metrics only from the elected master
-        master_node = self.query_api('_cluster/state/master_node')
-        if master_node.get('master_node', '') != self.node_id:
-            return
-
-        data = self.query_api('_cluster/health')
+        data = r.json()
         self.logger.debug("Got response from Elasticsearch: '%s'" % data)
 
         yield {
@@ -109,6 +92,10 @@
 plugin = ElasticsearchClusterHealthPlugin(collectd, 'elasticsearch')
 
 
+def init_callback():
+    plugin.restore_sigchld()
+
+
 def config_callback(conf):
     plugin.config_callback(conf)
 
@@ -116,5 +103,6 @@
 def read_callback():
     plugin.read_callback()
 
+collectd.register_init(init_callback)
 collectd.register_config(config_callback)
 collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/haproxy.py b/collectd/files/plugin/haproxy.py
index 2299d6e..17514e2 100644
--- a/collectd/files/plugin/haproxy.py
+++ b/collectd/files/plugin/haproxy.py
@@ -248,7 +248,6 @@
             # NOLB/MAINT/MAINT(via)...
             if status in STATUS_MAP:
                 backend_server_states[pxname][status] += 1
-                backend_server_states[pxname]['_count'] += 1
                 # Emit metric for the backend server
                 yield {
                     'type_instance': 'backend_server',
@@ -262,24 +261,9 @@
 
         for pxname, states in backend_server_states.iteritems():
             for s in STATUS_MAP.keys():
-                val = states.get(s, 0)
                 yield {
                     'type_instance': 'backend_servers',
-                    'values': val,
-                    'meta': {
-                        'backend': pxname,
-                        'state': s.lower()
-                    }
-                }
-
-                if backend_server_states[pxname]['_count'] == 0:
-                    prct = 0
-                else:
-                    prct = (100.0 * val) / \
-                        backend_server_states[pxname]['_count']
-                yield {
-                    'type_instance': 'backend_servers_percent',
-                    'values': prct,
+                    'values': states.get(s, 0),
                     'meta': {
                         'backend': pxname,
                         'state': s.lower()
@@ -307,6 +291,10 @@
 plugin = HAProxyPlugin(collectd)
 
 
+def init_callback():
+    plugin.restore_sigchld()
+
+
 def config_callback(conf):
     plugin.config_callback(conf)
 
@@ -314,5 +302,6 @@
 def read_callback():
     plugin.read_callback()
 
+collectd.register_init(init_callback)
 collectd.register_config(config_callback)
 collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/influxdb.py b/collectd/files/plugin/influxdb.py
index 4b7426b..43cd82d 100644
--- a/collectd/files/plugin/influxdb.py
+++ b/collectd/files/plugin/influxdb.py
@@ -129,6 +129,10 @@
 plugin = InfluxDBClusterPlugin(collectd)
 
 
+def init_callback():
+    plugin.restore_sigchld()
+
+
 def config_callback(conf):
     plugin.config_callback(conf)
 
@@ -136,5 +140,6 @@
 def read_callback():
     plugin.read_callback()
 
+collectd.register_init(init_callback)
 collectd.register_config(config_callback)
 collectd.register_read(read_callback)
diff --git a/collectd/files/plugin/rabbitmq_info.py b/collectd/files/plugin/rabbitmq_info.py
index d78b6cb..c92ce0e 100644
--- a/collectd/files/plugin/rabbitmq_info.py
+++ b/collectd/files/plugin/rabbitmq_info.py
@@ -79,14 +79,14 @@
                 self.api_overview_url, r.status_code)
             raise base.CheckException(msg)
 
-        objects = overview.get('object_totals', {})
-        stats['queues'] = objects.get('queues', 0)
-        stats['consumers'] = objects.get('consumers', 0)
-        stats['connections'] = objects.get('connections', 0)
-        stats['exchanges'] = objects.get('exchanges', 0)
-        stats['channels'] = objects.get('channels', 0)
-        stats['messages'] = overview.get('queue_totals', {}).get('messages', 0)
-        stats['running_nodes'] = len(overview.get('contexts', []))
+        objects = overview['object_totals']
+        stats['queues'] = objects['queues']
+        stats['consumers'] = objects['consumers']
+        stats['connections'] = objects['connections']
+        stats['exchanges'] = objects['exchanges']
+        stats['channels'] = objects['channels']
+        stats['messages'] = overview['queue_totals']['messages']
+        stats['running_nodes'] = len(overview['contexts'])
 
         for k, v in stats.iteritems():
             yield {'type_instance': k, 'values': v}
diff --git a/collectd/init.sls b/collectd/init.sls
index febb675..b794478 100644
--- a/collectd/init.sls
+++ b/collectd/init.sls
@@ -1,9 +1,4 @@
 {%- if pillar.collectd is defined %}
 include:
-{%- if pillar.collectd.client is defined %}
 - collectd.client
-{%- endif %}
-{%- if pillar.collectd.remote_client is defined %}
-- collectd.remote_client
-{%- endif %}
-{%- endif %}
+{%- endif %}
\ No newline at end of file
diff --git a/collectd/map.jinja b/collectd/map.jinja
index ace3a0b..a0156c5 100644
--- a/collectd/map.jinja
+++ b/collectd/map.jinja
@@ -7,20 +7,16 @@
         'config_dir': '/etc/collectd.d',
         'read_interval': 60,
         'file_logging': True,
-        'syslog_logging': True,
-        'use_fqdn': True,
-        'automatic_starting': True,
+        'remote_collector': False
     },
     'Debian': {
-        'pkgs': ['collectd-core', 'snmp', 'python-yaml', 'libpython2.7', 'python-simplejson'],
+        'pkgs': ['collectd-core', 'snmp', 'python-yaml', 'libpython2.7'],
         'service': 'collectd',
         'config_file': '/etc/collectd/collectd.conf',
         'config_dir': '/etc/collectd/conf.d',
         'read_interval': 60,
         'file_logging': True,
-        'syslog_logging': True,
-        'use_fqdn': True,
-        'automatic_starting': True,
+        'remote_collector': False
     },
     'RedHat': {
         'pkgs': ['collectd', 'collectd-ping', 'net-snmp', 'PyYAML'],
@@ -29,21 +25,6 @@
         'config_dir': '/etc/collectd.d',
         'read_interval': 60,
         'file_logging': True,
-        'syslog_logging': True,
-        'use_fqdn': True,
-        'automatic_starting': True,
+        'remote_collector': False
     },
 }, merge=salt['pillar.get']('collectd:client')) %}
-
-{% set remote_client = salt['grains.filter_by']({
-    'default': {
-        'service': 'remote_collectd',
-        'config_file': '/etc/remote_collectd/collectd.conf',
-        'config_dir': '/etc/remote_collectd/conf.d',
-        'read_interval': 60,
-        'file_logging': True,
-        'syslog_logging': False,
-        'use_fqdn': True,
-        'automatic_starting': True,
-    }
-}, merge=salt['pillar.get']('collectd:remote_client')) %}
diff --git a/collectd/meta/collectd.yml b/collectd/meta/collectd.yml
index dc349b5..98d6ee1 100644
--- a/collectd/meta/collectd.yml
+++ b/collectd/meta/collectd.yml
@@ -1,33 +1,30 @@
-{%- from "collectd/map.jinja" import client with context %}
-{%- from "collectd/map.jinja" import remote_client with context %}
-local_plugin:
+plugin:
   collectd_processes:
     plugin: processes
+    execution: local
     template: collectd/files/collectd_processes.conf
     process:
-  {%- if pillar.collectd.get('client', {}).get('enabled', False) %}
-      collectd:
-        match: '(collectd.*{{ client.config_file }}|collectd$)'
-  {%- endif %}
-  {%- if pillar.collectd.get('remote_client', {}).get('enabled', False) %}
-      remote_collectd:
-        match: 'collectd.*{{ remote_client.config_file }}'
-  {%- endif %}
-  {%- if pillar.collectd.get('client', {}).get('check', {}).curl is defined %}
+      collectdmon: {}
+  collectd_check_local_endpoint:
+    plugin: python
+    execution: local
+    template: collectd/files/collectd_check_local_endpoint.conf
+    endpoint: {}
+{%- if pillar.collectd.client.get('check', {}).curl is defined %}
   collectd_curl:
     plugin: curl
     execution: local
     template: collectd/files/collectd_curl.conf
     data: {{ pillar.collectd.client.check.curl|yaml }}
-  {%- endif %}
-  {%- if pillar.collectd.get('client', {}).get('check', {}).ping is defined %}
+{%- endif %}
+{%- if pillar.collectd.client.get('check', {}).ping is defined %}
   collectd_ping:
     plugin: ping
     execution: local
     template: collectd/files/collectd_ping.conf
     data: {{ pillar.collectd.client.check.ping|yaml }}
-  {%- endif %}
-  {%- if pillar.get('external', {}).network_device is defined %}
+{%- endif %}
+{%- if pillar.get('external', {}).network_device is defined %}
   collectd_network_device:
     plugin: snmp
     execution: local
@@ -48,9 +45,4 @@
         - 1.3.6.1.2.1.31.1.1.1.7
         - 1.3.6.1.2.1.31.1.1.1.11
     host: {{ pillar.external.network_device|yaml }}
-  {%- endif %}
-  collectd_check_local_endpoint:
-    plugin: python
-    execution: remote
-    template: collectd/files/collectd_check_local_endpoint.conf
-    endpoint: {}
+{%- endif %}
\ No newline at end of file
diff --git a/collectd/meta/sphinx.yml b/collectd/meta/sphinx.yml
index e7fa0cb..4959fff 100644
--- a/collectd/meta/sphinx.yml
+++ b/collectd/meta/sphinx.yml
@@ -1,11 +1,11 @@
 {%- from "collectd/map.jinja" import client with context %}
-{%- set service_grains = {'collectd': {'local_plugin': {}}} %}
+{%- set service_grains = {'collectd': {'plugin': {}}} %}
 {%- for service_name, service in pillar.items() %}
 {%- if service.get('_support', {}).get('collectd', {}).get('enabled', False) %}
 {%- set grains_fragment_file = service_name+'/meta/collectd.yml' %}
 {%- macro load_grains_file() %}{% include grains_fragment_file %}{% endmacro %}
 {%- set grains_yaml = load_grains_file()|load_yaml %}
-{%- do service_grains.collectd.local_plugin.update(grains_yaml.get('local_plugin', {})) %}
+{%- set _dummy = service_grains.collectd.plugin.update(grains_yaml.plugin) %}
 {%- endif %}
 {%- endfor %}
 doc:
@@ -21,4 +21,4 @@
           value: {{ backend.host }}:{{ backend.port }}
 {%- endfor %}
         plugins:
-          value: {% for plugin_name, plugin in service_grains.collectd.local_plugin.iteritems() %} {{ plugin_name }}{% endfor %}
+          value: {% for plugin_name, plugin in service_grains.collectd.plugin.iteritems() %} {{ plugin.plugin }}{% endfor %}
diff --git a/collectd/remote_client.sls b/collectd/remote_client.sls
deleted file mode 100644
index a7ffcc3..0000000
--- a/collectd/remote_client.sls
+++ /dev/null
@@ -1,37 +0,0 @@
-{%- from "collectd/map.jinja" import remote_client with context %}
-{%- if remote_client.enabled %}
-
-include:
-- collectd._common
-
-{# Collect all remote plugins from Salt mine #}
-{%- set plugins = {} %}
-{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
-{%- if node_grains.collectd is defined %}
-{%- set plugins = salt['grains.filter_by']({'default': plugins}, merge=node_grains.collectd.get('remote_plugin', {})) %}
-{%- endif %}
-{%- endfor %}
-
-{%- set client = remote_client %}
-{%- include "collectd/_service.sls" %}
-
-{{ remote_client.service }}_service_file:
-  file.managed:
-{%- if grains.get('init', None) == 'systemd' %}
-  - name: /etc/systemd/system/{{ remote_client.service }}.service
-  - source: salt://collectd/files/collectd_systemd.service
-{%- else %}
-  - name: /etc/init/{{ remote_client.service }}
-  - source: salt://collectd/files/collectd_upstart.service
-{%- endif %}
-  - user: root
-  - mode: 644
-  - defaults:
-    service_name: {{ remote_client.service }}
-    config_file: {{ remote_client.config_file }}
-    automatic_starting: {{ remote_client.automatic_starting }}
-  - template: jinja
-  - require_in:
-    - service: {{ remote_client.service }}_service
-
-{%- endif %}
diff --git a/metadata/service/client/init.yml b/metadata/service/client/init.yml
index 6ef1257..cbf9f47 100644
--- a/metadata/service/client/init.yml
+++ b/metadata/service/client/init.yml
@@ -7,4 +7,3 @@
     client:
       enabled: true
       read_interval: 60
-      use_fqdn: true
diff --git a/metadata/service/remote_client/cluster.yml b/metadata/service/remote_client/cluster.yml
deleted file mode 100644
index b340e79..0000000
--- a/metadata/service/remote_client/cluster.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-applications:
-- collectd
-classes:
-- service.collectd.support
-parameters:
-  collectd:
-    remote_client:
-      enabled: true
-      read_interval: 10
-      use_fqdn: false
-      automatic_starting: false
diff --git a/metadata/service/remote_client/single.yml b/metadata/service/remote_client/single.yml
deleted file mode 100644
index 81062b4..0000000
--- a/metadata/service/remote_client/single.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-applications:
-- collectd
-classes:
-- service.collectd.support
-parameters:
-  collectd:
-    remote_client:
-      enabled: true
-      read_interval: 10
-      use_fqdn: false
-      automatic_starting: true
