diff --git a/sensu/files/checks/check-smtp.rb b/sensu/files/checks/check-smtp.rb
new file mode 100755
index 0000000..1be35e3
--- /dev/null
+++ b/sensu/files/checks/check-smtp.rb
@@ -0,0 +1,75 @@
+#!/usr/bin/env ruby
+#
+# check-smtp
+#
+# DESCRIPTION:
+# Check SMTP connection to a server
+#
+# OUTPUT:
+# plain text
+#
+# PLATFORMS:
+# Linux
+#
+# DEPENDENCIES:
+# gem: sensu-plugin
+#
+# USAGE:
+# check-smtp -h HOST [-p PORT] [-H HELO ]
+#
+# NOTES:
+#
+# LICENSE:
+# Oasiswork <dev@oasiswork.fr>
+# Released under the same terms as Sensu (the MIT license); see LICENSE
+# for details.
+#
+# AUTHORS:
+# Nicolas BRISAC <nbrisac@oasiswork.fr>
+
+require 'sensu-plugin/check/cli'
+require 'net/smtp'
+
+class CheckSMTP < Sensu::Plugin::Check::CLI
+    option :host,
+            short: '-h HOST',
+            description: 'SMTP host to connect to',
+            required: true
+
+    option :port,
+            short: '-p PORT',
+            description: 'SMTP port to connect to',
+            default: 25
+
+    option :tls,
+            long: '--tls',
+            description: 'Enable STARTTLS',
+            boolean: true
+
+    option :tls_verify,
+            long: '--verify-peer-cert',
+            description: 'Verify peer certificate during TLS session',
+            boolean: true
+
+    def run
+        smtp = Net::SMTP.new(config[:host], config[:port])
+        ctx = OpenSSL::SSL::SSLContext.new
+        if config[:tls_verify]
+            ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
+        else
+            ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
+        end
+
+        begin
+            if config[:tls]
+                smtp.enable_starttls(ctx)
+            end
+            smtp.start(Socket.gethostname)
+            smtp.finish()
+        rescue Exception => e
+            critical "Connection failed: #{e.message}"
+        end        
+
+        ok
+    end
+end
diff --git a/sensu/files/checks/check_apache2.sh b/sensu/files/checks/check_apache2.sh
new file mode 100755
index 0000000..7723e8e
--- /dev/null
+++ b/sensu/files/checks/check_apache2.sh
@@ -0,0 +1,294 @@
+#!/bin/sh
+
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+PROGNAME=`basename $0`
+VERSION="Version 1.3,"
+AUTHOR="2009, Mike Adolphs (http://www.matejunkie.com/)"
+
+print_version() {
+    echo "$VERSION $AUTHOR"
+}
+
+print_help() {
+    print_version $PROGNAME $VERSION
+    echo ""
+    echo "Description:"
+    echo "$PROGNAME is a Nagios plugin to check the Apache's server status."
+    echo "It monitors requests per second, bytes per second/request, "
+    echo "amount of busy/idle workers and its CPU load."
+    echo ""
+    echo "Example call:"
+    echo "./$PROGNAME -H localhost -P 80 -t 3 -b /usr/sbin -p /var/run \\"
+    echo "-n apache2.pid -s status_page [-S] [-R] [-wr] 100 [-cr] 250"
+    echo ""
+    echo "Options:"
+    echo "  -H|--hostname)"
+    echo "    Sets the hostname. Default is: localhost"
+    echo "  -P|--port)"
+    echo "    Sets the port. Default is: 80"
+    echo "  -t|--timeout)"
+    echo "    Sets a timeout within the server's status page must've been"
+    echo "    accessed. Otherwise the check will go into an error state."
+    echo "    Default is: 3"
+    echo "  -b|--binary-path)"
+    echo "    Sets the path to the apache binary. Used for getting Apache's"
+    echo "    CPU load. Default is: /usr/sbin"
+    echo "  -p|--pid-path)"
+    echo "    Path to Apache's pid file. Default is: /var/run"
+    echo "  -n|--pid-name)"
+    echo "    Name of Apache's pid file. Default is: apache2.pid"
+    echo "  -s|--status-page)"
+    echo "    Defines the name of the status page. Default is: server-status"
+    echo "  -R|--remote-server)"
+    echo "    Disabled the pid check so that remote Apaches can be queried."
+    echo "    Default is: off"
+    echo "  -S|--secure)"
+    echo "    Enables HTTPS (no certificate check though). Default is: off"
+    echo "  -wr|--warning-req)"
+    echo "    Sets a warning level for requests per second. Default is: off"
+    echo "  -cr|--critical-req)"
+    echo "    Sets a critical level for requests per second. Default is: off"
+    exit $ST_UK
+}
+
+ST_OK=0
+ST_WR=1
+ST_CR=2
+ST_UK=3
+
+hostname="localhost"
+port=80
+remote_srv=0
+path_binary="/usr/sbin"
+path_pid="/var/run"
+name_pid="apache2.pid"
+status_page="server-status"
+timeout=3
+secure=0
+running=0
+
+wcdiff_req=0
+wclvls_req=0
+
+while test -n "$1"; do
+    case "$1" in
+        --help|-h)
+            print_help
+            exit $ST_UK
+            ;;
+        --version|-v)
+            print_version $PROGNAME $VERSION
+            exit $ST_UK
+            ;;
+        --hostname|-H)
+            hostname=$2
+            shift
+            ;;
+        --port|-P)
+            port=$2
+            shift
+            ;;
+        --timeout|-t)
+            timeout=$2
+            shift
+            ;;
+        --remote-server|-R)
+            remote_srv=1
+            ;;
+        --binary_path|-b)
+            path_binary=$2
+            shift
+            ;;
+        --pid_path|-p)
+            path_pid=$2
+            shift
+            ;;
+        --pid_name|-n)
+            name_pid=$2
+            shift
+            ;;
+        --status-page|-s)
+            status_page=$2
+            shift
+            ;;
+        --secure|-S)
+            secure=1
+            ;;
+        --warning-req|-wr)
+            warn_req=$2
+            shift
+            ;;
+        --critical-req|-cr)
+            crit_req=$2
+            shift
+            ;;
+        *)
+            echo "Unknown argument: $1"
+            print_help
+            exit $ST_UK
+            ;;
+    esac
+    shift
+done
+
+# check functions
+val_wcdiff_req() {
+    if [ ! -z "$warn_req" -a ! -z "$crit_req" ]
+    then
+        wclvls_req=1
+
+        if [ ${warn_req} -gt ${crit_req} ]
+        then
+            wcdiff_req=1
+        fi
+    elif [ ! -z "$warn_req" -a -z "$crit_req" ]
+    then
+        wcdiff_req=2
+    elif [ -z "$warn_req" -a ! -z "$crit_req" ]
+    then
+        wcdiff_req=3
+    fi
+}
+
+check_pid() {
+    if [ -f "$path_pid/$name_pid" ]
+    then
+        retval=0
+    else
+        retval=1
+    fi
+}
+
+check_processes() {
+    if [ $1 -lt 1 ]
+    then
+        echo "UNKNOWN - Your Apache server seems not to run. Is your Nagios \
+privileged to run 'ps ax' and is the Apache2 binary really located in \
+$path_binary?"
+        exit $ST_UK
+    fi
+}
+
+check_output() {
+    stat_output=`stat -c %s ${output_dir}/server-status`
+    if [ "$stat_output" = 0 ]
+    then
+        echo "UNKNOWN - Local copy of server-status is empty. Are we \
+allowed to access http://${hostname}:${port}/server-status?"
+        exit $ST_UK
+    fi
+}
+
+# get functions
+get_status() {
+    if [ "$secure" = 1 ]
+    then
+        server_status1=`wget -qO- --no-check-certificate -t 3 \
+-T ${timeout} https://${hostname}:${port}/${status_page}?auto`
+    sleep 1
+        server_status2=`wget -qO- --no-check-certificate -t 3 \
+-T ${timeout} https://${hostname}:${port}/${status_page}?auto`
+    else
+        server_status1=`wget -qO- -t 3 -T ${timeout} \
+http://${hostname}:${port}/${status_page}?auto`
+        sleep 1
+        server_status2=`wget -qO- -t 3 -T ${timeout} \
+http://${hostname}:${port}/${status_page}?auto`
+    fi
+}
+
+get_vals() {
+    cpu_load="$(cpu_load=0; ps -Ao pcpu,args | grep "$path_binary/apache2" \
+| awk '{print $1}' | while read line
+    do
+        cpu_load=`echo "scale=3; $cpu_load + $line" | bc -l`
+    echo $cpu_load
+    done)"
+    cpu_load=`echo $cpu_load | awk '{print $NF}' | sed 's/^\./0./'`
+
+    tmp1_req_psec=`echo ${server_status1} | awk '{print $3}'`
+    tmp2_req_psec=`echo ${server_status2} | awk '{print $3}'`
+    req_psec=`echo "scale=2; ${tmp2_req_psec} - ${tmp1_req_psec}" | bc -l \
+| sed 's/^\./0./'`
+
+    bytes_psec=`echo ${server_status1} | awk '{print $14}' | sed 's/^\./0./'`
+    bytes_preq=`echo ${server_status1} | awk '{print $16}' | sed 's/^\./0./'`
+    wkrs_busy=`echo ${server_status1} | awk '{print $18}' | sed 's/^\./0./'`
+    wkrs_idle=`echo ${server_status1} | awk '{print $20}' | sed 's/^\./0./'`
+}
+
+do_output() {
+    output="Apache serves $req_psec Requests per second with an average CPU \
+utilization of $cpu_load%. Busy workers: $wkrs_busy, idle: $wkrs_idle"
+}
+
+do_perfdata() {
+    perfdata="'cpu_load'=$cpu_load 'req_psec'=$req_psec \
+'bytes_psec'=$bytes_psec 'bytes_preq'=$bytes_preq 'workers_busy'=$wkrs_busy \
+'workers_idle'=$wkrs_idle"
+}
+
+# Let's go
+val_wcdiff_req
+
+if [ "$wcdiff_req" = 1 ]
+then
+    echo "Please adjust your warning/critical thresholds. The warning must \
+be lower than the critical level!"
+    exit $ST_UK
+elif [ "$wcdiff_req" = 2 ]
+then
+    echo "Please also set a critical value when you want to use \
+warning/critical thresholds!"
+    exit $ST_UK
+elif [ "$wcdiff_req" = 3 ]
+then
+    echo "Please also set a warning value when you want to use \
+warning/critical thresholds!"
+    exit $ST_UK
+else
+    if [ "$remote_srv" = 0 ]
+    then
+        running=`check_pid`
+        check_pid $running
+    fi
+
+    get_status
+    get_vals
+
+    do_output
+    do_perfdata
+
+    if [ ${wclvls_req} = 1 ]
+    then
+        if [ ${req_psec} -ge ${warn_req} -a ${req_psec} -lt ${crit_req} ]
+        then
+            echo "WARNING - ${output} | ${perfdata}"
+            exit $ST_WR
+        elif [ ${req_psec} -ge ${crit_req} ]
+        then
+            echo "CRITICAL - ${output} | ${perfdata}"
+        exit $ST_CR
+        else
+            echo "OK - ${output} | ${perfdata}"
+            exit $ST_OK
+        fi
+    else
+        echo "OK - ${output} | ${perfdata}"
+        exit $ST_OK
+    fi
+
+fi
diff --git a/sensu/files/checks/check_imap b/sensu/files/checks/check_imap
new file mode 100755
index 0000000..23f20f6
--- /dev/null
+++ b/sensu/files/checks/check_imap
@@ -0,0 +1,49 @@
+#!/usr/bin/python3
+import imaplib
+from argparse import ArgumentParser
+from sys import argv,exit
+from socket import error,timeout
+from time import time
+
+parse = ArgumentParser(description='IMAP plugin for Nagios')
+parse.add_argument('-host', help='Host')
+parse.add_argument('-c', help='Critical (float)')
+parse.add_argument('-p', help='Port')
+parse.add_argument('-ssl', help='Ssl On')
+parse.add_argument('-w', help='Warning (float)')
+args = parse.parse_args()
+
+def main(host,warning,critical,encrypt=None,port=None):
+    t = time()
+    if encrypt==1:
+        if port==None:
+            c = imaplib.IMAP4_SSL(host=host)
+        else:
+            c = imaplib.IMAP4_SSL(host=host,port=int(port))
+    else:
+        if port==None:
+            c = imaplib.IMAP4(host=host)
+        else:
+            c = imaplib.IMAP4_SSL(host=host,port=int(port))   
+    c.PROTOCOL_VERSION
+    c.shutdown()
+    tout = time()-t
+    if tout>=critical:
+        print("IMAP CRITICAL: %f" %tout)
+        exit(2)
+    elif tout>=warning:
+        print("IMAP WARNING: %f" %tout)
+        exit(1)
+    else:
+        print("IMAP OK: %f" %tout)
+        exit(0)
+
+timeout = 10
+try:
+    print(main(args.host,float(args.w),float(args.c),args.ssl,args.p))
+except error:
+    print("Socket Error.")
+    exit(3)
+except TypeError:
+    print("Syntax Error.")
+    exit(3)
