diff --git a/.gitignore b/.gitignore
index d0f4a919cdefb405904adce7b3520b24f9cc5a03..9b639ce64a61826f7a3519c2499cab62d29e54c8 100755
--- a/.gitignore
+++ b/.gitignore
@@ -17,7 +17,4 @@ doxygen_warnings.log
 *.iml
 Thumbs.db
 # Vagrant generated files
-.vagrant
-/index.html
-/phpmyadmin
-/xhprof
+.vagrant
\ No newline at end of file
diff --git a/ChangeLog b/ChangeLog
index 7c999a2dcd78c75368c4a17e720ab292f60beab2..40ad4d4194561429316d35b4368161aeec1c67fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -37,7 +37,7 @@ For users:
 - Fix: [ bug #1501 ] DEPLACEMENT_CREATE trigger do not intercept trigger action
 - Fix: [ bug #1506, #1507 ] ECM trigger error problem
 - Fix: [ bug #1469 ] Triggers CONTACT_MODIFY and CONTACT_DELETE duplicates error message
-
+- New: [ task #1204 ] add a External reference to contract
 
 For translators:
 - Update language files.
@@ -46,7 +46,10 @@ For developers:
 - New: Add hook "searchAgendaFrom".
 - New: Add trigger DON_UPDATE, DON_DELETE
 - New: Add country iso code on 3 chars into table of countries.
-- Qual: Removed hard coded rowid into data init of table llx_c_action_trigger.     
+- Qual: Removed hard coded rowid into data init of table llx_c_action_trigger.
+- LINEBILL_DELETE, LINK_DELETE, ORDER_SUPPLIER_DELETE, RESOURCE_DELETE trigger called before SQL delete
+- New: [ Task #1481 ] Add trigger BILL_SUPPLIER_UPDATE.
+- New: [ Task #1495 ] Add trigger LINECONTRACT_CREATE.
 
 WARNING: Following change may create regression for some external modules, but was necessary to make
 Dolibarr better:
@@ -162,6 +165,7 @@ removed. You must now use the 6 parameters way. See file modMyModule.class.php f
   So check that return value is 0 to keep default standard behaviour after hook, or 1 to disable
   default standard behaviour.
 - Properties "civilite_id" were renamed into "civility_id".
+- Remove add_photo_web() that is ot used anymore by core code.
 
 
 
@@ -207,6 +211,8 @@ Fix: [ bug #1461 ] LINEORDER_SUPPLIER_CREATE does not intercept supplier order l
 Fix: [ bug #1484 ] BILL_SUPPLIER_PAYED trigger action does not intercept failure under some circumstances
 Fix: [ bug #1482 ] Several supplier invoice triggers do not show trigger error messages
 Fix: [ bug #1486 ] LINEBILL_SUPPLIER_CREATE and LINEBILL_SUPPLIER_UPDATE triggers do not intercept trigger action
+Fix: [ bug #1522 ] Element list into associate object into project are no more filterd by project thirdparty
+Fix: Import ProfId1 to siren and ProfId2 to siret
 
 ***** ChangeLog for 3.5.3 compared to 3.5.2 *****
 Fix: Error on field accountancy code for export profile of invoices.
diff --git a/dev/vagrant/README.md b/dev/vagrant/README.md
index 8056643520ec77ffdd2d898f0e31d1ebbd287d5f..dc0bc4234e2b4151585ac0abe34ac3dd68c8fc5d 100644
--- a/dev/vagrant/README.md
+++ b/dev/vagrant/README.md
@@ -23,7 +23,7 @@ Usage
 
 `cd` into the vagrant box directory and simply type `vagrant up`.
 
-That's all you need to do. It will build a brand new VirtalBox machine for you with everything you need to develop on Dolibarr.
+That's all you need to do. It will build a brand new VirtualBox machine for you with everything you need to develop on Dolibarr.
 
 ### Name resolution
 For easy access to the VM you need to setup name resolution to the machines IP.
@@ -45,9 +45,16 @@ Somewhat bleeding edge vagrant box for develop branch related work.
 
 - IP: 192.168.42.101
 - Vhost: dev.dolibarr.org
-- OS: Debian Wheezy 7.5
+- OS: Debian Wheezy 7.5 x64
 - Webserver: Apache 2.2.22
-- PHP: mod_php 5.5.13-1~dotdeb.1
+- PHP: mod_php 5.5.14-1~dotdeb.1
+  Installed modules:
+    - cli
+    - curl
+    - gd
+    - imagick
+    - intl
+    - mcrypt
 - Database: MySQL 5.5
     - Root user: root
     - Root password: root
@@ -55,7 +62,13 @@ Somewhat bleeding edge vagrant box for develop branch related work.
     - Database user: user
     - Database password: user
     - Initial data: dev/initdata/mysqldump_dolibarr-3.5.0.sql
+- Database: PostgreSQL 9.3
+- Adminer: lightweight database management. Access through http://192.168.42.101/adminer
 - Debugger: XDebug
-- Profiler: Xhprof
+- Profiler: Xhprof. Access through http://192.168.42.101/xhprof/xhprof_html
 
 You can access MailCatcher to read all outgoing emails at http://192.168.42.101:1080
+
+To access the machine you must use the following private keys:
+- User root: located at puphpet/files/dot/ssh/root_rsa
+- User vagrant: located at puphpet/files/dot/ssh/id_rsa
diff --git a/dev/vagrant/dolibarrdev/Vagrantfile b/dev/vagrant/dolibarrdev/Vagrantfile
index f73476207d0ee61db828a4dc6722d66ce5151bc7..89c2c75a5b726e45d4a944e4af6343aa761a64fb 100644
--- a/dev/vagrant/dolibarrdev/Vagrantfile
+++ b/dev/vagrant/dolibarrdev/Vagrantfile
@@ -25,11 +25,19 @@ Vagrant.configure("2") do |config|
 
   data['vm']['synced_folder'].each do |i, folder|
     if folder['source'] != '' && folder['target'] != ''
-      nfs = (folder['nfs'] == "true") ? "nfs" : nil
-      if nfs == "nfs"
-        config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: nfs
+      if folder['sync_type'] == 'nfs'
+        config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: "nfs"
+      elsif folder['sync_type'] == 'smb'
+        config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: "smb"
+      elsif folder['sync_type'] == 'rsync'
+        rsync_args = !folder['rsync']['args'].nil? ? folder['rsync']['args'] : ["--verbose", "--archive", "--delete", "-z"]
+        rsync_auto = !folder['rsync']['auto'].nil? ? folder['rsync']['auto'] : true
+        rsync_exclude = !folder['rsync']['exclude'].nil? ? folder['rsync']['exclude'] : [".vagrant/"]
+
+        config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}",
+            rsync__args: rsync_args, rsync__exclude: rsync_exclude, rsync__auto: rsync_auto, type: "rsync"
       else
-        config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: nfs,
+        config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}",
           group: 'www-data', owner: 'www-data', mount_options: ["dmode=775", "fmode=764"]
       end
     end
@@ -128,7 +136,14 @@ Vagrant.configure("2") do |config|
     end
   end
 
-  config.vm.provision :shell, :path => "puphpet/shell/execute-files.sh"
+  config.vm.provision :shell do |s|
+    s.path = "puphpet/shell/execute-files.sh"
+    s.args = ["exec-once", "exec-always"]
+  end
+  config.vm.provision :shell, run: "always" do |s|
+    s.path = "puphpet/shell/execute-files.sh"
+    s.args = ["startup-once", "startup-always"]
+  end
   config.vm.provision :shell, :path => "puphpet/shell/important-notices.sh"
 
   if File.file?("#{dir}/puphpet/files/dot/ssh/id_rsa")
diff --git a/dev/vagrant/dolibarrdev/puphpet/config.yaml b/dev/vagrant/dolibarrdev/puphpet/config.yaml
index 5cfb2601f21d6e864891796be30efc67bced796d..c9c8440c87df7e32e3f4610dd974718efb707145 100644
--- a/dev/vagrant/dolibarrdev/puphpet/config.yaml
+++ b/dev/vagrant/dolibarrdev/puphpet/config.yaml
@@ -29,10 +29,12 @@ vagrantfile-local:
                     - '--hiera_config /vagrant/puphpet/puppet/hiera.yaml'
                     - '--parser future'
         synced_folder:
-            PL1BkioqqvGY:
+            jopH6005bn96:
                 source: ../../../
-                target: /var/www
-                nfs: 'false'
+                target: /var/www/dolibarr
+                sync_type: default
+                rsync:
+                    auto: 'false'
         usable_port_range: 2200..2250
     ssh:
         host: null
@@ -71,7 +73,7 @@ apache:
     settings:
         user: www-data
         group: www-data
-        default_vhost: false
+        default_vhost: true
         manage_user: false
         manage_group: false
         sendfile: 0
@@ -79,9 +81,9 @@ apache:
         - php
         - rewrite
     vhosts:
-        CGyWQB0fx4x0:
+        b2tOrs1TMtoF:
             servername: dev.dolibarr.org
-            docroot: /var/www/htdocs
+            docroot: /var/www/dolibarr/htdocs
             port: '80'
             setenv:
                 - 'APP_ENV dev'
@@ -97,7 +99,7 @@ apache:
 nginx:
     install: 0
     vhosts:
-        jeF1sybIJ3V2:
+        0dU5luf5AnIe:
             server_name: awesome.dev
             server_aliases:
                 - www.awesome.dev
@@ -152,7 +154,7 @@ mysql:
     root_password: root
     adminer: 0
     databases:
-        2OfuuapoIqsl:
+        V6H3W2FVB7Yq:
             grant:
                 - ALTER
                 - CREATE
@@ -166,16 +168,16 @@ mysql:
             host: localhost
             user: user
             password: user
-            sql_file: /var/www/dev/initdata/mysqldump_dolibarr_3.5.0.sql
+            sql_file: /var/www/dolibarr/dev/initdata/mysqldump_dolibarr_3.5.0.sql
 postgresql:
-    install: 0
+    install: '1'
     settings:
-        root_password: '123'
+        root_password: root
         user_group: postgres
         encoding: UTF8
         version: '9.3'
     databases: {  }
-    adminer: 0
+    adminer: '1'
 mariadb:
     install: 0
     root_password: '123'
diff --git a/dev/vagrant/dolibarrdev/puphpet/files/dot/.gitignore b/dev/vagrant/dolibarrdev/puphpet/files/dot/.gitignore
index dcf60545594365a2c0d5c15de55e61dc5f7b9f73..e9b023ea6a627525281203c45cae5050959b19e1 100644
--- a/dev/vagrant/dolibarrdev/puphpet/files/dot/.gitignore
+++ b/dev/vagrant/dolibarrdev/puphpet/files/dot/.gitignore
@@ -1,4 +1 @@
-ssh/id_rsa
-ssh/id_rsa.pub
-ssh/insecure_private_key
-ssh/id_rsa.ppk
\ No newline at end of file
+ssh/*
\ No newline at end of file
diff --git a/dev/vagrant/dolibarrdev/puphpet/files/startup-always/empty b/dev/vagrant/dolibarrdev/puphpet/files/startup-always/empty
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/dev/vagrant/dolibarrdev/puphpet/files/startup-once/empty b/dev/vagrant/dolibarrdev/puphpet/files/startup-once/empty
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/manifest.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/manifest.pp
index 57f759e5531b3c7a140fd055177692fd81b5a821..6f560f8735f22ab77cb29b4d62e73a6af143642b 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/manifest.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/manifest.pp
@@ -279,8 +279,14 @@ if hash_key_equals($mailcatcher_values, 'install', 1) {
   }
 
   if ! defined(Class['supervisord']) {
+    class{ 'puphpet::python::pip': }
+
     class { 'supervisord':
-      install_pip => true,
+      install_pip => false,
+      require     => [
+        Class['my_fw::post'],
+        Class['Puphpet::Python::Pip'],
+      ],
     }
   }
 
@@ -467,15 +473,16 @@ if hash_key_equals($apache_values, 'install', 1) {
     $apache_vhosts = merge($apache_values['vhosts'], {
       'default_vhost_80'  => {
         'servername'    => 'default',
-        'serveraliases' => ['*'],
         'docroot'       => '/var/www/default',
         'port'          => 80,
+        'default_vhost' => true,
       },
       'default_vhost_443' => {
         'servername'    => 'default',
-        'serveraliases' => ['*'],
         'docroot'       => '/var/www/default',
         'port'          => 443,
+        'default_vhost' => true,
+        'ssl'           => 1,
       },
     })
   } else {
@@ -515,11 +522,11 @@ if hash_key_equals($apache_values, 'install', 1) {
 
       create_resources(apache::vhost, { "${key}" => merge($vhost, {
           'custom_fragment' => template('puphpet/apache/custom_fragment.erb'),
-          'ssl'             => 'ssl'           in $vhost and str2bool($vhost['ssl']) ? { true => true, default => false },
-          'ssl_cert'        => 'ssl_cert'      in $vhost and $vhost['ssl_cert']      ? { undef => undef, '' => undef, default => $vhost['ssl_cert'] },
-          'ssl_key'         => 'ssl_key'       in $vhost and $vhost['ssl_key']       ? { undef => undef, '' => undef, default => $vhost['ssl_key'] },
-          'ssl_chain'       => 'ssl_chain'     in $vhost and $vhost['ssl_chain']     ? { undef => undef, '' => undef, default => $vhost['ssl_chain'] },
-          'ssl_certs_dir'   => 'ssl_certs_dir' in $vhost and $vhost['ssl_certs_dir'] ? { undef => undef, '' => undef, default => $vhost['ssl_certs_dir'] }
+          'ssl'             => 'ssl' in $vhost and str2bool($vhost['ssl']) ? { true => true, default => false },
+          'ssl_cert'        => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_cert'],      default => undef },
+          'ssl_key'         => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_key'],       default => undef },
+          'ssl_chain'       => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_chain'],     default => undef },
+          'ssl_certs_dir'   => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_certs_dir'], default => undef }
         })
       })
 
@@ -662,10 +669,6 @@ if hash_key_equals($nginx_values, 'install', 1) {
     }
   } elsif hash_key_equals($hhvm_values, 'install', 1) {
     $fastcgi_pass        = '127.0.0.1:9000'
-
-    set_php5_fpm_sock_group_and_user { 'hhvm':
-      require => Package['nginx'],
-    }
   } else {
     $fastcgi_pass        = ''
   }
@@ -1096,7 +1099,7 @@ if hash_key_equals($xhprof_values, 'install', 1)
   }
 
   if hash_key_equals($apache_values, 'install', 1) {
-    $xhprof_webroot_location = $puphpet::params::apache_webroot_location
+    $xhprof_webroot_location = '/var/www/default'
     $xhprof_webserver_service = 'httpd'
   } elsif hash_key_equals($nginx_values, 'install', 1) {
     $xhprof_webroot_location = $puphpet::params::nginx_webroot_location
@@ -1216,11 +1219,11 @@ if hash_key_equals($mysql_values, 'install', 1) {
 
   if hash_key_equals($mysql_values, 'adminer', 1) and $mysql_php_installed {
     if hash_key_equals($apache_values, 'install', 1) {
-      $mysql_adminer_webroot_location = $puphpet::params::apache_webroot_location
+      $mysql_adminer_webroot_location = '/var/www/default'
     } elsif hash_key_equals($nginx_values, 'install', 1) {
       $mysql_adminer_webroot_location = $puphpet::params::nginx_webroot_location
     } else {
-      $mysql_adminer_webroot_location = $puphpet::params::apache_webroot_location
+      $mysql_adminer_webroot_location = '/var/www/default'
     }
 
     class { 'puphpet::adminer':
@@ -1329,11 +1332,11 @@ if hash_key_equals($postgresql_values, 'install', 1) {
 
   if hash_key_equals($postgresql_values, 'adminer', 1) and $postgresql_php_installed {
     if hash_key_equals($apache_values, 'install', 1) {
-      $postgresql_adminer_webroot_location = $puphpet::params::apache_webroot_location
+      $postgresql_adminer_webroot_location = '/var/www/default'
     } elsif hash_key_equals($nginx_values, 'install', 1) {
       $postgresql_adminer_webroot_location = $puphpet::params::nginx_webroot_location
     } else {
-      $postgresql_adminer_webroot_location = $puphpet::params::apache_webroot_location
+      $postgresql_adminer_webroot_location = '/var/www/default'
     }
 
     class { 'puphpet::adminer':
@@ -1364,7 +1367,7 @@ define postgresql_db (
     $table = "${name}.*"
 
     exec{ "${name}-import":
-      command     => "psql ${name} < ${sql_file}",
+      command     => "sudo -u postgres psql ${name} < ${sql_file}",
       logoutput   => true,
       refreshonly => $refresh,
       require     => Postgresql::Server::Db[$name],
@@ -1491,11 +1494,11 @@ if hash_key_equals($mariadb_values, 'install', 1) {
 
   if hash_key_equals($mariadb_values, 'adminer', 1) and $mariadb_php_installed {
     if hash_key_equals($apache_values, 'install', 1) {
-      $mariadb_adminer_webroot_location = $puphpet::params::apache_webroot_location
+      $mariadb_adminer_webroot_location = '/var/www/default'
     } elsif hash_key_equals($nginx_values, 'install', 1) {
       $mariadb_adminer_webroot_location = $puphpet::params::nginx_webroot_location
     } else {
-      $mariadb_adminer_webroot_location = $puphpet::params::apache_webroot_location
+      $mariadb_adminer_webroot_location = '/var/www/default'
     }
 
     class { 'puphpet::adminer':
@@ -1662,7 +1665,7 @@ if $beanstalkd_values == undef {
 }
 
 if hash_key_equals($apache_values, 'install', 1) {
-  $beanstalk_console_webroot_location = "${puphpet::params::apache_webroot_location}/beanstalk_console"
+  $beanstalk_console_webroot_location = '/var/www/default/beanstalk_console'
 } elsif hash_key_equals($nginx_values, 'install', 1) {
   $beanstalk_console_webroot_location = "${puphpet::params::nginx_webroot_location}/beanstalk_console"
 } else {
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/lib/puppet/parser/functions/hash_key_true.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/lib/puppet/parser/functions/hash_key_true.rb
new file mode 100644
index 0000000000000000000000000000000000000000..fd495f8f1430655fc823bd3159594adafb7bf6ab
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/lib/puppet/parser/functions/hash_key_true.rb
@@ -0,0 +1,42 @@
+#
+# hash_key_true.rb
+#
+
+module Puppet::Parser::Functions
+
+  newfunction(:hash_key_true, :type => :rvalue, :doc => <<-'ENDHEREDOC') do |args|
+
+    Returns true if the key within hash is truthy
+    ENDHEREDOC
+
+    unless args.length == 2
+      raise Puppet::ParseError, ("hash_key_true(): wrong number of arguments (#{args.length}; must be 2)")
+    end
+
+    arr = args[0]
+    key = args[1]
+
+    unless arr.is_a?(Hash)
+      return false
+    end
+
+    unless arr.has_key?(key)
+      return false
+    end
+
+    if arr[key].nil?
+      return false
+    end
+
+    if arr[key].empty?
+      return false
+    end
+
+    if arr[key] == 'false'
+      return false
+    end
+
+    return true
+
+  end
+end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/manifests/hhvm.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/manifests/hhvm.pp
index 90083232cdc7c8402a859823e82981f75948fa5e..3b27ab90af63d727b7580b5e8e6436b4f4a492a6 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/manifests/hhvm.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/manifests/hhvm.pp
@@ -69,17 +69,39 @@ class puphpet::hhvm(
       }
     }
     'centos': {
+      $jemalloc_url = 'http://files.puphpet.com/centos6/jemalloc-3.6.0-1.el6.x86_64.rpm'
+      $jemalloc_download_location = '/.puphpet-stuff/jemalloc-3.6.0-1.el6.x86_64.rpm'
+
+      $require = defined(Class['my_fw::post']) ? {
+        true    => Class['my_fw::post'],
+        default => [],
+      }
+
+      exec { "download jemalloc to ${download_location}":
+        creates => $download_location,
+        command => "wget --quiet --tries=5 --connect-timeout=10 -O '${jemalloc_download_location}' '${jemalloc_url}'",
+        timeout => 30,
+        path    => '/usr/bin',
+        require => $require
+      }
+
+      package { 'jemalloc':
+        ensure   => latest,
+        provider => yum,
+        source   => $download_location,
+        require  => Exec["download jemalloc to ${download_location}"],
+      }
+
       yum::managed_yumrepo { 'hop5':
         descr    => 'hop5 repository',
         baseurl  => 'http://www.hop5.in/yum/el6/',
         gpgkey   => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-HOP5',
         enabled  => 1,
         gpgcheck => 0,
-        priority => 1
+        priority => 1,
       }
     }
   }
-
   if $real_webserver == 'apache2' {
     if ! defined(Class['apache::mod::mime']) {
       class { 'apache::mod::mime': }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/manifests/python/pip.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/manifests/python/pip.pp
new file mode 100644
index 0000000000000000000000000000000000000000..14b13fe08c6352ab2b6f42a4b5002cefedc992f6
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/puphpet/manifests/python/pip.pp
@@ -0,0 +1,22 @@
+class puphpet::python::pip {
+
+  Exec { path => [ '/usr/bin/', '/usr/local/bin', '/bin', '/usr/local/sbin', '/usr/sbin', '/sbin' ] }
+
+  if ! defined(Package['python-setuptools']) {
+    package { 'python-setuptools': }
+  }
+
+  exec { 'easy_install pip':
+    unless  => 'which pip',
+    require => Package['python-setuptools'],
+  }
+
+  if $::osfamily == 'RedHat' {
+    exec { 'rhel pip_provider_name_fix':
+      command     => 'alternatives --install /usr/bin/pip-python pip-python /usr/bin/pip 1',
+      subscribe   => Exec['easy_install pip'],
+      unless      => 'which pip-python',
+    }
+  }
+
+}
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/.fixtures.yml b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/.fixtures.yml
index 15f96922e017ae4ca430923922ab8f4335997caf..3f18ef2fca235831f4d6d0f53783226c383c3f02 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/.fixtures.yml
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/.fixtures.yml
@@ -1,6 +1,10 @@
 fixtures:
   repositories:
-    stdlib: "git://github.com/puppetlabs/puppetlabs-stdlib"
-    concat: "git://github.com/puppetlabs/puppetlabs-concat"
+    'stdlib':
+      repo: 'git://github.com/puppetlabs/puppetlabs-stdlib'
+      ref: '4.1.0'
+    'concat':
+      repo: 'git://github.com/puppetlabs/puppetlabs-concat'
+      ref: '1.0.1'
   symlinks:
     supervisord: "#{source_dir}"
\ No newline at end of file
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/.travis.yml b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/.travis.yml
index 6e544518c19fefc158b037f0d222cd90801fb403..bc96a165e59afefc0ec1f792b51724aa3907cadb 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/.travis.yml
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/.travis.yml
@@ -1,21 +1,28 @@
 language: ruby
 bundler_args: --without development
-script: "bundle exec rake spec lint"
+script: "bundle exec rake test"
 rvm:
 - 1.8.7
 - 1.9.3
 - 2.0.0
 env:
-  matrix:
-  - PUPPET_GEM_VERSION="~> 2.7.0"
-  - PUPPET_GEM_VERSION="~> 3.3.0"
-  - PUPPET_GEM_VERSION="~> 3.4.0"
+  - PUPPET_VERSION="~> 2.7.0"
+  - PUPPET_VERSION="~> 3.1.0"
+  - PUPPET_VERSION="~> 3.2.0"
+  - PUPPET_VERSION="~> 3.3.0"
+  - PUPPET_VERSION="~> 3.4.0"
+  - PUPPET_VERSION="~> 3.5.0"
+  - PUPPET_VERSION="~> 3.6.0"
 matrix:
   exclude:
+  - rvm: 2.0.0
+    env: PUPPET_VERSION="~> 2.7.0"
   - rvm: 1.9.3
-    env: PUPPET_GEM_VERSION="~> 2.7.0"
+    env: PUPPET_VERSION="~> 2.7.0"
   - rvm: 2.0.0
-    env: PUPPET_GEM_VERSION="~> 2.7.0"
+    env: PUPPET_VERSION="~> 3.1.0"
+  - rvm: 1.8.7
+    env: PUPPET_VERSION="~> 3.2.0"
 notifications:
   email: false
 
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Changelog b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Changelog
index ab4faa445ffda9ceae49460a44dce7ef6e69f187..b1e3228ff02d94bab0616db67626afd95d40fab3 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Changelog
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Changelog
@@ -1,3 +1,66 @@
+2014-06-20 - v0.4.0
+
+Fixes:
+
+- Removed root as group and replaced with uid 0 to enhance system
+compatibility
+
+Enhancements:
+
+- Made package provider a user definable param see supervisord::package_provider and README for details of how to change this.
+- All define types can now be automatically pulled in from hiera see example https://github.com/ajcrowe/puppet-supervisord#configure-a-program
+- You can now override the default include path of $config_include/*.conf with your own array using $config_dirs. Bear in mind this would need to include whatever you set $config_include to be, with *.conf on the end.
+
+Many thanks for the PRs from @jasperla, @mvantellingen for the bug report on the service name and @hasc for the enhancement ideas.
+
+2014-06-06 - v0.3.3
+
+Fixes:
+
+- Fixed typo in stopwaitsec param, should have been stopwaitsecs, thanks to @rchrd2
+
+2014-05-03 - v0.3.2
+
+Changes:
+
+- Added supervisord::executable_ctl variable for supervisorctl binary path, thanks to @bpgoldsb
+
+2014-04-22 - v0.3.1
+
+Fixes:
+
+- Fixed typo in unix_socket_group param, thanks to @dig412
+
+2014-03-11 - v0.3.0
+
+Fixes:
+
+- Fixed typo in fcgi config
+- Fixed typo in supervisord config with minfds and minprocs, thanks to @peefourtee
+- Typo in README fixed thanks to @hopkinsth
+- Removed refreshonly from pip_install exec resource
+- Number of syntax fixes thanks to `puppet lint`
+
+Important Changes:
+
+- Lots of input validation has been added **PLEASE** check your config works before upgrading!
+- Changed init_extras naming to defaults and cleaned things up.
+- Starting and stopping apps is now done with supervisorctl commands to avoid service restarts
+
+Other Changes:
+
+- CSV functions now order things consistently
+- Included description for classes and functions
+- Expanded spec testing built with Travis CI
+- Added beaker acceptance tests
+- Added greater validation of various parameters
+- Added coverage reporting for resources
+
+To-Do:
+
+- Add support for additional OS families such as Solaris.
+
+
 2013-10-31 - v0.2.3
 
 Fixes:
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Gemfile b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Gemfile
index 8612255f5b8828898564db4ea415d9ef580205a7..ba9a19d533ae57395e4997ba1a51c41dc831687c 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Gemfile
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Gemfile
@@ -1,14 +1,26 @@
 source 'https://rubygems.org'
 
-group :development, :test do
+group :test do
   gem 'rake'
-  gem 'puppetlabs_spec_helper', :require => false
-  gem 'rspec-system-puppet', '~> 2.0'
-  gem 'puppet-lint', '~> 0.3.2'
+  gem 'puppet-lint'
+  gem 'puppet-syntax'
+  gem 'puppetlabs_spec_helper'
+  gem 'rspec-puppet', :git => 'https://github.com/rodjek/rspec-puppet.git' , :ref => 'c44381a240ec420d4ffda7bffc55ee4d9c08d682'
+  gem 'rspec', '2.14.1'
 end
 
-if puppetversion = ENV['PUPPET_GEM_VERSION']
-  gem 'puppet', puppetversion, :require => false
+group :development do
+  gem 'travis'
+  gem 'travis-lint'
+  gem 'beaker'
+  gem 'beaker-rspec'
+  gem 'pry'
+  gem 'guard-rake'
+end
+
+
+if puppetversion = ENV['PUPPET_VERSION']
+  gem 'puppet', puppetversion
 else
-  gem 'puppet', :require => false
+  gem 'puppet', '~> 3.4.0'
 end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Modulefile b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Modulefile
index 4a0552115dab25111aa8986c960c7adb7c8134bf..0c99b04baf2c23e8fde245fee3963ebd02c06f71 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Modulefile
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Modulefile
@@ -1,5 +1,5 @@
 name    'ajcrowe-supervisord'
-version '0.2.3'
+version '0.4.0'
 source 'git@github.com/ajcrowe/puppet-supervisord.git'
 author 'Alex Crowe'
 license 'Apache License, Version 2.0'
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/README.md b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/README.md
index a8419a09082a7d66d2d5d534e54d1b239d12ac2f..b454cd9307a6dd620724323889858dbc2231cafe 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/README.md
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/README.md
@@ -4,7 +4,7 @@
 
 Puppet module to manage the [supervisord](http://supervisord.org/) process control system.
 
-Functions available to configure 
+Functions available to configure
 
 * [programs](http://supervisord.org/configuration.html#program-x-section-settings)
 * [groups](http://supervisord.org/configuration.html#group-x-section-settings)
@@ -31,10 +31,16 @@ class supervisord {
 }
 ```
 
-This will download [setuptool](https://bitbucket.org/pypa/setuptools) and install pip with easy_install. 
+This will download [setuptool](https://bitbucket.org/pypa/setuptools) and install pip with easy_install.
 
 You can pass a specific url with `$setuptools_url = 'url'`
 
+### Install without pip
+
+If you want to use your system package manager you can specify that with `supervisord::package_provider`.
+
+You'll also likely need to adjust the `supervisord::service_name` to match that installed by the system package. If you're using Debian or Redhat OS families you'll also want to disable the init scripts with `supervisord::install_init = false`.
+
 Note: Only Debian and RedHat families have an init script currently.
 
 ### Configure a program
@@ -61,23 +67,61 @@ supervisord::program { 'myprogram':
 }
 ```
 
+Or you can fully define your programs in hiera:
+
+```yaml
+supervisord::programs:
+  'myprogram':
+    command: 'command --args'
+    autostart: yes
+    autorestart: 'true'
+    environment:
+      HOME: '/home/myuser'
+      PATH: '/bin:/sbin:/usr/bin:/usr/sbin'
+      SECRET: 'mysecret'
+```
+
 ### Configure a group
 
 ```ruby
 supervisord::group { 'mygroup':
   priority => 100,
-  program  => ['program1', 'program2', 'program3']
+  programs  => ['program1', 'program2', 'program3']
+}
+```
+
+### Configure an eventlistener
+
+```ruby
+supervisord::eventlistener { 'mylistener':
+  command  => 'command --args',
+  events   => ['PROCESS_STATE', 'PROCESS_STATE_START']
+  priority => '100',
+  env_var  => 'my_common_envs'
+}
+```
+
+### Run supervisorctl Commands
+
+Should you need to run a sequence of command with `supervisorctl` you can use the define type `supervisord::supervisorctl`
+
+```ruby
+supervisord::supervisorctl { 'restart_myapp':
+  command => 'restart',
+  process => 'myapp'
 }
 ```
 
+You can also issue a command without specifying a process.
+
 ### Development
 
 If you have suggestions or improvements please file an issue or pull request, i'll try and sort them as quickly as possble.
 
-If you submit a pull please try and include tests for the new functionality. The module is tested with [Travis-CI](https://travis-ci.org/ajcrowe/puppet-supervisord).
+If you submit a pull please try and include tests for the new functionality/fix. The module is tested with [Travis-CI](https://travis-ci.org/ajcrowe/puppet-supervisord).
 
 
 ### Credits
 
 * Debian init script sourced from the system package.
-* RedHat/Centos init script sourced from https://github.com/Supervisor/initscripts 
+* RedHat/Centos init script sourced from https://github.com/Supervisor/initscripts
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Rakefile b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Rakefile
index e00f7d11877dbd4ea875de657788f846f255ae6f..cd592af48f4132703ada25389cf9c6f2ae446267 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Rakefile
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/Rakefile
@@ -1,7 +1,28 @@
 require 'puppetlabs_spec_helper/rake_tasks'
 require 'puppet-lint/tasks/puppet-lint'
-require 'rspec-system/rake_task'
+require 'puppet-syntax/tasks/puppet-syntax'
 
 PuppetLint.configuration.send('disable_80chars')
 PuppetLint.configuration.send('disable_class_inherits_from_params_class')
-PuppetLint.configuration.send('disable_documentation')
+PuppetLint.configuration.send('disable_quoted_booleans')
+PuppetLint.configuration.send('disable_autoloader_layout')
+
+exclude_paths = [
+  "pkg/**/*",
+  "vendor/**/*",
+  "spec/**/*",
+]
+PuppetLint.configuration.ignore_paths = exclude_paths
+PuppetSyntax.exclude_paths = exclude_paths
+
+desc "Acceptance Tests"
+RSpec::Core::RakeTask.new(:acceptance) do |t|
+  t.pattern = 'spec/acceptance'
+end
+
+desc "Test Suite"
+task :test => [
+  :lint,
+  :syntax,
+  :spec
+]
\ No newline at end of file
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/lib/puppet/parser/functions/array2csv.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/lib/puppet/parser/functions/array2csv.rb
index cfa52b2bbf2f67050e0b5ede74535531cf47f88c..6d34d5d54744181e27447ed0a878d16cd9041b80 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/lib/puppet/parser/functions/array2csv.rb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/lib/puppet/parser/functions/array2csv.rb
@@ -1,14 +1,12 @@
 #
 # Converts the array to a csv string
 #
-#
 # $array = [ 'string1', 'string2', 'string3' ]
 #
 # becomes:
 #
 # $string = "string1,string2,string3"
 #
-
 module Puppet::Parser::Functions
   newfunction(:array2csv, :type => :rvalue, :doc => <<-'EOS'
     Returns a sorted csv formatted string from an array in the form
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/lib/puppet/parser/functions/hash2csv.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/lib/puppet/parser/functions/hash2csv.rb
index 6098b67367d1230c7ba6470722c8b35e6de6c236..5371328f2ff980627e55520cc3b87879d93dfb30 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/lib/puppet/parser/functions/hash2csv.rb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/lib/puppet/parser/functions/hash2csv.rb
@@ -1,7 +1,6 @@
 #
 # Converts the hash to a csv string
 #
-#
 # $hash = {
 #   HOME   => '/home/user',
 #   ENV1   => 'env1',
@@ -12,7 +11,6 @@
 #
 # $string = "HOME='/home/user',ENV1='env1',SECRET='secret'"
 #
-
 module Puppet::Parser::Functions
   newfunction(:hash2csv, :type => :rvalue, :doc => <<-'EOS'
     Returns a csv formatted string from an hash in the form
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/config.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/config.pp
index cc8b1ee49d00b05fcef609cb5f4de75e9c9bdd89..93713729e8b5e4a546c7a934465364edc75a17d7 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/config.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/config.pp
@@ -1,6 +1,16 @@
+# Class: supervisord::config
+#
+# Configuration class for supervisor init and conf directories
+#
 class supervisord::config inherits supervisord {
 
-  file { [ "${supervisord::config_include}", "${supervisord::log_path}"]:
+  file { $supervisord::config_include:
+    ensure => directory,
+    owner  => 'root',
+    mode   => '0755'
+  }
+
+  file { $supervisord::log_path:
     ensure => directory,
     owner  => 'root',
     mode   => '0755'
@@ -15,30 +25,26 @@ class supervisord::config inherits supervisord {
   }
 
   if $supervisord::install_init {
-
-    $osname = downcase($::osfamily)
-
     file { '/etc/init.d/supervisord':
       ensure  => present,
       owner   => 'root',
       mode    => '0755',
-      content => template("supervisord/init/${osname}_init.erb")
+      content => template("supervisord/init/${::osfamily}/init.erb")
     }
 
-    if $supervisord::init_extras {
-      file { $supervisord::init_extras:
+    if $supervisord::init_defaults {
+      file { $supervisord::init_defaults:
         ensure  => present,
         owner   => 'root',
         mode    => '0755',
-        content => template("supervisord/init/${osname}_extra.erb")
+        content => template("supervisord/init/${::osfamily}/defaults.erb")
       }
     }
-
   }
 
   concat { $supervisord::config_file:
     owner => 'root',
-    group => 'root',
+    group => '0',
     mode  => '0755'
   }
 
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/eventlistener.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/eventlistener.pp
index 41b7cf6c7309c9d6a581df12db2038a752e18915..fd52d6e4da400c03fa348c5610bd709e04d37e47 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/eventlistener.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/eventlistener.pp
@@ -1,8 +1,16 @@
+# Define: supervisord::eventlistener
+#
+# This define creates an eventlistener configuration file
+#
+# Documentation on parameters available at:
+# http://supervisord.org/configuration.html#eventlistener-x-section-settings
+#
 define supervisord::eventlistener(
   $command,
   $ensure                  = present,
+  $ensure_process          = 'running',
+  $buffer_size             = 10,
   $events                  = undef,
-  $buffer_size             = undef,
   $result_handler          = undef,
   $env_var                 = undef,
   $process_name            = undef,
@@ -15,16 +23,16 @@ define supervisord::eventlistener(
   $startretries            = undef,
   $exitcodes               = undef,
   $stopsignal              = undef,
-  $stopwaitsec             = undef,
+  $stopwaitsecs            = undef,
   $stopasgroup             = undef,
   $killasgroup             = undef,
   $user                    = undef,
   $redirect_stderr         = undef,
-  $stdout_logfile          = "${supervisord::log_path}/eventlistener_${name}.log",
+  $stdout_logfile          = "eventlistener_${name}.log",
   $stdout_logfile_maxbytes = undef,
   $stdout_logfile_backups  = undef,
   $stdout_events_enabled   = undef,
-  $stderr_logfile          = "${supervisord::log_path}/eventlistener_${name}.error",
+  $stderr_logfile          = "eventlistener_${name}.error",
   $stderr_logfile_maxbytes = undef,
   $stderr_logfile_backups  = undef,
   $stderr_events_enabled   = undef,
@@ -36,11 +44,45 @@ define supervisord::eventlistener(
 
   include supervisord
 
+  # parameter validation
+  validate_string($command)
+  validate_re($ensure_process, ['running', 'stopped', 'removed'])
+  validate_re($buffer_size, '^\d+')
+  if $events { validate_array($events) }
+  if $result_handler { validate_string($result_handler) }
+  if $numprocs { validate_re($numprocs, '^\d+')}
+  if $numprocs_start { validate_re($numprocs_start, '^\d+')}
+  if $priority { validate_re($priority, '^\d+') }
+  if $autostart { validate_bool($autostart) }
+  if $autorestart { validate_re($autorestart, ['true', 'false', 'unexpected']) }
+  if $startsecs { validate_re($startsecs, '^\d+')}
+  if $startretries { validate_re($startretries, '^\d+')}
+  if $exitcodes { validate_string($exitcodes)}
+  if $stopsignal { validate_re($stopsignal, ['TERM', 'HUP', 'INT', 'QUIT', 'KILL', 'USR1', 'USR2']) }
+  if $stopwaitsecs { validate_re($stopwaitsecs, '^\d+')}
+  if $stopasgroup { validate_bool($stopasgroup) }
+  if $killasgroup { validate_bool($killasgroup) }
+  if $user { validate_string($user) }
+  if $redirect_stderr { validate_bool($redirect_stderr) }
+  validate_string($stdout_logfile)
+  if $stdout_logfile_maxbytes { validate_string($stdout_logfile_maxbytes) }
+  if $stdout_logfile_backups { validate_re($stdout_logfile_backups, '^\d+')}
+  if $stdout_events_enabled { validate_bool($stdout_events_enabled) }
+  validate_string($stderr_logfile)
+  if $stderr_logfile_maxbytes { validate_string($stderr_logfile_maxbytes) }
+  if $stderr_logfile_backups { validate_re($stderr_logfile_backups, '^\d+')}
+  if $stderr_events_enabled { validate_bool($stderr_events_enabled) }
+  if $directory { validate_absolute_path($directory) }
+  if $umask { validate_re($umask, '^[0-7][0-7][0-7]$') }
+
+  # convert environment data into a csv
   if $env_var {
-    $env_hash = hiera($env_var)
+    $env_hash = hiera_hash($env_var)
+    validate_hash($env_hash)
     $env_string = hash2csv($env_hash)
   }
   elsif $environment {
+    validate_hash($environment)
     $env_string = hash2csv($environment)
   }
 
@@ -55,6 +97,22 @@ define supervisord::eventlistener(
     owner   => 'root',
     mode    => '0755',
     content => template('supervisord/conf/eventlistener.erb'),
-    notify  => Class['supervisord::service']
+    notify  => Class['supervisord::reload']
+  }
+
+  case $ensure_process {
+    'stopped': {
+      supervisord::supervisorctl { "stop_${name}":
+        command => 'stop',
+        process => $name
+      }
+    }
+    'removed': {
+      supervisord::supervisorctl { "remove_${name}":
+        command => 'remove',
+        process => $name
+      }
+    }
+    default: { }
   }
 }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/fcgi_program.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/fcgi_program.pp
index 923b1798bffcc23d65b5d0d2258fc38b226297f1..633b024917ecb6ae2d5eb132ba8cdc6b5e8a5be6 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/fcgi_program.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/fcgi_program.pp
@@ -1,7 +1,15 @@
+# Define: supervisord::fcgi_program
+#
+# This define creates an eventlistener configuration file
+#
+# Documentation on parameters available at:
+# http://supervisord.org/configuration.html#fcgi-program-x-section-settings
+#
 define supervisord::fcgi_program(
   $command,
   $socket,
   $ensure                  = present,
+  $ensure_process          = 'running',
   $socket_owner            = undef,
   $socket_mode             = undef,
   $env_var                 = undef,
@@ -15,17 +23,17 @@ define supervisord::fcgi_program(
   $startretries            = undef,
   $exitcodes               = undef,
   $stopsignal              = undef,
-  $stopwaitsec             = undef,
+  $stopwaitsecs            = undef,
   $stopasgroup             = undef,
   $killasgroup             = undef,
   $user                    = undef,
   $redirect_stderr         = undef,
-  $stdout_logfile          = "${supervisord::log_path}/fcgi-program_${name}.log",
+  $stdout_logfile          = "fcgi-program_${name}.log",
   $stdout_logfile_maxbytes = undef,
   $stdout_logfile_backups  = undef,
   $stdout_capture_maxbytes = undef,
   $stdout_events_enabled   = undef,
-  $stderr_logfile          = "${supervisord::log_path}/fcgi-program_${name}.error",
+  $stderr_logfile          = "fcgi-program_${name}.error",
   $stderr_logfile_maxbytes = undef,
   $stderr_logfile_backups  = undef,
   $stderr_capture_maxbytes = undef,
@@ -38,11 +46,46 @@ define supervisord::fcgi_program(
 
   include supervisord
 
+  # parameter validation
+  validate_string($command)
+  validate_re($ensure_process, ['running', 'stopped', 'removed'])
+  validate_re($socket, ['^tcp:\/\/.*:\d+$', '^unix:\/\/\/'])
+  if $process_name { validate_string($process_name) }
+  if $numprocs { validate_re($numprocs, '^\d+')}
+  if $numprocs_start { validate_re($numprocs_start, '^\d+')}
+  if $priority { validate_re($priority, '^\d+') }
+  if $autostart { validate_bool($autostart) }
+  if $autorestart { validate_re($autorestart, ['true', 'false', 'unexpected']) }
+  if $startsecs { validate_re($startsecs, '^\d+')}
+  if $startretries { validate_re($startretries, '^\d+')}
+  if $exitcodes { validate_string($exitcodes)}
+  if $stopsignal { validate_re($stopsignal, ['TERM', 'HUP', 'INT', 'QUIT', 'KILL', 'USR1', 'USR2']) }
+  if $stopwaitsecs { validate_re($stopwaitsecs, '^\d+')}
+  if $stopasgroup { validate_bool($stopasgroup) }
+  if $killasgroup { validate_bool($killasgroup) }
+  if $user { validate_string($user) }
+  if $redirect_stderr { validate_bool($redirect_stderr) }
+  validate_string($stdout_logfile)
+  if $stdout_logfile_maxbytes { validate_string($stdout_logfile_maxbytes) }
+  if $stdout_logfile_backups { validate_re($stdout_logfile_backups, '^\d+')}
+  if $stdout_capture_maxbytes { validate_string($stdout_capture_maxbytes) }
+  if $stdout_events_enabled { validate_bool($stdout_events_enabled) }
+  validate_string($stderr_logfile)
+  if $stderr_logfile_maxbytes { validate_string($stderr_logfile_maxbytes) }
+  if $stderr_logfile_backups { validate_re($stderr_logfile_backups, '^\d+')}
+  if $stderr_capture_maxbytes { validate_string($stderr_capture_maxbytes) }
+  if $stderr_events_enabled { validate_bool($stderr_events_enabled) }
+  if $directory { validate_absolute_path($directory) }
+  if $umask { validate_re($umask, '^[0-7][0-7][0-7]$') }
+
+  # convert environment data into a csv
   if $env_var {
-    $env_hash = hiera($env_var)
+    $env_hash = hiera_hash($env_var)
+    validate_hash($env_hash)
     $env_string = hash2csv($env_hash)
   }
   elsif $environment {
+    validate_hash($environment)
     $env_string = hash2csv($environment)
   }
 
@@ -53,6 +96,22 @@ define supervisord::fcgi_program(
     owner   => 'root',
     mode    => '0755',
     content => template('supervisord/conf/fcgi_program.erb'),
-    notify  => Class['supervisord::service']
+    notify  => Class['supervisord::reload']
+  }
+
+  case $ensure_process {
+    'stopped': {
+      supervisord::supervisorctl { "stop_${name}":
+        command => 'stop',
+        process => $name
+      }
+    }
+    'removed': {
+      supervisord::supervisorctl { "remove_${name}":
+        command => 'remove',
+        process => $name
+      }
+    }
+    default: { }
   }
 }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/group.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/group.pp
index 0f6b1ca2adc7618efc3c2fe33aeddf55efb06b7b..45cb29cf29000c7d4f67d55b85c989b21955351a 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/group.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/group.pp
@@ -1,3 +1,10 @@
+# Define: supervisord::group
+#
+# This define creates an group configuration file
+#
+# Documentation on parameters available at:
+# http://supervisord.org/configuration.html#group-x-section-settings
+#
 define supervisord::group (
   $programs,
   $ensure   = present,
@@ -6,6 +13,10 @@ define supervisord::group (
 
   include supervisord
 
+  # parameter validation
+  validate_array($programs)
+  if $priority { validate_re($priority, '^\d+', "invalid priority value of: ${priority}") }
+
   $progstring = array2csv($programs)
   $conf = "${supervisord::config_include}/group_${name}.conf"
 
@@ -13,6 +24,7 @@ define supervisord::group (
     ensure  => $ensure,
     owner   => 'root',
     mode    => '0755',
-    content => template('supervisord/conf/group.erb')
+    content => template('supervisord/conf/group.erb'),
+    notify  => Class['supervisord::reload']
   }
 }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/init.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/init.pp
index 801c46b3b368542da671454dfed9bc8bc33cf73f..1d2d55148d9ec11d30bf6e1e9d4ef9747bf8690f 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/init.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/init.pp
@@ -1,12 +1,18 @@
-# This class installs supervisord and configured it to run on boot
+# Class: supervisord
+#
+# This class installs supervisord via pip
+#
 class supervisord(
   $package_ensure       = $supervisord::params::package_ensure,
+  $package_provider     = $supervisord::params::package_provider,
   $service_ensure       = $supervisord::params::service_ensure,
+  $service_name         = $supervisord::params::service_name,
   $install_init         = $supervisord::params::install_init,
   $install_pip          = false,
-  $init_extras          = $supervisord::params::init_extras,
+  $init_defaults        = $supervisord::params::init_defaults,
   $setuptools_url       = $supervisord::params::setuptools_url,
   $executable           = $supervisord::params::executable,
+  $executable_ctl       = $supervisord::params::executable_ctl,
 
   $log_path             = $supervisord::params::log_path,
   $log_file             = $supervisord::params::log_file,
@@ -19,20 +25,20 @@ class supervisord(
   $nodaemon             = $supervisord::params::nodaemon,
   $minfds               = $supervisord::params::minfds,
   $minprocs             = $supervisord::params::minprocs,
-  $config_path          = $supervisord::params::config_path,
   $config_include       = $supervisord::params::config_include,
   $config_file          = $supervisord::params::config_file,
+  $config_dirs          = undef,
   $umask                = $supervisord::params::umask,
 
   $unix_socket          = $supervisord::params::unix_socket,
   $unix_socket_file     = $supervisord::params::unix_socket_file,
   $unix_socket_mode     = $supervisord::params::unix_socket_mode,
   $unix_socket_owner    = $supervisord::params::unix_socket_owner,
-  $unix_scoket_group    = $supervisord::params::unix_socket_group,
+  $unix_socket_group    = $supervisord::params::unix_socket_group,
 
   $inet_server          = $supervisord::params::inet_server,
-  $inet_server_hostname = $supervisord::params::inet_hostname,
-  $inet_server_port     = $supervisord::params::inet_port,
+  $inet_server_hostname = $supervisord::params::inet_server_hostname,
+  $inet_server_port     = $supervisord::params::inet_server_port,
 
   $unix_auth            = false,
   $unix_username        = undef,
@@ -47,26 +53,76 @@ class supervisord(
   $childlogdir          = undef,
   $environment          = undef,
   $env_var              = undef,
+  $directory            = undef,
   $strip_ansi           = false,
-  $nocleanup            = false
+  $nocleanup            = false,
+
+  $eventlisteners       = {},
+  $fcgi_programs        = {},
+  $groups               = {},
+  $programs             = {}
 
 ) inherits supervisord::params {
 
+  validate_bool($install_pip)
+  validate_bool($install_init)
+  validate_bool($nodaemon)
+  validate_bool($unix_auth)
+  validate_bool($inet_auth)
+  validate_bool($strip_ansi)
+  validate_bool($nocleanup)
+
+  validate_hash($eventlisteners)
+  validate_hash($fcgi_programs)
+  validate_hash($groups)
+  validate_hash($programs)
+
+  validate_absolute_path($config_include)
+  validate_absolute_path($log_path)
+  validate_absolute_path($run_path)
+  if $childlogdir { validate_absolute_path($childlogdir) }
+  if $directory { validate_absolute_path($directory) }
+
+  $log_levels = ['^critical$', '^error$', '^warn$', '^info$', '^debug$', '^trace$', '^blather$']
+  validate_re($log_level, $log_levels, "invalid log_level: ${log_level}")
+  validate_re($umask, '^0[0-7][0-7]$', "invalid umask: ${umask}.")
+  validate_re($unix_socket_mode, '^[0-7][0-7][0-7][0-7]$', "invalid unix_socket_mode: ${unix_socket_mode}")
+
+  if ! is_integer($logfile_backups) { fail("invalid logfile_backups: ${logfile_backups}.")}
+  if ! is_integer($minfds) { fail("invalid minfds: ${minfds}.")}
+  if ! is_integer($minprocs) { fail("invalid minprocs: ${minprocs}.")}
+  if ! is_integer($inet_server_port) { fail("invalid inet_server_port: ${inet_server_port}.")}
+
   if $env_var {
+    validate_hash($env_var)
     $env_hash = hiera($env_var)
     $env_string = hash2csv($env_hash)
   }
   elsif $environment {
+    validate_hash($environment)
     $env_string = hash2csv($environment)
   }
 
+  if $config_dirs {
+    validate_array($config_dirs)
+    $config_include_string = join($config_dirs, " ")
+  }
+  else {
+    $config_include_string = "${config_include}/*.conf"
+  }
+
+  create_resources('supervisord::eventlistener', $eventlisteners)
+  create_resources('supervisord::fcgi_program', $fcgi_programs)
+  create_resources('supervisord::group', $groups)
+  create_resources('supervisord::program', $programs)
+
   if $install_pip {
     include supervisord::pip
     Class['supervisord::pip'] -> Class['supervisord::install']
   }
 
-  include supervisord::install, supervisord::config, supervisord::service
+  include supervisord::install, supervisord::config, supervisord::service, supervisord::reload
 
   Class['supervisord::install'] -> Class['supervisord::config'] ~> Class['supervisord::service']
-
+  Class['supervisord::reload'] -> Supervisord::Supervisorctl <| |>
 }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/install.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/install.pp
index 1d36ec68334453389ce403f9efc8be723f6a1629..31a63f3b59ea2aaf9734f90da97ed1e018f91954 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/install.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/install.pp
@@ -1,6 +1,10 @@
+# Class supervisord::install
+#
+# Installs supervisor package (defaults to using pip)
+#
 class supervisord::install inherits supervisord {
   package { 'supervisor':
     ensure   => $supervisord::package_ensure,
-    provider => 'pip'
+    provider => $supervisord::package_provider
   }
 }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/params.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/params.pp
index 87d17d16179d77661326a958df3f31d25ba32414..f9d82e5804b0e0fbc5ab46b0d320eb1f5f36edea 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/params.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/params.pp
@@ -1,13 +1,21 @@
+# Class: supervisord::params
+#
+# Default parameters for supervisord
+#
 class supervisord::params {
+  # default supervisord params
   $package_ensure       = 'installed'
+  $package_provider     = 'pip'
   $service_ensure       = 'running'
+  $service_name         = 'supervisord'
   $package_name         = 'supervisor'
-  $executable           = '/usr/local/bin/supervisord'
+  $executable           = 'supervisord'
+  $executable_ctl       = 'supervisorctl'
 
   $run_path             = '/var/run'
-  $pid_file             = "${run_path}/supervisord.pid"
+  $pid_file             = 'supervisord.pid'
   $log_path             = '/var/log/supervisor'
-  $log_file             = "${log_path}/supervisord.log"
+  $log_file             = 'supervisord.log'
   $logfile_maxbytes     = '50MB'
   $logfile_backups      = '10'
   $log_level            = 'info'
@@ -20,7 +28,7 @@ class supervisord::params {
   $setuptools_url       = 'https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py'
 
   $unix_socket          = true
-  $unix_socket_file     = "${run_path}/supervisor.sock"
+  $unix_socket_file     = 'supervisor.sock'
   $unix_socket_mode     = '0700'
   $unix_socket_owner    = 'nobody'
 
@@ -31,17 +39,17 @@ class supervisord::params {
 
   case $::osfamily {
     'RedHat': {
-      $init_extras       = '/etc/sysconfig/supervisord'
+      $init_defaults     = '/etc/sysconfig/supervisord'
       $unix_socket_group = 'nobody'
       $install_init      = true
     }
     'Debian': {
-      $init_extras       = '/etc/default/supervisor'
+      $init_defaults     = '/etc/default/supervisor'
       $unix_socket_group = 'nogroup'
       $install_init      = true
     }
     default:  {
-      $init_extras       = false
+      $init_defaults     = false
       $unix_socket_group = 'nogroup'
       $install_init      = false
     }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/pip.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/pip.pp
index c05f2d7f64bee111bfeb28fc68b558d1e3d73bf1..71dd3653da3ccc6f87c51429b7ae28aae2afd355 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/pip.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/pip.pp
@@ -1,8 +1,10 @@
+# Class: supervisord::pip
+#
+# Optional class to install setuptool and pip
+#
 class supervisord::pip inherits supervisord {
 
-  Exec {
-    path => '/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin'
-  }
+  Exec { path => [ '/usr/bin/', '/usr/local/bin', '/bin', '/usr/local/sbin', '/usr/sbin', '/sbin' ] }
 
   exec { 'install_setuptools':
     command => "curl ${supervisord::setuptools_url} | python",
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/program.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/program.pp
index 8a00d41c77cae0bd8e1b499f3c6a5cec9ccf78a9..617a68ab208dc38ad3612566bc5d8a062168e510 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/program.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/program.pp
@@ -1,6 +1,14 @@
+# Define: supervisord::program
+#
+# This define creates an program configuration file
+#
+# Documentation on parameters available at:
+# http://supervisord.org/configuration.html#program-x-section-settings
+#
 define supervisord::program(
   $command,
   $ensure                  = present,
+  $ensure_process          = 'running',
   $env_var                 = undef,
   $process_name            = undef,
   $numprocs                = undef,
@@ -12,17 +20,17 @@ define supervisord::program(
   $startretries            = undef,
   $exitcodes               = undef,
   $stopsignal              = undef,
-  $stopwaitsec             = undef,
+  $stopwaitsecs            = undef,
   $stopasgroup             = undef,
   $killasgroup             = undef,
   $user                    = undef,
   $redirect_stderr         = undef,
-  $stdout_logfile          = "${supervisord::log_path}/program_${name}.log",
+  $stdout_logfile          = "program_${name}.log",
   $stdout_logfile_maxbytes = undef,
   $stdout_logfile_backups  = undef,
   $stdout_capture_maxbytes = undef,
   $stdout_events_enabled   = undef,
-  $stderr_logfile          = "${supervisord::log_path}/program_${name}.error",
+  $stderr_logfile          = "program_${name}.error",
   $stderr_logfile_maxbytes = undef,
   $stderr_logfile_backups  = undef,
   $stderr_capture_maxbytes = undef,
@@ -35,11 +43,45 @@ define supervisord::program(
 
   include supervisord
 
+  # parameter validation
+  validate_string($command)
+  validate_re($ensure_process, ['running', 'stopped', 'removed'])
+  if $process_name { validate_string($process_name) }
+  if $numprocs { validate_re($numprocs, '^\d+')}
+  if $numprocs_start { validate_re($numprocs_start, '^\d+')}
+  if $priority { validate_re($priority, '^\d+') }
+  if $autostart { validate_bool($autostart) }
+  if $autorestart { validate_re($autorestart, ['true', 'false', 'unexpected']) }
+  if $startsecs { validate_re($startsecs, '^\d+')}
+  if $startretries { validate_re($startretries, '^\d+')}
+  if $exitcodes { validate_string($exitcodes)}
+  if $stopsignal { validate_re($stopsignal, ['TERM', 'HUP', 'INT', 'QUIT', 'KILL', 'USR1', 'USR2']) }
+  if $stopwaitsecs { validate_re($stopwaitsecs, '^\d+')}
+  if $stopasgroup { validate_bool($stopasgroup) }
+  if $killasgroup { validate_bool($killasgroup) }
+  if $user { validate_string($user) }
+  if $redirect_stderr { validate_bool($redirect_stderr) }
+  validate_string($stdout_logfile)
+  if $stdout_logfile_maxbytes { validate_string($stdout_logfile_maxbytes) }
+  if $stdout_logfile_backups { validate_re($stdout_logfile_backups, '^\d+')}
+  if $stdout_capture_maxbytes { validate_string($stdout_capture_maxbytes) }
+  if $stdout_events_enabled { validate_bool($stdout_events_enabled) }
+  validate_string($stderr_logfile)
+  if $stderr_logfile_maxbytes { validate_string($stderr_logfile_maxbytes) }
+  if $stderr_logfile_backups { validate_re($stderr_logfile_backups, '^\d+')}
+  if $stderr_capture_maxbytes { validate_string($stderr_capture_maxbytes) }
+  if $stderr_events_enabled { validate_bool($stderr_events_enabled) }
+  if $directory { validate_absolute_path($directory) }
+  if $umask { validate_re($umask, '^[0-7][0-7][0-7]$') }
+
+  # convert environment data into a csv
   if $env_var {
-    $env_hash = hiera($env_var)
+    $env_hash = hiera_hash($env_var)
+    validate_hash($env_hash)
     $env_string = hash2csv($env_hash)
   }
   elsif $environment {
+    validate_hash($environment)
     $env_string = hash2csv($environment)
   }
 
@@ -50,6 +92,22 @@ define supervisord::program(
     owner   => 'root',
     mode    => '0755',
     content => template('supervisord/conf/program.erb'),
-    notify  => Class['supervisord::service']
+    notify  => Class['supervisord::reload']
+  }
+
+  case $ensure_process {
+    'stopped': {
+      supervisord::supervisorctl { "stop_${name}":
+        command => 'stop',
+        process => $name
+      }
+    }
+    'removed': {
+      supervisord::supervisorctl { "remove_${name}":
+        command => 'remove',
+        process => $name
+      }
+    }
+    default: { }
   }
 }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/reload.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/reload.pp
new file mode 100644
index 0000000000000000000000000000000000000000..e5a4637e43080bee7bb6abc04f9a25b92555337e
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/reload.pp
@@ -0,0 +1,21 @@
+# Class: supervisord::reload
+#
+# Class to reread and update supervisord with supervisorctl
+#
+class supervisord::reload {
+
+  Exec { path => [ '/usr/bin/', '/usr/local/bin' ] }
+
+  $supervisorctl = $::supervisord::executable_ctl
+
+  exec { 'supervisorctl_reread':
+    command     => "${supervisorctl} reread",
+    refreshonly => true,
+    returns     => [0, 2],
+  }
+  exec { 'supervisorctl_update':
+    command     => "${supervisorctl} update",
+    refreshonly => true,
+    returns     => [0, 2],
+  }
+}
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/service.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/service.pp
index 6e17976165de991d0ac8e2e63e3278aa3bfce9fc..f02a0d0a081000fd78bc70df2c0d4390df6cbf7f 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/service.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/service.pp
@@ -1,5 +1,9 @@
+# Class: supervisord::service
+#
+# Class for the supervisord service
+#
 class supervisord::service inherits supervisord  {
-  service { 'supervisord':
+  service { $supervisord::service_name:
     ensure     => $supervisord::service_ensure,
     enable     => true,
     hasrestart => true,
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/supervisorctl.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/supervisorctl.pp
new file mode 100644
index 0000000000000000000000000000000000000000..ec4dbed93379a12da93fb33e65e0dd3d20f1bca4
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/manifests/supervisorctl.pp
@@ -0,0 +1,29 @@
+# Define: supervisord:supervisorctl
+#
+# This define executes command with the supervisorctl tool
+#
+define supervisord::supervisorctl(
+  $command,
+  $process       = undef,
+  $refreshonly   = false
+) {
+
+  Exec { path => [ '/usr/bin/', '/usr/local/bin' ] }
+
+  validate_string($command)
+  validate_string($process)
+
+  $supervisorctl = $::supervisord::executable_ctl
+
+  if $process {
+    $cmd = join([$supervisorctl, $command, $process], ' ')
+  }
+  else {
+    $cmd = join([$supervisorctl, $command])
+  }
+
+  exec { "supervisorctl_command_${name}":
+    command     => $cmd,
+    refreshonly => $refreshonly
+  }
+}
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/centos-65-i386.yml b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/centos-65-i386.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f8d4013a31bc2d413df8502f54c0128518894c6c
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/centos-65-i386.yml
@@ -0,0 +1,10 @@
+HOSTS:
+  centos-65-i386:
+    roles:
+      - master
+    platform: el-6-i386
+    box : centos-65-i386-virtualbox-nocm
+    box_url : http://puppet-vagrant-boxes.puppetlabs.com/centos-65-i386-virtualbox-nocm.box
+    hypervisor : vagrant
+CONFIG:
+  type: foss
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/centos-65-x64.yml b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/centos-65-x64.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7535c104afb301fcb0b247e3e04fe1fcf7fc1682
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/centos-65-x64.yml
@@ -0,0 +1,10 @@
+HOSTS:
+  centos-65-x64:
+    roles:
+      - master
+    platform: el-6-x86_64
+    box : centos-65-x64-virtualbox-nocm
+    box_url : http://puppet-vagrant-boxes.puppetlabs.com/centos-65-x64-virtualbox-nocm.box
+    hypervisor : vagrant
+CONFIG:
+  type: foss
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/debian-73-i386.yml b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/debian-73-i386.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d1233aa83d1b8ff5e0e1951307db96ca23e7762e
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/debian-73-i386.yml
@@ -0,0 +1,10 @@
+HOSTS:
+  debian-73-i386:
+    roles:
+      - master
+    platform: debian-7-i386
+    box : debian-73-i386-virtualbox-nocm
+    box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-73-i386-virtualbox-nocm.box
+    hypervisor : vagrant
+CONFIG:
+  type: foss
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/debian-73-x64.yml b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/debian-73-x64.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5b87870a9093a3c7f5abdabe39ff740ef621d45d
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/debian-73-x64.yml
@@ -0,0 +1,10 @@
+HOSTS:
+  debian-73-x64:
+    roles:
+      - master
+    platform: debian-7-amd64
+    box : debian-73-x64-virtualbox-nocm
+    box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-73-x64-virtualbox-nocm.box
+    hypervisor : vagrant
+CONFIG:
+  type: foss
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/default.yml b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/default.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5b87870a9093a3c7f5abdabe39ff740ef621d45d
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/nodesets/default.yml
@@ -0,0 +1,10 @@
+HOSTS:
+  debian-73-x64:
+    roles:
+      - master
+    platform: debian-7-amd64
+    box : debian-73-x64-virtualbox-nocm
+    box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-73-x64-virtualbox-nocm.box
+    hypervisor : vagrant
+CONFIG:
+  type: foss
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/supervisord_spec.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/supervisord_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..47d052a4eecb14718b7e79d510b06a98c9275f78
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/acceptance/supervisord_spec.rb
@@ -0,0 +1,114 @@
+require 'spec_helper_acceptance'
+
+describe 'supervisord install' do
+
+  context 'default parameters with pip and init install' do
+    it 'should work with no errors' do
+      pp = <<-EOS
+        class { 'supervisord': install_pip  => true, install_init => true}
+      EOS
+
+      expect(apply_manifest(pp).exit_code).to_not eq(1)
+      expect(apply_manifest(pp).exit_code).to eq(0)
+    end
+
+    describe service('supervisord') do
+      it { should be_enabled }
+      it { should be_running }
+      it 'should restart successfully' do
+        cmd="service supervisord restart"
+        expect(shell(cmd).exit_code).to_not eq(1)
+      end
+    end
+  end
+end
+
+describe 'supervisord::program' do
+  context 'create a program config' do
+    it 'should install a program file' do
+
+      pp = <<-EOS
+        include supervisord
+        supervisord::program { 'test': 
+          command => 'echo', 
+          priority => '100', 
+          environment => { 
+            'HOME' => '/root',
+            'PATH' => '/bin',
+          }
+        }
+      EOS
+
+      expect(apply_manifest(pp).exit_code).to_not eq(1)
+      expect(apply_manifest(pp).exit_code).to eq(0)
+    end
+
+    it 'should contain the correct values' do
+      cmd='grep command=echo /etc/supervisor.d/program_test.conf'
+      expect(shell(cmd).exit_code).to eq(0)
+      cmd='grep priority=100 /etc/supervisor.d/program_test.conf'
+      expect(shell(cmd).exit_code).to eq(0)
+      cmd='grep "environment=" /etc/supervisor.d/program_test.conf'
+      expect(shell(cmd).exit_code).to eq(0)
+    end
+  end
+end 
+
+describe 'supervisord::fcgi-program' do
+  context 'create fcgi-program config' do
+    it 'should install a fcgi-program file' do
+
+      pp = <<-EOS
+        include supervisord
+        supervisord::fcgi_program { 'test':
+          socket  => 'tcp://localhost:1000',
+          command => 'echo',
+          priority => '100',
+          environment => {
+            'HOME' => '/root',
+            'PATH' => '/bin',
+          }
+        }
+      EOS
+
+      expect(apply_manifest(pp).exit_code).to_not eq(1)
+      expect(apply_manifest(pp).exit_code).to eq(0)
+    end
+
+    it 'should contain the correct values' do
+      cmd='grep socket=tcp://localhost:1000 /etc/supervisor.d/fcgi-program_test.conf'
+      expect(shell(cmd).exit_code).to eq(0)
+      cmd="grep command=echo /etc/supervisor.d/fcgi-program_test.conf"
+      expect(shell(cmd).exit_code).to eq(0)
+      cmd="grep priority=100 /etc/supervisor.d/fcgi-program_test.conf"
+      expect(shell(cmd).exit_code).to eq(0)
+      cmd='grep "environment=" /etc/supervisor.d/fcgi-program_test.conf'
+      expect(shell(cmd).exit_code).to eq(0)
+    end
+  end
+end
+
+describe 'supervisord::group' do
+  context 'create group config' do
+    it 'should install a group config' do
+
+      pp = <<-EOS
+        include supervisord
+        supervisord::group { 'test':
+          programs => ['test'],
+          priority => '100',
+        }
+      EOS
+
+      expect(apply_manifest(pp).exit_code).to_not eq(1)
+      expect(apply_manifest(pp).exit_code).to eq(0)
+    end
+
+    it 'should contain the correct values' do
+      cmd='grep "programs=test" /etc/supervisor.d/group_test.conf'
+      expect(shell(cmd).exit_code).to eq(0)
+      cmd="grep priority=100 /etc/supervisor.d/group_test.conf"
+      expect(shell(cmd).exit_code).to eq(0)
+    end
+  end
+end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/classes/supervisord_spec.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/classes/supervisord_spec.rb
index 238876c7dcd5f806cfd46a063febc338f2daa892..b845920f6feba25804d1d4736ae13021ef9aba77 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/classes/supervisord_spec.rb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/classes/supervisord_spec.rb
@@ -3,14 +3,26 @@ require 'spec_helper'
 describe 'supervisord' do
 
   concatdir = '/var/lib/puppet/concat'
-  configfile = '/etc/supervisord.conf'
   let(:facts) {{ :concat_basedir => concatdir }}
 
   it { should contain_class('supervisord') }
   it { should contain_class('supervisord::install') }
   it { should contain_class('supervisord::config') }
   it { should contain_class('supervisord::service') }
-  it { should contain_concat__fragment('supervisord_main').with_content(/logfile/) }
+  it { should contain_class('supervisord::params') }
+  it { should contain_class('supervisord::reload') }
+  it { should contain_package('supervisor') }
+
+  describe '#service_name' do
+    context 'default' do
+      it { should contain_service('supervisord') }
+    end
+
+    context 'specified' do
+      let(:params) {{ :service_name => 'myservicename' }}
+      it { should contain_service('myservicename') }
+    end
+  end
 
   describe '#install_pip' do
     context 'default' do
@@ -18,8 +30,16 @@ describe 'supervisord' do
     end
 
     context 'true' do
-      let (:params) {{ :install_pip => true }}
+      let(:params) {{ :install_pip => true }}
       it { should contain_class('supervisord::pip') }
+      it { should contain_exec('install_setuptools') }
+      it { should contain_exec('install_pip') }
+    end
+
+    context 'true and RedHat' do
+      let(:params) {{ :install_pip => true }}
+      let(:facts) {{ :osfamily => 'RedHat', :concat_basedir => concatdir }}
+      it { should contain_exec('pip_provider_name_fix') }
     end
   end
 
@@ -28,11 +48,6 @@ describe 'supervisord' do
       it { should contain_class('supervisord').without_env_hash }
       it { should contain_class('supervisord').without_env_string }
     end
-    #context 'is specified' do
-    #  let(:params) {{ :env_var => 'foovars' }}
-    #  let(:hiera_data) {{ :foovars => { 'key1' => 'value1', 'key2' => 'value2' } }}
-    #  it { should contain_concat__fragment('supervisord_main').with_content(/environment=key1='value1',key2='value2'/) }
-    #end
   end
 
   describe '#environment' do
@@ -41,7 +56,8 @@ describe 'supervisord' do
     end
     context 'is specified' do
       let(:params) {{ :environment => { 'key1' => 'value1', 'key2' => 'value2' } }}
-      it { should contain_concat__fragment('supervisord_main').with_content(/environment=key1='value1',key2='value2'/) }
+      it { should contain_concat__fragment('supervisord_main')\
+        .with_content(/environment=key1='value1',key2='value2'/) }
     end
   end
 
@@ -54,17 +70,20 @@ describe 'supervisord' do
       it { should_not contain_file('/etc/init.d/supervisord') }
     end
 
-    describe 'on supported OS'
+    describe 'on supported OS' do
       context 'with Debian' do
         let(:facts) {{ :osfamily => 'Debian', :concat_basedir => concatdir }}
         it { should contain_file('/etc/init.d/supervisord') }
+        it { should contain_file('/etc/default/supervisor') }
       end
 
       context 'with RedHat' do
         let(:facts) {{ :osfamily => 'RedHat', :concat_basedir => concatdir }}
         it { should contain_file('/etc/init.d/supervisord') }
+        it { should contain_file('/etc/sysconfig/supervisord') }
       end
     end
+  end
       
   describe '#unix_socket' do
     context 'default' do
@@ -89,10 +108,192 @@ describe 'supervisord' do
   describe '#run_path' do
     context 'default' do
       it { should_not contain_file('/var/run') }
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/pidfile=\/var\/run\/supervisord.pid$/) }
+    end
+    context 'is specified' do
+      let(:params) {{ :run_path => '/opt/supervisord/run' }}
+      it { should contain_file('/opt/supervisord/run') }
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/pidfile=\/opt\/supervisord\/run\/supervisord.pid$/) }
+    end
+  end
+
+  describe '#log_path' do
+    context 'default' do
+      it { should contain_file('/var/log/supervisor') }
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/logfile=\/var\/log\/supervisor\/supervisord.log$/) }
+    end
+    context 'is specified' do
+      let(:params) {{ :log_path => '/opt/supervisord/logs' }}
+      it { should contain_file('/opt/supervisord/logs')}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/logfile=\/opt\/supervisord\/logs\/supervisord.log$/) }
+    end
+  end
+
+  describe '#config_include' do
+    context 'default' do
+      it { should contain_file('/etc/supervisor.d') }
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/files=\/etc\/supervisor.d\/\*.conf$/) }
+    end
+    context 'is specified' do
+      let(:params) {{ :config_include => '/opt/supervisord/conf.d' }}
+      it { should contain_file('/opt/supervisord/conf.d') }
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/files=\/opt\/supervisord\/conf.d\/\*.conf$/) }
+    end
+  end
+
+  describe '#config_dirs' do
+    context 'is specified' do
+      let(:params) {{ :config_dirs => ['/etc/supervisor.d/*.conf', '/opt/supervisor.d/*', '/usr/share/supervisor.d/*.config'] }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/files=\/etc\/supervisor.d\/\*.conf \/opt\/supervisor.d\/\* \/usr\/share\/supervisor.d\/\*.config$/) }
+    end
+  end
+
+  describe '#config_file' do
+    context 'default' do
+      it { should contain_file('/etc/supervisord.conf') }
+    end
+    context 'is specified' do
+      let(:params) {{ :config_file => '/opt/supervisord/supervisor.conf' }}
+      it { should contain_file('/opt/supervisord/supervisor.conf') }
+    end
+  end
+
+  describe '#nodaemon' do
+    context 'default' do
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/nodaemon=false$/) }
+    end
+    context 'true' do
+      let(:params) {{ :nodaemon => true }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/nodaemon=true$/) }
+    end
+    context 'invalid' do
+      let(:params) {{ :nodaemon => 'invalid' }}
+      it { expect { raise_error(Puppet::Error, /is not a boolean/) }}
+    end
+  end
+
+  describe '#minfds' do
+    context 'default' do
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/minfds=1024$/) }
+    end
+    context 'specified' do
+      let(:params) {{ :minfds => 2048 }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/minfds=2048$/) }
+    end
+    context 'invalid' do
+      let(:params) {{ :minfds => 'string' }}
+      it { expect { raise_error(Puppet::Error, /invalid minfds/) }}
+    end
+  end
+
+  describe '#minprocs' do
+    context 'default' do
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/minprocs=200$/) }
+    end
+    context 'specified' do
+      let(:params) {{ :minprocs => 300 }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/minprocs=300$/) }
+    end
+    context 'invalid' do
+      let(:params) {{ :minfds => 'string' }}
+      it { expect { raise_error(Puppet::Error, /invalid minprocs/) }}
+    end
+  end
+
+  describe '#strip_ansi' do
+    context 'default' do
+      it { should_not contain_concat__fragment('supervisord_main') \
+        .with_content(/strip_ansi$/) }
+    end
+    context 'true' do
+      let(:params) {{ :strip_ansi => true }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/strip_ansi=true$/) }
+    end
+    context 'invalid' do
+      let(:params) {{ :strip_ansi => 'string' }}
+      it { expect { raise_error(Puppet::Error, /is not a boolean/) }}
+    end
+  end
+
+  describe '#user' do
+    context 'default' do
+      it { should_not contain_concat__fragment('supervisord_main') \
+        .with_content(/user$/) }
+    end
+    context 'specified' do
+      let(:params) {{ :user => 'myuser' }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/user=myuser$/) }
+    end
+  end
+
+  describe '#identifier' do
+    context 'default' do
+      it { should_not contain_concat__fragment('supervisord_main') \
+        .with_content(/identifier$/) }
+    end
+    context 'specified' do
+      let(:params) {{ :identifier => 'myidentifier' }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/identifier=myidentifier$/) }
+    end
+  end
+
+  describe '#directory' do
+    context 'default' do
+      it { should_not contain_concat__fragment('supervisord_main') \
+        .with_content(/directory$/) }
+    end
+    context 'specified' do
+      let(:params) {{ :directory => '/opt/supervisord' }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/directory=\/opt\/supervisord$/) }
+    end
+  end
+
+  describe '#nocleanup' do
+    context 'default' do
+      it { should_not contain_concat__fragment('supervisord_main') \
+        .with_content(/nocleanup$/) }
+    end
+    context 'true' do
+      let(:params) {{ :nocleanup => true }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/nocleanup=true$/) }
+    end
+    context 'invalid' do
+      let(:params) {{ :nocleanup => 'string' }}
+      it { expect { raise_error(Puppet::Error, /is not a boolean/) }}
+    end
+  end
+
+  describe '#childlogdir' do
+    context 'default' do
+      it { should_not contain_concat__fragment('supervisord_main') \
+        .with_content(/childlogdir$/) }
+    end
+    context 'specified' do
+      let(:params) {{ :childlogdir => '/opt/supervisord/logdir' }}
+      it { should contain_concat__fragment('supervisord_main') \
+        .with_content(/childlogdir=\/opt\/supervisord\/logdir$/) }
     end
-    context 'custom setting' do
-      let(:params) {{ :run_path => '/var/run/supervisord'}}
-      it { should contain_file('/var/run/supervisord') }
+    context 'invalid' do
+      let(:params) {{ :childlogdir => 'not_a_path' }}
+      it { expect { raise_error(Puppet::Error, /is not an absolute path/) }}
     end
   end
 end
\ No newline at end of file
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/eventlistener_spec.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/eventlistener_spec.rb
index 6e04f44f97bc0436ceed164f25bd6add590df532..1083b8a32305ba9c1ba53319eb3d1f6d89833fb6 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/eventlistener_spec.rb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/eventlistener_spec.rb
@@ -2,14 +2,85 @@ require 'spec_helper'
 
 describe 'supervisord::eventlistener', :type => :define do
   let(:title) {'foo'}
-  let(:default_params) {{ :command => 'bar',
-                  :stdout_logfile => '/var/log/supervisor/eventlistener_foo.log',
-                  :stderr_logfile => '/var/log/supervisor/eventlistener_foo.error',
-  }}
-  let(:params) { default_params }
   let(:facts) {{ :concat_basedir => '/var/lib/puppet/concat' }}
+  let(:default_params) do 
+    {
+      :command                 => 'bar',
+      :process_name            => '%(process_num)s',
+      :events                  => ['PROCESS_STATE', 'PROCESS_STATE_STARTING'],
+      :buffer_size             => 10,
+      :numprocs                => '1',
+      :numprocs_start          => '0',
+      :priority                => '999',
+      :autostart               => true,
+      :autorestart             => 'unexpected',
+      :startsecs               => '1',
+      :startretries            => '3',
+      :exitcodes               => '0,2',
+      :stopsignal              => 'TERM',
+      :stopwaitsecs            => '10',
+      :stopasgroup             => true,
+      :killasgroup             => true,
+      :user                    => 'baz',
+      :redirect_stderr         => true,
+      :stdout_logfile          => 'eventlistener_foo.log',
+      :stdout_logfile_maxbytes => '50MB',
+      :stdout_logfile_backups  => '10',
+      :stdout_events_enabled   => true,
+      :stderr_logfile          => 'eventlistener_foo.error',
+      :stderr_logfile_maxbytes => '50MB',
+      :stderr_logfile_backups  => '10',
+      :stderr_events_enabled   => true,
+      :environment             => { 'env1' => 'value1', 'env2' => 'value2' },
+      :directory               => '/opt/supervisord/chroot',
+      :umask                   => '022',
+      :serverurl               => 'AUTO'
+    }
+  end
 
-  it { should contain_supervisord__eventlistener('foo') }
-  it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/command=bar/) }
+  context 'default' do
+    let(:params) { default_params }
 
+    it { should contain_supervisord__eventlistener('foo') }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/\[eventlistener:foo\]/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/command=bar/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/process_name=\%\(process_num\)s/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/events=PROCESS_STATE,PROCESS_STATE_STARTING/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/buffer_size=10/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/numprocs=1/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/numprocs_start=0/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/priority=999/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/autostart=true/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/startsecs=1/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/startretries=3/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/exitcodes=0,2/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stopsignal=TERM/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stopwaitsecs=10/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stopasgroup=true/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/killasgroup=true/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/user=baz/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/redirect_stderr=true/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/eventlistener_foo.log/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stdout_logfile_maxbytes=50MB/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stdout_logfile_backups=10/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stdout_events_enabled=true/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/eventlistener_foo.error/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stderr_logfile_maxbytes=50MB/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stderr_logfile_backups=10/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/stderr_events_enabled=true/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/environment=env1='value1',env2='value2'/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/directory=\/opt\/supervisord\/chroot/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/umask=022/) }
+    it { should contain_file('/etc/supervisor.d/eventlistener_foo.conf').with_content(/serverurl=AUTO/) }
+  end
+
+  context 'ensure_process_stopped' do
+    let(:params) { default_params.merge({ :ensure_process => 'stopped' }) }
+    it { should contain_supervisord__supervisorctl('stop_foo') }
+  end
+
+  context 'ensure_process_removed' do
+    let(:params) { default_params.merge({ :ensure_process => 'removed' }) }
+    it { should contain_supervisord__supervisorctl('remove_foo') }
+  end
 end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/fcgi_program_spec.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/fcgi_program_spec.rb
index 7fd8ab07b86124a006a1cbdfe06c17a1465caf6c..e01311be70d414dbc77748db7586360a63ed82f5 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/fcgi_program_spec.rb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/fcgi_program_spec.rb
@@ -2,21 +2,87 @@ require 'spec_helper'
 
 describe 'supervisord::fcgi_program', :type => :define do
   let(:title) {'foo'}
-  let(:default_params) {{ :command => 'bar',
-                  :socket          => 'tcp://localhost:1000',
-                  :stdout_logfile  => '/var/log/supervisor/fcgi-program_foo.log',
-                  :stderr_logfile  => '/var/log/supervisor/fcgi-program_foo.error',
-                  :user            => 'baz'
-  }}
-  let(:params) { default_params }
   let(:facts) {{ :concat_basedir => '/var/lib/puppet/concat' }}
+  let(:default_params) do
+    {
+      :command                 => 'bar',
+      :socket                  => 'tcp://localhost:1000',
+      :process_name            => '%(process_num)s',
+      :numprocs                => '1',
+      :numprocs_start          => '0',
+      :priority                => '999',
+      :autostart               => true,
+      :autorestart             => 'unexpected',
+      :startsecs               => '1',
+      :startretries            => '3',
+      :exitcodes               => '0,2',
+      :stopsignal              => 'TERM',
+      :stopwaitsecs            => '10',
+      :stopasgroup             => true,
+      :killasgroup             => true,
+      :user                    => 'baz',
+      :redirect_stderr         => true,
+      :stdout_logfile          => 'fcgi-program_foo.log',
+      :stdout_logfile_maxbytes => '50MB',
+      :stdout_logfile_backups  => '10',
+      :stdout_capture_maxbytes => '0',
+      :stdout_events_enabled   => true,
+      :stderr_logfile          => 'fcgi-program_foo.error',
+      :stderr_logfile_maxbytes => '50MB',
+      :stderr_logfile_backups  => '10',
+      :stderr_capture_maxbytes => '0',
+      :stderr_events_enabled   => true,
+      :environment             => { 'env1' => 'value1', 'env2' => 'value2' },
+      :directory               => '/opt/supervisord/chroot',
+      :umask                   => '022',
+      :serverurl               => 'AUTO'
+    }
+  end
 
-  it { should contain_supervisord__fcgi_program('foo') }
-  it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/\[fcgi-program:foo\]/) }
-  it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/socket=tcp:\/\/localhost:1000/) }
-  it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/command=bar/) }
-  it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/user=baz/) }
-  it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/fcgi-program_foo.log/) }
-  it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/fcgi-program_foo.error/) }
+  context 'default' do
+    let(:params) { default_params }
 
+    it { should contain_supervisord__fcgi_program('foo') }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/\[fcgi-program:foo\]/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/socket=tcp:\/\/localhost:1000/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/command=bar/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/process_name=\%\(process_num\)s/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/numprocs=1/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/numprocs_start=0/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/priority=999/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/autostart=true/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/startsecs=1/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/startretries=3/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/exitcodes=0,2/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stopsignal=TERM/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stopwaitsecs=10/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stopasgroup=true/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/killasgroup=true/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/user=baz/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/redirect_stderr=true/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/fcgi-program_foo.log/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_logfile_maxbytes=50MB/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_logfile_backups=10/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_capture_maxbytes=0/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stdout_events_enabled=true/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/fcgi-program_foo.error/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_logfile_maxbytes=50MB/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_logfile_backups=10/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_capture_maxbytes=0/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/stderr_events_enabled=true/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/environment=env1='value1',env2='value2'/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/directory=\/opt\/supervisord\/chroot/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/umask=022/) }
+    it { should contain_file('/etc/supervisor.d/fcgi-program_foo.conf').with_content(/serverurl=AUTO/) }
+  end
+
+  context 'ensure_process_stopped' do
+    let(:params) { default_params.merge({ :ensure_process => 'stopped' }) }
+    it { should contain_supervisord__supervisorctl('stop_foo') }
+  end
+
+  context 'ensure_process_removed' do
+    let(:params) { default_params.merge({ :ensure_process => 'removed' }) }
+    it { should contain_supervisord__supervisorctl('remove_foo') }
+  end
 end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/program_spec.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/program_spec.rb
index 077828bdfcfbe3424956887a25a8827b9aaab506..e32c24ab2d513320086767b2d1401a577041b298 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/program_spec.rb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/program_spec.rb
@@ -2,19 +2,85 @@ require 'spec_helper'
 
 describe 'supervisord::program', :type => :define do
   let(:title) {'foo'}
-  let(:default_params) {{ :command => 'bar',
-                  :stdout_logfile  => '/var/log/supervisor/program_foo.log',
-                  :stderr_logfile  => '/var/log/supervisor/program_foo.error',
-                  :user            => 'baz'
-  }}
-  let(:params) { default_params }
   let(:facts) {{ :concat_basedir => '/var/lib/puppet/concat' }}
+  let(:default_params) do 
+    {
+      :command                 => 'bar',
+      :process_name            => '%(process_num)s',
+      :numprocs                => '1',
+      :numprocs_start          => '0',
+      :priority                => '999',
+      :autostart               => true,
+      :autorestart             => 'unexpected',
+      :startsecs               => '1',
+      :startretries            => '3',
+      :exitcodes               => '0,2',
+      :stopsignal              => 'TERM',
+      :stopwaitsecs            => '10',
+      :stopasgroup             => true,
+      :killasgroup             => true,
+      :user                    => 'baz',
+      :redirect_stderr         => true,
+      :stdout_logfile          => 'program_foo.log',
+      :stdout_logfile_maxbytes => '50MB',
+      :stdout_logfile_backups  => '10',
+      :stdout_capture_maxbytes => '0',
+      :stdout_events_enabled   => true,
+      :stderr_logfile          => 'program_foo.error',
+      :stderr_logfile_maxbytes => '50MB',
+      :stderr_logfile_backups  => '10',
+      :stderr_capture_maxbytes => '0',
+      :stderr_events_enabled   => true,
+      :environment             => { 'env1' => 'value1', 'env2' => 'value2' },
+      :directory               => '/opt/supervisord/chroot',
+      :umask                   => '022',
+      :serverurl               => 'AUTO'
+    }
+  end
 
-  it { should contain_supervisord__program('foo') }
-  it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/\[program:foo\]/) }
-  it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/command=bar/) }
-  it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/user=baz/) }
-  it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/program_foo.log/) }
-  it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/program_foo.error/) }
+  context 'default' do
+    let(:params) { default_params }
 
+    it { should contain_supervisord__program('foo') }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/\[program:foo\]/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/command=bar/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/process_name=\%\(process_num\)s/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/numprocs=1/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/numprocs_start=0/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/priority=999/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/autostart=true/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/startsecs=1/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/startretries=3/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/exitcodes=0,2/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stopsignal=TERM/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stopwaitsecs=10/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stopasgroup=true/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/killasgroup=true/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/user=baz/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/redirect_stderr=true/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_logfile=\/var\/log\/supervisor\/program_foo.log/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_logfile_maxbytes=50MB/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_logfile_backups=10/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_capture_maxbytes=0/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stdout_events_enabled=true/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_logfile=\/var\/log\/supervisor\/program_foo.error/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_logfile_maxbytes=50MB/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_logfile_backups=10/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_capture_maxbytes=0/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/stderr_events_enabled=true/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/environment=env1='value1',env2='value2'/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/directory=\/opt\/supervisord\/chroot/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/umask=022/) }
+    it { should contain_file('/etc/supervisor.d/program_foo.conf').with_content(/serverurl=AUTO/) }
+  end
+
+  context 'ensure_process_stopped' do
+    let(:params) { default_params.merge({ :ensure_process => 'stopped' }) }
+    it { should contain_supervisord__supervisorctl('stop_foo') }
+  end
+
+  context 'ensure_process_removed' do
+    let(:params) { default_params.merge({ :ensure_process => 'removed' }) }
+    it { should contain_supervisord__supervisorctl('remove_foo') }
+  end
 end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/supervisorctl.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/supervisorctl.rb
new file mode 100644
index 0000000000000000000000000000000000000000..33cfd75efe941bd55c1110200d94c2bf439c4aef
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/defines/supervisorctl.rb
@@ -0,0 +1,13 @@
+require 'spec_helper'
+
+describe 'supervisord::supervisorctl', :type => :define do
+  let(:title) {'command_foo'}
+  let(:default_params) {{ 
+    :command => 'command',
+    :process => 'foo'
+  }}
+  let(:params) { default_params }
+  let(:facts) {{ :concat_basedir => '/var/lib/puppet/concat' }}
+
+  it { should contain_supervisord__supervisorctl('command_foo') }
+end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper.rb
index 644f7c33ac09f10cad2df6f5da41c1c45b14c355..745ad4a5493fa3d533ceca7e628d0de2d27469c0 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper.rb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper.rb
@@ -7,3 +7,4 @@ RSpec.configure do |c|
   c.manifest_dir = File.join(fixture_path, 'manifests')
 end
 
+at_exit { RSpec::Puppet::Coverage.report! }
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper_acceptance.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper_acceptance.rb
new file mode 100644
index 0000000000000000000000000000000000000000..dcae2850d270ad55c213de5cd10eb720bf4b9dea
--- /dev/null
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper_acceptance.rb
@@ -0,0 +1,24 @@
+require 'beaker-rspec'
+
+hosts.each do |host|
+  # Install Puppet
+  install_puppet
+end
+
+RSpec.configure do |c|
+  # Project root
+  proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
+
+  # Readable test descriptions
+  c.formatter = :documentation
+
+  # Configure all nodes in nodeset
+  c.before :suite do
+    # Install module
+    puppet_module_install(:source => proj_root, :module_name => 'supervisord')
+    hosts.each do |host|
+      on host, puppet('module','install','puppetlabs-stdlib'), { :acceptable_exit_codes => [0,1] }
+      on host, puppet('module','install','puppetlabs-concat'), { :acceptable_exit_codes => [0,1] }
+    end
+  end
+end
\ No newline at end of file
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper_system.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper_system.rb
deleted file mode 100644
index a790d7d526c0c6a818daaf587f6f4693620e78f4..0000000000000000000000000000000000000000
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/spec_helper_system.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require 'rspec-system/spec_helper'
-require 'rspec-system-puppet/helpers'
-
-include RSpecSystemPuppet::Helpers
-
-RSpec.configure do |c|
-  # Project root
-  proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
-
-  # Enable colour
-  c.tty = true
-
-  # This is where we 'setup' the nodes before running our tests
-  c.before :suite do
-    # Install puppet
-    puppet_install
-    puppet_master_install
-
-    # Replace mymodule with your module name
-    puppet_module_install(:source => proj_root, :module_name => 'supervisord')
-    shell('puppet module install puppetlabs/stdlib')
-    shell('puppet module install puppetlabs/concat')
-
-  end
-end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/system/basic_spec.rb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/system/basic_spec.rb
deleted file mode 100644
index 62cf7dd8c2e7c083b0ac45f99fd061e480f3463c..0000000000000000000000000000000000000000
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/spec/system/basic_spec.rb
+++ /dev/null
@@ -1,120 +0,0 @@
-require 'spec_helper_system'
-
-describe 'basic install' do
-
-  it 'class should work with no errors' do
-    pp = <<-EOS
-      class { 'supervisord': install_pip  => true, install_init => true}
-    EOS
-
-    puppet_apply(pp) do |r|
-      r.exit_code.should_not == 1
-      r.refresh
-      r.exit_code.should be_zero
-    end
-
-    shell("pgrep supervisord") do |r|
-      r.exit_code.should be_zero
-    end
-
-  end
-end
-
-describe 'add a program config' do
-
-  it 'supervisord::program should install a program config' do
-
-    pp = <<-EOS
-      include supervisord
-      supervisord::program { 'test': 
-        command => 'echo', 
-        priority => '100', 
-        environment => { 
-          'HOME' => '/root',
-          'PATH' => '/bin',
-        }
-      }
-    EOS
-
-    puppet_apply(pp) do |r|
-      r.exit_code.should_not == 1
-      r.refresh
-      r.exit_code.should be_zero
-    end
-
-    shell("grep command=echo /etc/supervisor.d/program_test.conf") do |r|
-      r.exit_code.should be_zero
-    end
-    shell("grep priority=100 /etc/supervisor.d/program_test.conf") do |r|
-      r.exit_code.should be_zero
-    end
-    shell('grep "environment=" /etc/supervisor.d/program_test.conf') do |r|
-      r.exit_code.should be_zero
-    end
-  end
-end 
-
-describe 'add a fcgi-program config' do
-
-  it 'supervisord::fcgi_program should install a program config' do
-
-    pp = <<-EOS
-      include supervisord
-      supervisord::fcgi_program { 'test':
-        socket  => 'tcp://localhost:1000',
-        command => 'echo',
-        priority => '100',
-        environment => {
-          'HOME' => '/root',
-          'PATH' => '/bin',
-        }
-      }
-    EOS
-
-    puppet_apply(pp) do |r|
-      r.exit_code.should_not == 1
-      r.refresh
-      r.exit_code.should be_zero
-    end
-
-    shell("grep socket=tcp://localhost:1000 /etc/supervisor.d/fcgi-program_test.conf") do |r|
-      r.exit_code.should be_zero
-    end
-    shell("grep command=echo /etc/supervisor.d/fcgi-program_test.conf") do |r|
-      r.exit_code.should be_zero
-    end
-    shell("grep priority=100 /etc/supervisor.d/fcgi-program_test.conf") do |r|
-      r.exit_code.should be_zero
-    end
-    shell('grep "environment=" /etc/supervisor.d/fcgi-program_test.conf') do |r|
-      r.exit_code.should be_zero
-    end
-  end
-end
-
-describe 'add a group config' do
-
-  it 'supervisord::group should install a program config' do
-
-    pp = <<-EOS
-      include supervisord
-      supervisord::group { 'test':
-        programs => ['program1', 'program2'],
-        priority => '100',
-      }
-    EOS
-
-    puppet_apply(pp) do |r|
-      r.exit_code.should_not == 1
-      r.refresh
-      r.exit_code.should be_zero
-    end
-
-    shell('grep "programs=program1,program2" /etc/supervisor.d/group_test.conf') do |r|
-      r.exit_code.should be_zero
-    end
-    shell("grep priority=100 /etc/supervisor.d/fcgi-program_test.conf") do |r|
-      r.exit_code.should be_zero
-    end
-  end
-end
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/eventlistener.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/eventlistener.erb
index 4ee2b893419b26ab5b33d39f953d8d07b89e7ac8..9875c8ef5b23022312656fb159093ace9bc83349 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/eventlistener.erb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/eventlistener.erb
@@ -39,8 +39,8 @@ exitcodes=<%= @exitcodes %>
 <% if @stopsignal -%>
 stopsignal=<%= @stopsignal %>
 <% end -%>
-<% if @stopwaitsec -%>
-stopwaitsec=<%= @stopwaitsec %>
+<% if @stopwaitsecs -%>
+stopwaitsecs=<%= @stopwaitsecs %>
 <% end -%>
 <% if @stopasgroup -%>
 stopasgroup=<%= @stopasgroup %>
@@ -54,7 +54,7 @@ user=<%= @user %>
 <% if @redirect_stderr -%>
 redirect_stderr=<%= @redirect_stderr %>
 <% end -%>
-stdout_logfile=<%= @stdout_logfile %>
+stdout_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stdout_logfile %>
 <% if @stdout_logfile_maxbytes -%>
 stdout_logfile_maxbytes=<%= @stdout_logfile_maxbytes %>
 <% end -%>
@@ -64,7 +64,7 @@ stdout_logfile_backups=<%= @stdout_logfile_backups %>
 <% if @stdout_events_enabled -%>
 stdout_events_enabled=<%= @stdout_events_enabled %>
 <% end -%>
-stderr_logfile=<%= @stderr_logfile %>
+stderr_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stderr_logfile %>
 <% if @stderr_logfile_maxbytes -%>
 stderr_logfile_maxbytes=<%= @stderr_logfile_maxbytes %>
 <% end -%>
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/fcgi_program.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/fcgi_program.erb
index a1478bce5360de78aa35abe462acb8b577658fbd..98a7fb1cb3285ed4bf8438ec4e52abf559636ab2 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/fcgi_program.erb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/fcgi_program.erb
@@ -37,8 +37,8 @@ exitcodes=<%= @exitcodes %>
 <% if @stopsignal -%>
 stopsignal=<%= @stopsignal %>
 <% end -%>
-<% if @stopwaitsec -%>
-stopwaitsec=<%= @stopwaitsec %>
+<% if @stopwaitsecs -%>
+stopwaitsecs=<%= @stopwaitsecs %>
 <% end -%>
 <% if @stopasgroup -%>
 stopasgroup=<%= @stopasgroup %>
@@ -53,7 +53,7 @@ user=<%= @user %>
 redirect_stderr=<%= @redirect_stderr %>
 <% end -%>
 <% if @stdout_logfile -%>
-stdout_logfile=<%= @stdout_logfile %>
+stdout_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stdout_logfile %>
 <% end -%>
 <% if @stdout_logfile_maxbytes -%>
 stdout_logfile_maxbytes=<%= @stdout_logfile_maxbytes %>
@@ -68,7 +68,7 @@ stdout_capture_maxbytes=<%= @stdout_capture_maxbytes %>
 stdout_events_enabled=<%= @stdout_events_enabled %>
 <% end -%>
 <% if @stderr_logfile -%>
-stderr_logfile=<%= @stderr_logfile %>
+stderr_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stderr_logfile %>
 <% end -%>
 <% if @stderr_logfile_maxbytes -%>
 stderr_logfile_maxbytes=<%= @stderr_logfile_maxbytes %>
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/program.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/program.erb
index ca96d34d6adcb696be761ce182112420715ca692..78002c87ca6d276d4a8c9f9a67ee413b9df56d4a 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/program.erb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/conf/program.erb
@@ -30,8 +30,8 @@ exitcodes=<%= @exitcodes %>
 <% if @stopsignal -%>
 stopsignal=<%= @stopsignal %>
 <% end -%>
-<% if @stopwaitsec -%>
-stopwaitsec=<%= @stopwaitsec %>
+<% if @stopwaitsecs -%>
+stopwaitsecs=<%= @stopwaitsecs %>
 <% end -%>
 <% if @stopasgroup -%>
 stopasgroup=<%= @stopasgroup %>
@@ -46,7 +46,7 @@ user=<%= @user %>
 redirect_stderr=<%= @redirect_stderr %>
 <% end -%>
 <% if @stdout_logfile -%>
-stdout_logfile=<%= @stdout_logfile %>
+stdout_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stdout_logfile %>
 <% end -%>
 <% if @stdout_logfile_maxbytes -%>
 stdout_logfile_maxbytes=<%= @stdout_logfile_maxbytes %>
@@ -61,7 +61,7 @@ stdout_capture_maxbytes=<%= @stdout_capture_maxbytes %>
 stdout_events_enabled=<%= @stdout_events_enabled %>
 <% end -%>
 <% if @stderr_logfile -%>
-stderr_logfile=<%= @stderr_logfile %>
+stderr_logfile=<%= scope.lookupvar('supervisord::log_path') %>/<%= @stderr_logfile %>
 <% end -%>
 <% if @stderr_logfile_maxbytes -%>
 stderr_logfile_maxbytes=<%= @stderr_logfile_maxbytes %>
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/debian_extra.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/Debian/defaults.erb
similarity index 100%
rename from dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/debian_extra.erb
rename to dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/Debian/defaults.erb
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/debian_init.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/Debian/init.erb
similarity index 96%
rename from dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/debian_init.erb
rename to dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/Debian/init.erb
index b94f9337f5919fe4a0b572c27d198ffaa2c3b21c..bff9857257ae916d68de34bb1c72629e89b8924f 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/debian_init.erb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/Debian/init.erb
@@ -19,15 +19,15 @@ DESC=supervisor
 test -x $DAEMON || exit 0
 
 LOGDIR=<%= @log_path %>
-PIDFILE=<%= @pid_file %>
+PIDFILE=<%= @run_path %>/<%= @pid_file %>
 DODTIME=5                   # Time to wait for the server to die, in seconds
                             # If this value is set too low you might not
                             # let some servers to die gracefully and
                             # 'restart' will not work
 
 # Include supervisor defaults if available
-if [ -f /etc/default/supervisor ] ; then
-        . /etc/default/supervisor
+if [ -f <%= @init_defaults %> ] ; then
+        . <%= @init_defaults %>
 fi
 
 set -e
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/redhat_extra.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/RedHat/defaults.erb
similarity index 81%
rename from dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/redhat_extra.erb
rename to dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/RedHat/defaults.erb
index b892c2d62038b4e8a5de38f1728264ed1ca653b3..0d7862d0233b4b924059faa2223218bae2f6bd5d 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/redhat_extra.erb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/RedHat/defaults.erb
@@ -5,4 +5,4 @@ set -a
 
 # should probably put both of these options as runtime arguments 
 OPTIONS="-c <%= @config_file %>"
-PIDFILE=<%= @pid_file %>
+PIDFILE=<%= @run_path %><%= @pid_file %>
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/redhat_init.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/RedHat/init.erb
similarity index 94%
rename from dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/redhat_init.erb
rename to dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/RedHat/init.erb
index 1dc2da2aff11baed096e97312856a77d2a7c45d0..dabb27845104e2a1b27f7fec0dff5212df6c7866 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/redhat_init.erb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/init/RedHat/init.erb
@@ -13,18 +13,19 @@
 #               xmlrpc interface as well as a few other nifty features.
 # processname:  supervisord
 # config: <%= @config_file %>
-# pidfile: <%= @pid_file %>
+# pidfile: <%= @run_path %>/<%= @pid_file %>
 #
 
 # source function library
 . /etc/rc.d/init.d/functions
 
 # source system settings
-[ -e <%= @init_extras %> ] && . <%= @init_extras %>
+[ -e <%= @init_defaults %> ] && . <%= @init_defaults %>
 
 RETVAL=0
 DAEMON=/usr/bin/supervisord
 DESC=supervisord
+PIDFILE=<%= @run_path %>/<%= @pid_file %>
 
 running_pid()
 {
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/supervisord_main.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/supervisord_main.erb
index 1baf5607a2f4fe8c059595f2b117a0b40dc35578..8ab8fee51dfc1ffb1a4f5a9d7b119948b6c24502 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/supervisord_main.erb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/supervisord_main.erb
@@ -1,9 +1,9 @@
 [supervisord]
-logfile=<%= @log_file %>
-pidfile=<%= @pid_file %>
+logfile=<%= @log_path %>/<%= @log_file %>
+pidfile=<%= @run_path %>/<%= @pid_file %>
 nodaemon=<%= @nodaemon %>
 minfds=<%= @minfds %>
-minfds=<%= @minprocs %>
+minprocs=<%= @minprocs %>
 umask=<%= @umask %>
 <% if @strip_ansi -%>
 strip_ansi=<%= @strip_ansi %>
@@ -12,7 +12,7 @@ strip_ansi=<%= @strip_ansi %>
 user=<%= @user %>
 <% end -%>
 <% if @identifier -%>
-indentifier=<%= @identifier %>
+identifier=<%= @identifier %>
 <% end -%>
 <% if @directory -%>
 directory=<%= @directory %>
@@ -31,4 +31,4 @@ environment=<%= @env_string %>
 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
 
 [include]
-files=<%= @config_include %>/*.conf
+files=<%= @config_include_string %>
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/supervisord_unix.erb b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/supervisord_unix.erb
index 414e75198ba5863dceb94eea7c000a7b198a19ee..39e85199916d35614f005b8dfff9e147af10e1e5 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/supervisord_unix.erb
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/templates/supervisord_unix.erb
@@ -1,5 +1,5 @@
 [unix_http_server]
-file=<%= @unix_socket_file %>
+file=<%= @run_path %>/<%= @unix_socket_file %>
 chmod=<%= @unix_socket_mode %>
 chown=<%= @unix_socket_owner %>:<%= @unix_socket_group %>
 <% if @unix_auth -%>
@@ -8,7 +8,7 @@ password=<%= @unix_socket_password %>
 <% end -%>
 
 [supervisorctl]
-serverurl=unix://<%= @unix_socket_file %>
+serverurl=unix://<%= @run_path %>/<%= @unix_socket_file %>
 <% if @unix_auth -%>
 username=<%= @unix_username %>
 password=<%= @unix_password %>
diff --git a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/tests/program.pp b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/tests/program.pp
index 6c789c96dc15d7bfc583283b1164b7f82f2a5542..0d45ebe1b3dec0235a859f29d7a1ea6584c86ebd 100644
--- a/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/tests/program.pp
+++ b/dev/vagrant/dolibarrdev/puphpet/puppet/modules/supervisord/tests/program.pp
@@ -1,9 +1,35 @@
 supervisord::program { 'myprogram':
-  command     => 'command --args',
-  priority    => '100',
-  environment => {
+  command                 => 'command --args',
+  process_name            => '%(process_num)s',
+  numprocs                => '1',
+  numprocs_start          => '0',
+  priority                => '999',
+  autostart               => true,
+  autorestart             => 'unexpected',
+  startsecs               => '1',
+  startretries            => '3',
+  exitcodes               => '0,2',
+  stopsignal              => 'TERM',
+  stopwaitsecs            => '10',
+  stopasgroup             => false,
+  killasgroup             => false,
+  redirect_stderr         => false,
+  stdout_logfile          => 'program_foo.log',
+  stdout_logfile_maxbytes => '50MB',
+  stdout_logfile_backups  => '10',
+  stdout_capture_maxbytes => '0',
+  stdout_events_enabled   => false,
+  stderr_logfile          => 'program_foo.error',
+  stderr_logfile_maxbytes => '50MB',
+  stderr_logfile_backups  => '10',
+  stderr_capture_maxbytes => '0',
+  stderr_events_enabled   => false,
+  environment             => {
     'HOME'   => '/home/myuser',
     'PATH'   => '/bin:/sbin:/usr/bin:/usr/sbin',
     'SECRET' => 'mysecret'
-  }
+  },
+  directory               => undef,
+  umask                   => '022',
+  serverurl               => 'AUTO'
 }
\ No newline at end of file
diff --git a/dev/vagrant/dolibarrdev/puphpet/shell/execute-files.sh b/dev/vagrant/dolibarrdev/puphpet/shell/execute-files.sh
index 06713c2ee99293ba5bf095300f83ce112b495a0f..c6c08a7b04cf82fb499f4772622a74197198ca7c 100644
--- a/dev/vagrant/dolibarrdev/puphpet/shell/execute-files.sh
+++ b/dev/vagrant/dolibarrdev/puphpet/shell/execute-files.sh
@@ -4,17 +4,26 @@ export DEBIAN_FRONTEND=noninteractive
 
 VAGRANT_CORE_FOLDER=$(cat '/.puphpet-stuff/vagrant-core-folder.txt')
 
+EXEC_ONCE_DIR="$1"
+EXEC_ALWAYS_DIR="$2"
+
 shopt -s nullglob
-files=("${VAGRANT_CORE_FOLDER}"/files/exec-once/*)
-
-if [[ ! -f '/.puphpet-stuff/exec-once-ran' && (${#files[@]} -gt 0) ]]; then
-    echo 'Running files in files/exec-once'
-    find "${VAGRANT_CORE_FOLDER}/files/exec-once" -maxdepth 1 -not -path '*/\.*' -type f \( ! -iname "empty" \) -exec chmod +x '{}' \; -exec {} \;
-    echo 'Finished running files in files/exec-once'
-    echo 'To run again, delete file /.puphpet-stuff/exec-once-ran'
-    touch /.puphpet-stuff/exec-once-ran
+files=("${VAGRANT_CORE_FOLDER}"/files/"${EXEC_ONCE_DIR}"/*)
+
+if [[ (${#files[@]} -gt 0) ]]; then
+    echo "Running files in files/${EXEC_ONCE_DIR}"
+
+    if [ ! -d "/.puphpet-stuff/${EXEC_ONCE_DIR}-ran" ]; then
+       mkdir "/.puphpet-stuff/${EXEC_ONCE_DIR}-ran"
+       echo "Created directory /.puphpet-stuff/${EXEC_ONCE_DIR}-ran"
+    fi
+
+    find "${VAGRANT_CORE_FOLDER}/files/${EXEC_ONCE_DIR}" -maxdepth 1 -not -path '*/\.*' -type f \( ! -iname "empty" \) -exec cp -n '{}' "/.puphpet-stuff/${EXEC_ONCE_DIR}-ran" \;
+    find "/.puphpet-stuff/${EXEC_ONCE_DIR}-ran" -maxdepth 1 -type f -exec chmod +x '{}' \; -exec {} \; -exec sh -c '>{}' \;
+    echo "Finished running files in files/${EXEC_ONCE_DIR}"
+    echo "To run again, delete file(s) you want rerun in /.puphpet-stuff/${EXEC_ONCE_DIR}-ran or the whole folder to rerun all"
 fi
 
-echo 'Running files in files/exec-always'
-find "${VAGRANT_CORE_FOLDER}/files/exec-always" -maxdepth 1 -not -path '*/\.*' -type f \( ! -iname "empty" \) -exec chmod +x '{}' \; -exec {} \;
-echo 'Finished running files in files/exec-always'
+echo "Running files in files/${EXEC_ALWAYS_DIR}"
+find "${VAGRANT_CORE_FOLDER}/files/${EXEC_ALWAYS_DIR}" -maxdepth 1 -not -path '*/\.*' -type f \( ! -iname "empty" \) -exec chmod +x '{}' \; -exec {} \;
+echo "Finished running files in files/${EXEC_ALWAYS_DIR}"
diff --git a/dev/vagrant/dolibarrdev/puphpet/shell/ssh-keygen.sh b/dev/vagrant/dolibarrdev/puphpet/shell/ssh-keygen.sh
index 6bb7614f9c6ee5022eccdac1d48d121b19ea1d8d..ef00495b2b6608bf38932145dbccdc7f40f3bd05 100644
--- a/dev/vagrant/dolibarrdev/puphpet/shell/ssh-keygen.sh
+++ b/dev/vagrant/dolibarrdev/puphpet/shell/ssh-keygen.sh
@@ -5,37 +5,76 @@ VAGRANT_CORE_FOLDER=$(cat '/.puphpet-stuff/vagrant-core-folder.txt')
 OS=$(/bin/bash "${VAGRANT_CORE_FOLDER}/shell/os-detect.sh" ID)
 VAGRANT_SSH_USERNAME=$(echo "$1")
 
-if [[ ! -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" ]]; then
-    ssh-keygen -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" -P ""
-
-    if [[ ! -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.ppk" ]]; then
-        if [ "${OS}" == 'debian' ] || [ "${OS}" == 'ubuntu' ]; then
-            apt-get install -y putty-tools >/dev/null
-        elif [ "${OS}" == 'centos' ]; then
-            yum -y install putty >/dev/null
+function create_key()
+{
+    BASE_KEY_NAME=$(echo "$1")
+
+    if [[ ! -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}" ]]; then
+        ssh-keygen -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}" -P ""
+
+        if [[ ! -f "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}.ppk" ]]; then
+            if [ "${OS}" == 'debian' ] || [ "${OS}" == 'ubuntu' ]; then
+                apt-get install -y putty-tools >/dev/null
+            elif [ "${OS}" == 'centos' ]; then
+                yum -y install putty >/dev/null
+            fi
+
+            puttygen "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}" -O private -o "${VAGRANT_CORE_FOLDER}/files/dot/ssh/${BASE_KEY_NAME}.ppk"
         fi
 
-        puttygen "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" -O private -o "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.ppk"
+        echo "Your private key for SSH-based authentication has been saved to 'puphpet/files/dot/ssh/${BASE_KEY_NAME}'!"
+    else
+        echo "Pre-existing private key found at 'puphpet/files/dot/ssh/${BASE_KEY_NAME}'"
     fi
+}
 
-    echo 'Your private key for SSH-based authentication have been saved to "puphpet/files/dot/ssh/"!'
-else
-    echo 'Using pre-existing private key at "puphpet/files/dot/ssh/id_rsa"'
-fi
+create_key 'root_id_rsa'
+create_key 'id_rsa'
+
+PUBLIC_SSH_KEY=$(cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub")
 
+echo 'Adding generated key to /root/.ssh/id_rsa'
+echo 'Adding generated key to /root/.ssh/id_rsa.pub'
 echo 'Adding generated key to /root/.ssh/authorized_keys'
+
 mkdir -p /root/.ssh
-cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" > '/root/.ssh/authorized_keys'
+
+cp "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" '/root/.ssh/'
+cp "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" '/root/.ssh/'
+
+if [[ ! -f '/root/.ssh/authorized_keys' ]] || ! grep -q "${PUBLIC_SSH_KEY}" '/root/.ssh/authorized_keys'; then
+    cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" >> '/root/.ssh/authorized_keys'
+fi
+
+chown -R root '/root/.ssh'
+chgrp -R root '/root/.ssh'
+chmod 700 '/root/.ssh'
+chmod 644 '/root/.ssh/id_rsa.pub'
+chmod 600 '/root/.ssh/id_rsa'
 chmod 600 '/root/.ssh/authorized_keys'
 
 if [ "${VAGRANT_SSH_USERNAME}" != 'root' ]; then
     VAGRANT_SSH_FOLDER="/home/${VAGRANT_SSH_USERNAME}/.ssh";
 
+    mkdir -p "${VAGRANT_SSH_FOLDER}"
+
+    echo "Adding generated key to ${VAGRANT_SSH_FOLDER}/id_rsa"
+    echo "Adding generated key to ${VAGRANT_SSH_FOLDER}/id_rsa.pub"
     echo "Adding generated key to ${VAGRANT_SSH_FOLDER}/authorized_keys"
-    cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" > "${VAGRANT_SSH_FOLDER}/authorized_keys"
-    chown "${VAGRANT_SSH_USERNAME}" "${VAGRANT_SSH_FOLDER}/authorized_keys"
-    chgrp "${VAGRANT_SSH_USERNAME}" "${VAGRANT_SSH_FOLDER}/authorized_keys"
+
+    cp "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa" "${VAGRANT_SSH_FOLDER}/id_rsa"
+    cp "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" "${VAGRANT_SSH_FOLDER}/id_rsa.pub"
+
+    if [[ ! -f "${VAGRANT_SSH_FOLDER}/authorized_keys" ]] || ! grep -q "${PUBLIC_SSH_KEY}" "${VAGRANT_SSH_FOLDER}/authorized_keys"; then
+        cat "${VAGRANT_CORE_FOLDER}/files/dot/ssh/id_rsa.pub" >> "${VAGRANT_SSH_FOLDER}/authorized_keys"
+    fi
+
+    chown -R "${VAGRANT_SSH_USERNAME}" "${VAGRANT_SSH_FOLDER}"
+    chgrp -R "${VAGRANT_SSH_USERNAME}" "${VAGRANT_SSH_FOLDER}"
+    chmod 700 "${VAGRANT_SSH_FOLDER}"
+    chmod 644 "${VAGRANT_SSH_FOLDER}/id_rsa.pub"
+    chmod 600 "${VAGRANT_SSH_FOLDER}/id_rsa"
     chmod 600 "${VAGRANT_SSH_FOLDER}/authorized_keys"
-fi
 
-passwd -d vagrant >/dev/null
+    passwd -d "${VAGRANT_SSH_USERNAME}" >/dev/null
+fi
diff --git a/htdocs/accountancy/class/index.html b/htdocs/accountancy/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/accountancy/index.html b/htdocs/accountancy/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/accountancy/index.php b/htdocs/accountancy/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/accountancy/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/adherents/canvas/default/index.php b/htdocs/adherents/canvas/default/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/adherents/canvas/default/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/adherents/canvas/default/tpl/index.html b/htdocs/adherents/canvas/default/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/adherents/canvas/default/tpl/index.php b/htdocs/adherents/canvas/default/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/adherents/canvas/default/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/adherents/canvas/index.html b/htdocs/adherents/canvas/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/adherents/canvas/index.php b/htdocs/adherents/canvas/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/adherents/canvas/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/adherents/cartes/index.html b/htdocs/adherents/cartes/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/adherents/cartes/index.php b/htdocs/adherents/cartes/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/adherents/cartes/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/adherents/class/index.html b/htdocs/adherents/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/asterisk/index.html b/htdocs/asterisk/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/asterisk/index.php b/htdocs/asterisk/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/asterisk/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/barcode/index.html b/htdocs/barcode/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/bookmarks/admin/index.html b/htdocs/bookmarks/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/bookmarks/class/index.html b/htdocs/bookmarks/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/bookmarks/index.html b/htdocs/bookmarks/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/bookmarks/index.php b/htdocs/bookmarks/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/bookmarks/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/boutique/admin/index.html b/htdocs/boutique/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/boutique/client/class/index.html b/htdocs/boutique/client/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/boutique/commande/class/index.html b/htdocs/boutique/commande/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/boutique/critiques/class/index.html b/htdocs/boutique/critiques/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/boutique/promotion/class/index.html b/htdocs/boutique/promotion/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cashdesk/admin/index.html b/htdocs/cashdesk/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cashdesk/class/index.html b/htdocs/cashdesk/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cashdesk/class/index.php b/htdocs/cashdesk/class/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/cashdesk/class/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/cashdesk/css/index.html b/htdocs/cashdesk/css/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cashdesk/img/index.html b/htdocs/cashdesk/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cashdesk/img/index.php b/htdocs/cashdesk/img/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/cashdesk/img/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/cashdesk/include/index.html b/htdocs/cashdesk/include/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cashdesk/include/index.php b/htdocs/cashdesk/include/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/cashdesk/include/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/cashdesk/javascript/index.html b/htdocs/cashdesk/javascript/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cashdesk/javascript/index.php b/htdocs/cashdesk/javascript/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/cashdesk/javascript/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/cashdesk/tpl/index.html b/htdocs/cashdesk/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cashdesk/tpl/index.php b/htdocs/cashdesk/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/cashdesk/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/categories/admin/index.html b/htdocs/categories/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/categories/class/index.html b/htdocs/categories/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/comm/action/class/index.html b/htdocs/comm/action/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/comm/admin/index.html b/htdocs/comm/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/comm/mailing/class/index.html b/htdocs/comm/mailing/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/comm/propal/class/index.html b/htdocs/comm/propal/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/comm/propal/tpl/index.html b/htdocs/comm/propal/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/comm/prospect/class/index.html b/htdocs/comm/prospect/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index b6d06abf3687349869da92b227114b944de48ae7..6c1b5eeed90e1c6f45a8b8873444da24a0765f51 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -238,6 +238,7 @@ class Commande extends CommonOrder
         if (! $resql)
         {
             dol_print_error($this->db);
+            $this->error=$this->db->lasterror();
             $error++;
         }
 
@@ -259,8 +260,13 @@ class Commande extends CommonOrder
 						$mouvP->origin = &$this;
                         // We decrement stock of product (and sub-products)
                         $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("OrderValidatedInDolibarr",$num));
-                        if ($result < 0) { $error++; }
+                        if ($result < 0)
+                        { 
+                        	$error++;
+                        	$this->error=$mouvP->error;
+                        }
                     }
+                    if ($error) break;
                 }
             }
         }
@@ -296,12 +302,10 @@ class Commande extends CommonOrder
 
         if (! $error)
         {
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('ORDER_VALIDATE',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('ORDER_VALIDATE',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
         }
 
         // Set new ref and current status
@@ -319,7 +323,6 @@ class Commande extends CommonOrder
         else
         {
             $this->db->rollback();
-            $this->error=$this->db->lasterror();
             return -1;
         }
     }
@@ -430,12 +433,10 @@ class Commande extends CommonOrder
         $resql = $this->db->query($sql);
         if ($resql)
         {
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('ORDER_REOPEN',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('ORDER_REOPEN',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
         }
         else
         {
@@ -491,13 +492,11 @@ class Commande extends CommonOrder
 
             if ($this->db->query($sql))
             {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('ORDER_CLOSE',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                // Fin appel triggers
-
+	            // Call trigger
+	            $result=$this->call_trigger('ORDER_CLOSE',$user);
+	            if ($result < 0) $error++;            
+	            // End call triggers
+ 
                 if (! $error)
                 {
                 	$this->statut=3;
@@ -558,8 +557,11 @@ class Commande extends CommonOrder
 						$mouvP = new MouvementStock($this->db);
 						// We increment stock of product (and sub-products)
 						$result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("OrderCanceledInDolibarr",$this->ref));
-						if ($result < 0) {
+						if ($result < 0) 
+						{
 							$error++;
+							$this->error=$mouvP->error;
+							break;
 						}
 					}
 				}
@@ -567,14 +569,10 @@ class Commande extends CommonOrder
 
 			if (! $error)
 			{
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('ORDER_CANCEL',$this,$user,$langs,$conf);
-				if ($result < 0) {
-					$error++; $this->errors=$interface->errors;
-				}
-				// Fin appel triggers
+	            // Call trigger
+	            $result=$this->call_trigger('ORDER_CANCEL',$user);
+	            if ($result < 0) $error++;            
+	            // End call triggers
 			}
 
 			if (! $error)
@@ -585,8 +583,6 @@ class Commande extends CommonOrder
 			}
 			else
 			{
-				$this->error=$mouvP->error;
-
 				foreach($this->errors as $errmsg)
 				{
 					dol_syslog(get_class($this)."::cancel ".$errmsg, LOG_ERR);
@@ -812,12 +808,10 @@ class Commande extends CommonOrder
 
                     if (! $notrigger)
                     {
-                        // Appel des triggers
-                        include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                        $interface=new Interfaces($this->db);
-                        $result=$interface->run_triggers('ORDER_CREATE',$this,$user,$langs,$conf);
-                        if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                        // Fin appel triggers
+			            // Call trigger
+			            $result=$this->call_trigger('ORDER_CREATE',$user);
+			            if ($result < 0) $error++;            
+			            // End call triggers
                     }
 
 	                if (!$error) {
@@ -909,12 +903,10 @@ class Commande extends CommonOrder
                 if ($reshook < 0) $error++;
             }
 
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('ORDER_CLONE',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('ORDER_CLONE',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
         }
 
         // End
@@ -2228,14 +2220,10 @@ class Commande extends CommonOrder
 		dol_syslog(get_class($this)."::classifyBilled", LOG_DEBUG);
 		if ($this->db->query($sql))
 		{
-			// Appel des triggers
-			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			$interface=new Interfaces($this->db);
-			$result=$interface->run_triggers('ORDER_CLASSIFY_BILLED',$this,$user,$langs,$conf);
-			if ($result < 0) {
-				$error++; $this->errors=$interface->errors;
-			}
-			// Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('ORDER_CLASSIFY_BILLED',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
 
 			if (! $error)
 			{
@@ -2247,8 +2235,6 @@ class Commande extends CommonOrder
 			}
 			else
 			{
-				$this->error=$this->db->error();
-
 				foreach($this->errors as $errmsg)
 				{
 					dol_syslog(get_class($this)."::classifyBilled ".$errmsg, LOG_ERR);
@@ -2453,16 +2439,13 @@ class Commande extends CommonOrder
 
         if (! $error && ! $notrigger)
         {
-        	// Appel des triggers
-        	include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-        	$interface=new Interfaces($this->db);
-        	$result=$interface->run_triggers('ORDER_DELETE',$this,$user,$langs,$conf);
-        	if ($result < 0) {
-        		$error++; $this->errors=$interface->errors;
-        	}
-        	// Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('ORDER_DELETE',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
         }
 
+        //TODO: Check for error after each action. If one failed we rollback, don't waste time to do action if previous fail
         if (! $error)
         {
         	// Delete order details
@@ -2471,6 +2454,7 @@ class Commande extends CommonOrder
         	if (! $this->db->query($sql) )
         	{
         		$error++;
+        		$this->errors[]=$this->db->lasterror();
         	}
 
         	// Delete order
@@ -2479,6 +2463,7 @@ class Commande extends CommonOrder
         	if (! $this->db->query($sql) )
         	{
         		$error++;
+        		$this->errors[]=$this->db->lasterror();
         	}
 
         	// Delete linked object
@@ -2538,7 +2523,6 @@ class Commande extends CommonOrder
         }
         else
         {
-            $this->error=$this->db->lasterror();
 	        foreach($this->errors as $errmsg)
 	        {
 		        dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
@@ -3197,12 +3181,10 @@ class OrderLine extends CommonOrderLine
 				}
 			}
 
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('LINEORDER_DELETE',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('LINEORDER_DELETE',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
 
 	        if (!$error) {
 		        $this->db->commit();
@@ -3322,12 +3304,10 @@ class OrderLine extends CommonOrderLine
 
             if (! $notrigger)
             {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('LINEORDER_INSERT',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                // Fin appel triggers
+	            // Call trigger
+	            $result=$this->call_trigger('LINEORDER_INSERT',$user);
+	            if ($result < 0) $error++;            
+	            // End call triggers
             }
 
 	        if (!$error) {
@@ -3439,12 +3419,10 @@ class OrderLine extends CommonOrderLine
 
 			if (! $notrigger)
 			{
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result = $interface->run_triggers('LINEORDER_UPDATE',$this,$user,$langs,$conf);
-				if ($result < 0) { $error++; $this->errors=$interface->errors; }
-				// Fin appel triggers
+	            // Call trigger
+	            $result=$this->call_trigger('LINEORDER_UPDATE',$user);
+	            if ($result < 0) $error++;            
+	            // End call triggers
 			}
 
 			if (!$error) {
diff --git a/htdocs/commande/class/index.html b/htdocs/commande/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/commande/tpl/index.html b/htdocs/commande/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/bank/class/index.html b/htdocs/compta/bank/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/deplacement/class/index.html b/htdocs/compta/deplacement/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/dons/class/index.html b/htdocs/compta/dons/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/facture/admin/index.html b/htdocs/compta/facture/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index 1cfb5fe3725c20f9ad10b9703d95da9ebb465dba..7e5af4412804b7ddcddf504f3fb5a444e4f93363 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -482,14 +482,10 @@ class Facture extends CommonInvoice
 					}
 					else if ($reshook < 0) $error++;
 
-					// Appel des triggers
-					include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-					$interface=new Interfaces($this->db);
-					$result=$interface->run_triggers('BILL_CREATE',$this,$user,$langs,$conf);
-					if ($result < 0) {
-						$error++; $this->errors=$interface->errors;
-					}
-					// Fin appel triggers
+                    // Call trigger
+                    $result=$this->call_trigger('BILL_CREATE',$user);
+                    if ($result < 0) $error++;             
+                    // End call triggers
 
 					if (! $error)
 					{
@@ -655,14 +651,10 @@ class Facture extends CommonInvoice
 				if ($reshook < 0) $error++;
 			}
 
-			// Appel des triggers
-			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			$interface=new Interfaces($this->db);
-			$result=$interface->run_triggers('BILL_CLONE',$this,$user,$langs,$conf);
-			if ($result < 0) {
-				$error++; $this->errors=$interface->errors;
-			}
-			// Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('BILL_CLONE',$user);
+            if ($result < 0) $error++;             
+            // End call triggers
 		}
 
 		// End
@@ -1100,14 +1092,10 @@ class Facture extends CommonInvoice
 		{
 			if (! $notrigger)
 			{
-				// Call triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('BILL_MODIFY',$this,$user,$langs,$conf);
-				if ($result < 0) {
-					$error++; $this->errors=$interface->errors;
-				}
-				// End call triggers
+	            // Call trigger
+	            $result=$this->call_trigger('BILL_MODIFY',$user);
+	            if ($result < 0) $error++;             
+	            // End call triggers
 			}
 		}
 
@@ -1262,14 +1250,10 @@ class Facture extends CommonInvoice
 
 		if (! $error && ! $notrigger)
 		{
-			// Appel des triggers
-			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			$interface=new Interfaces($this->db);
-			$result=$interface->run_triggers('BILL_DELETE',$this,$user,$langs,$conf);
-			if ($result < 0) {
-				$error++; $this->errors=$interface->errors;
-			}
-			// Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('BILL_DELETE',$user);
+            if ($result < 0) $error++;             
+            // End call triggers
 		}
 
 		// Removed extrafields
@@ -1403,7 +1387,6 @@ class Facture extends CommonInvoice
 		}
 		else
 		{
-			$this->error=$this->db->lasterror();
 			$this->db->rollback();
 			return -2;
 		}
@@ -1439,14 +1422,10 @@ class Facture extends CommonInvoice
 			$resql = $this->db->query($sql);
 			if ($resql)
 			{
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('BILL_PAYED',$this,$user,$langs,$conf);
-				if ($result < 0) {
-					$error++; $this->errors=$interface->errors;
-				}
-				// Fin appel triggers
+	            // Call trigger
+	            $result=$this->call_trigger('BILL_PAYED',$user);
+	            if ($result < 0) $error++;             
+	            // End call triggers
 			}
 			else
 			{
@@ -1495,14 +1474,10 @@ class Facture extends CommonInvoice
 		$resql = $this->db->query($sql);
 		if ($resql)
 		{
-			// Appel des triggers
-			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			$interface=new Interfaces($this->db);
-			$result=$interface->run_triggers('BILL_UNPAYED',$this,$user,$langs,$conf);
-			if ($result < 0) {
-				$error++; $this->errors=$interface->errors;
-			}
-			// Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('BILL_UNPAYED',$user);
+            if ($result < 0) $error++;             
+            // End call triggers
 		}
 		else
 		{
@@ -1562,18 +1537,14 @@ class Facture extends CommonInvoice
 			$resql=$this->db->query($sql);
 			if ($resql)
 			{
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('BILL_CANCEL',$this,$user,$langs,$conf);
-				if ($result < 0) {
-					$error++; 
-					$this->errors=$interface->errors;
+	            // Call trigger
+	            $result=$this->call_trigger('BILL_CANCEL',$user);
+	            if ($result < 0)
+	            {             
 					$this->db->rollback();
 					return -1;
-					
 				}
-				// Fin appel triggers
+	            // End call triggers
 
 				$this->db->commit();
 				return 1;
@@ -1791,14 +1762,11 @@ class Facture extends CommonInvoice
 			// Trigger calls
 			if (! $error)
 			{
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('BILL_VALIDATE',$this,$user,$langs,$conf);
-				if ($result < 0) {
-					$error++; $this->errors=$interface->errors;
-				}
-				// Fin appel triggers
+	            // Call trigger
+	            $result=$this->call_trigger('BILL_VALIDATE',$user);
+	            if ($result < 0) $error++;    
+	            //TODO: Restoring ref, facnumber, statut, brouillon to previous value if trigger fail           
+	            // End call triggers
 			}
 		}
 		else
@@ -1872,17 +1840,15 @@ class Facture extends CommonInvoice
 				$old_statut=$this->statut;
 				$this->brouillon = 1;
 				$this->statut = 0;
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('BILL_UNVALIDATE',$this,$user,$langs,$conf);
-				if ($result < 0) {
+	            // Call trigger
+	            $result=$this->call_trigger('BILL_UNVALIDATE',$user);
+	            if ($result < 0)              
+				{
 					$error++;
-					$this->errors=$interface->errors;
 					$this->statut=$old_statut;
 					$this->brouillon=0;
 				}
-				// Fin appel triggers
+	            // End call triggers
 			} else {
 				$this->db->rollback();
 				return -1;
@@ -3567,18 +3533,14 @@ class FactureLigne  extends CommonInvoiceLine
 
 			if (! $notrigger)
 			{
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result = $interface->run_triggers('LINEBILL_INSERT',$this,$user,$langs,$conf);
-				if ($result < 0) 
-				{
-					$error++;
-					$this->errors=$interface->errors;
+                // Call trigger
+                $result=$this->call_trigger('LINEBILL_INSERT',$user);
+                if ($result < 0)
+                {            
 					$this->db->rollback();
 					return -2;
 				}
-				// Fin appel triggers
+                // End call triggers
 			}
 
 			$this->db->commit();
@@ -3683,18 +3645,14 @@ class FactureLigne  extends CommonInvoiceLine
 
 			if (! $notrigger)
 			{
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result = $interface->run_triggers('LINEBILL_UPDATE',$this,$user,$langs,$conf);
-				if ($result < 0)
-				{
-					$error++;
-					$this->errors=$interface->errors;
+                // Call trigger
+                $result=$this->call_trigger('LINEBILL_UPDATE',$user);
+                if ($result < 0)            
+ 				{
 					$this->db->rollback();
 					return -2;
 				}
-				// Fin appel triggers
+                // End call triggers
 			}
 			$this->db->commit();
 			return 1;
@@ -3719,26 +3677,22 @@ class FactureLigne  extends CommonInvoiceLine
 		$error=0;
 
 		$this->db->begin();
+		
+		// Call trigger
+		$result=$this->call_trigger('LINEBILL_DELETE',$user);
+		if ($result < 0)
+		{
+			$this->db->rollback();
+			return -1;
+		}
+		// End call triggers
+		
 
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."facturedet WHERE rowid = ".$this->rowid;
 		dol_syslog(get_class($this)."::delete", LOG_DEBUG);
 		if ($this->db->query($sql) )
 		{
-			// Appel des triggers
-			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			$interface=new Interfaces($this->db);
-			$result = $interface->run_triggers('LINEBILL_DELETE',$this,$user,$langs,$conf);
-			if ($result < 0)
-			{
-					$error++;
-					$this->errors=$interface->errors;
-					$this->db->rollback();
-					return -1;
-			}
-			// Fin appel triggers
-
 			$this->db->commit();
-
 			return 1;
 		}
 		else
diff --git a/htdocs/compta/facture/class/index.html b/htdocs/compta/facture/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/facture/index.html b/htdocs/compta/facture/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/facture/index.php b/htdocs/compta/facture/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/compta/facture/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/compta/facture/tpl/index.html b/htdocs/compta/facture/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/journal/index.html b/htdocs/compta/journal/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/localtax/class/index.html b/htdocs/compta/localtax/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/localtax/class/localtax.class.php b/htdocs/compta/localtax/class/localtax.class.php
index c8766387cd055e21f920138413ac74bc242ded3a..72ce346abaddb3ea98eecf1c55e9670d2b613c8d 100644
--- a/htdocs/compta/localtax/class/localtax.class.php
+++ b/htdocs/compta/localtax/class/localtax.class.php
@@ -104,13 +104,13 @@ class Localtax extends CommonObject
         {
             $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."localtax");
 
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('LOCALTAX_CREATE',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('LOCALTAX_CREATE',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
 
+			//FIXME: Add rollback if trigger fail
+            
             return $this->id;
         }
         else
@@ -165,12 +165,12 @@ class Localtax extends CommonObject
 
 		if (! $notrigger)
 		{
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('LOCALTAX_MODIFY',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('LOCALTAX_MODIFY',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
+            
+            //FIXME: Add rollback if trigger fail
     	}
 
         return 1;
@@ -253,6 +253,12 @@ class Localtax extends CommonObject
 
 		$error=0;
 
+		// Call trigger
+		$result=$this->call_trigger('LOCALTAX_DELETE',$user);
+		if ($result < 0) return -1;
+		// End call triggers
+		
+		
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."localtax";
 		$sql.= " WHERE rowid=".$this->id;
 
@@ -264,12 +270,6 @@ class Localtax extends CommonObject
 			return -1;
 		}
 
-        // Appel des triggers
-        include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-        $interface=new Interfaces($this->db);
-        $result=$interface->run_triggers('LOCALTAX_DELETE',$this,$user,$langs,$conf);
-        if ($result < 0) { $error++; $this->errors=$interface->errors; }
-        // Fin appel triggers
 
 		return 1;
 	}
diff --git a/htdocs/compta/paiement/cheque/class/index.html b/htdocs/compta/paiement/cheque/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/paiement/class/index.html b/htdocs/compta/paiement/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/payment_sc/index.html b/htdocs/compta/payment_sc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/prelevement/class/index.html b/htdocs/compta/prelevement/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/salaries/class/index.html b/htdocs/compta/salaries/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/salaries/class/paymentsalary.class.php b/htdocs/compta/salaries/class/paymentsalary.class.php
index c2fc0c9c23a94ee1f35b536007ad232d8c37d7fc..5e728b0cc64092facb2607bd795f944ad6c6bda2 100644
--- a/htdocs/compta/salaries/class/paymentsalary.class.php
+++ b/htdocs/compta/salaries/class/paymentsalary.class.php
@@ -1,19 +1,20 @@
 <?php
 /* Copyright (C) 2011-2014 Alexandre Spangaro   <alexandre.spangaro@gmail.com>
+ * Copyright (C) 2014	   Juanjo Menent		<jmenent@2byte.es>
  *
-* 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 3 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, see <http://www.gnu.org/licenses/>.
-*/
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ */
 
 /**
  *      \file       htdocs/compta/salaries/class/paymentsalary.class.php
@@ -124,14 +125,12 @@ class PaymentSalary extends CommonObject
 
 		if (! $notrigger)
 		{
-			// Start triggers
-			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			$interface=new Interfaces($this->db);
-			$result=$interface->run_triggers('PAYMENT_SALARY_MODIFY',$this,$user,$langs,$conf);
-			if ($result < 0) {
-				$error++; $this->errors=$interface->errors;
-			}
-			// End triggers
+            // Call trigger
+            $result=$this->call_trigger('PAYMENT_SALARY_MODIFY',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
+
+			//FIXME: Add rollback if trigger fail
 		}
 
 		return 1;
@@ -224,6 +223,12 @@ class PaymentSalary extends CommonObject
 		global $conf, $langs;
 
 		$error=0;
+		
+		// Call trigger
+		$result=$this->call_trigger('PAYMENT_SALARY_DELETE',$user);
+		if ($result < 0) return -1;
+		// End call triggers
+		
 
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."payment_salary";
 		$sql.= " WHERE rowid=".$this->id;
@@ -236,15 +241,6 @@ class PaymentSalary extends CommonObject
 			return -1;
 		}
 
-		// Start triggers
-		include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-		$interface=new Interfaces($this->db);
-		$result=$interface->run_triggers('PAYMENT_SALARY_DELETE',$this,$user,$langs,$conf);
-		if ($result < 0) {
-			$error++; $this->errors=$interface->errors;
-		}
-		// End triggers
-
 		return 1;
 	}
 
@@ -283,6 +279,8 @@ class PaymentSalary extends CommonObject
 	function create($user)
 	{
 		global $conf,$langs;
+		
+		$error=0;
 
 		// Clean parameters
 		$this->amount=price2num(trim($this->amount));
@@ -356,7 +354,6 @@ class PaymentSalary extends CommonObject
 		$result = $this->db->query($sql);
 		if ($result)
 		{
-			$ok=1;
 
 			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."payment_salary");
 
@@ -392,10 +389,10 @@ class PaymentSalary extends CommonObject
 					else
 					{
 						$this->error=$acc->error;
-						$ok=0;
+						$error++;
 					}
 
-					if ($ok)
+					if (! $error)
 					{
 						// Add link 'payment_salary' in bank_url between payment and bank transaction
 						$url=DOL_URL_ROOT.'/compta/salaries/fiche.php?id=';
@@ -404,7 +401,7 @@ class PaymentSalary extends CommonObject
 						if ($result <= 0)
 						{
 							$this->error=$acc->error;
-							$ok=0;
+							$error++;
 						}
 					}
 
@@ -424,38 +421,25 @@ class PaymentSalary extends CommonObject
 					if ($result <= 0)
 					{
 						$this->error=$acc->error;
-						$ok=0;
+						$error++;
 					}
 				}
 
-				// Start triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('PAYMENT_SALARY_CREATE',$this,$user,$langs,$conf);
-				if ($result < 0) {
-					$error++; $this->errors=$interface->errors;
-				}
-				// End triggers
-
+	            // Call trigger
+	            $result=$this->call_trigger('PAYMENT_SALARY_CREATE',$user);
+	            if ($result < 0) $error++;            
+	            // End call triggers
+	
 			}
-			else $ok=0;
+			else $error++;
 
-			if ($ok)
+			if (! $error)
 			{
-				if ($ok)
-				{
-					$this->db->commit();
-					return $this->id;
-				}
-				else
-				{
-					$this->db->rollback();
-					return -3;
-				}
+				$this->db->commit();
+				return $this->id;
 			}
 			else
 			{
-				$this->error=$this->db->error();
 				$this->db->rollback();
 				return -2;
 			}
diff --git a/htdocs/compta/sociales/class/index.html b/htdocs/compta/sociales/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/tva/class/index.html b/htdocs/compta/tva/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/compta/tva/class/tva.class.php b/htdocs/compta/tva/class/tva.class.php
index b19c1cf627d10afabd3b653250b8f2476c07e61e..312da55f13892d97d11e0f62b89a15d060e84e84 100644
--- a/htdocs/compta/tva/class/tva.class.php
+++ b/htdocs/compta/tva/class/tva.class.php
@@ -121,13 +121,12 @@ class Tva extends CommonObject
         {
             $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."tva");
 
-            // Start triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('TVA_CREATE',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // End triggers
+            // Call trigger
+            $result=$this->call_trigger('TVA_CREATE',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
 
+            //FIXME: Add rollback if trigger fail
             return $this->id;
         }
         else
@@ -187,12 +186,12 @@ class Tva extends CommonObject
 
 		if (! $notrigger)
 		{
-            // Start triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('TVA_MODIFY',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // End triggers
+            // Call trigger
+            $result=$this->call_trigger('TVA_MODIFY',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
+            
+            //FIXME: Add rollback if trigger fail
     	}
 
         return 1;
@@ -279,7 +278,12 @@ class Tva extends CommonObject
 		global $conf, $langs;
 
 		$error=0;
-
+		
+		// Call trigger
+		$result=$this->call_trigger('TVA_DELETE',$user);
+		if ($result < 0) return -1;
+		// End call triggers
+		
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."tva";
 		$sql.= " WHERE rowid=".$this->id;
 
@@ -291,12 +295,6 @@ class Tva extends CommonObject
 			return -1;
 		}
 
-        // Start triggers
-        include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-        $interface=new Interfaces($this->db);
-        $result=$interface->run_triggers('TVA_DELETE',$this,$user,$langs,$conf);
-        if ($result < 0) { $error++; $this->errors=$interface->errors; }
-        // End triggers
 
 		return 1;
 	}
@@ -541,13 +539,16 @@ class Tva extends CommonObject
         {
             $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."tva");    // TODO should be called paiementtva
 
-            // Start triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('TVA_ADDPAYMENT',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // End triggers
-
+            // Call trigger
+            //XXX: Should be done just befor commit no ?
+            $result=$this->call_trigger('TVA_ADDPAYMENT',$user);
+            if ($result < 0) 
+            {
+            	$this->id = 0;
+            	$ok = 0;
+            }
+            // End call triggers
+            
             if ($this->id > 0)
             {
                 $ok=1;
@@ -595,7 +596,6 @@ class Tva extends CommonObject
             }
             else
             {
-                $this->error=$this->db->error();
                 $this->db->rollback();
                 return -2;
             }
diff --git a/htdocs/conf/index.html b/htdocs/conf/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/contact/canvas/default/index.html b/htdocs/contact/canvas/default/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/contact/canvas/default/index.php b/htdocs/contact/canvas/default/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/contact/canvas/default/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/contact/canvas/default/tpl/index.html b/htdocs/contact/canvas/default/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/contact/canvas/default/tpl/index.php b/htdocs/contact/canvas/default/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/contact/canvas/default/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/contact/canvas/index.html b/htdocs/contact/canvas/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/contact/canvas/index.php b/htdocs/contact/canvas/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/contact/canvas/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/contact/class/index.html b/htdocs/contact/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/contact/index.html b/htdocs/contact/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/contact/index.php b/htdocs/contact/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/contact/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/contrat/admin/index.html b/htdocs/contrat/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php
index d07aebfebc749e5605b5efc3779b0e16f2538931..2aa4627c77d1a5a54937ebdc7f5f67661a53d64f 100644
--- a/htdocs/contrat/class/contrat.class.php
+++ b/htdocs/contrat/class/contrat.class.php
@@ -44,6 +44,7 @@ class Contrat extends CommonObject
 
 	var $id;
 	var $ref;
+	var $ref_ext;
 	var $socid;
 	var $societe;		// Objet societe
 	var $statut=0;		// 0=Draft,
@@ -399,6 +400,7 @@ class Contrat extends CommonObject
 		$sql.= " fk_projet,";
 		$sql.= " fk_commercial_signature, fk_commercial_suivi,";
 		$sql.= " note_private, note_public, extraparams";
+		$sql.= " ,ref_ext";
 		$sql.= " FROM ".MAIN_DB_PREFIX."contrat";
 		if ($ref)
 		{
@@ -417,6 +419,7 @@ class Contrat extends CommonObject
 			{
 				$this->id						= $result["rowid"];
 				$this->ref						= (!isset($result["ref"]) || !$result["ref"]) ? $result["rowid"] : $result["ref"];
+				$this->ref_ext					= $result["ref_ext"];
 				$this->statut					= $result["statut"];
 				$this->mise_en_service			= $this->db->jdate($result["datemise"]);
 				$this->date_contrat				= $this->db->jdate($result["datecontrat"]);
@@ -717,7 +720,7 @@ class Contrat extends CommonObject
 		// Insert contract
 		$sql = "INSERT INTO ".MAIN_DB_PREFIX."contrat (datec, fk_soc, fk_user_author, date_contrat,";
 		$sql.= " fk_commercial_signature, fk_commercial_suivi, fk_projet,";
-		$sql.= " ref, entity, note_private, note_public)";
+		$sql.= " ref, entity, note_private, note_public, ref_ext)";
 		$sql.= " VALUES ('".$this->db->idate($now)."',".$this->socid.",".$user->id;
 		$sql.= ",".$this->db->idate($this->date_contrat);
 		$sql.= ",".($this->commercial_signature_id>0?$this->commercial_signature_id:"NULL");
@@ -727,6 +730,7 @@ class Contrat extends CommonObject
 		$sql.= ", ".$conf->entity;
 		$sql.= ", ".(!empty($this->note_private)?("'".$this->db->escape($this->note_private)."'"):"NULL");
 		$sql.= ", ".(!empty($this->note_public)?("'".$this->db->escape($this->note_public)."'"):"NULL");
+		$sql.= ", ".(!empty($this->ref_ext)?("'".$this->db->escape($this->ref_ext)."'"):"NULL");
 		$sql.= ")";
 		$resql=$this->db->query($sql);
 		if ($resql)
@@ -824,6 +828,11 @@ class Contrat extends CommonObject
 		$error=0;
 
 		$this->db->begin();
+		
+	    // Call trigger
+	    $result=$this->call_trigger('CONTRACT_DELETE',$user);
+	    if ($result < 0) { $error++; }
+	    // End call triggers
 
 		if (! $error)
 		{
@@ -909,14 +918,6 @@ class Contrat extends CommonObject
 			}
 		}
 
-		if (! $error)
-		{
-            // Call trigger
-            $result=$this->call_trigger('CONTRACT_DELETE',$user);
-            if ($result < 0) { $error++; }
-            // End call triggers
-		}
-
 		if (! $error)
 		{
 			// We remove directory
@@ -948,6 +949,102 @@ class Contrat extends CommonObject
 			return -1;
 		}
 	}
+	
+	/**
+	 *  Update object into database
+	 *
+	 *  @param	User	$user        User that modifies
+	 *  @param  int		$notrigger	 0=launch triggers after, 1=disable triggers
+	 *  @return int     		   	 <0 if KO, >0 if OK
+	 */
+	function update($user=0, $notrigger=0)
+	{
+		global $conf, $langs;
+		$error=0;
+	
+		// Clean parameters
+	
+		if (isset($this->ref)) $this->ref=trim($this->ref);
+		if (isset($this->ref_ext)) $this->ref_ext=trim($this->ref_ext);
+		if (isset($this->entity)) $this->entity=trim($this->entity);
+		if (isset($this->statut)) $this->statut=trim($this->statut);
+		if (isset($this->fk_soc)) $this->fk_soc=trim($this->fk_soc);
+		if (isset($this->fk_projet)) $this->fk_projet=trim($this->fk_projet);
+		if (isset($this->fk_commercial_signature)) $this->fk_commercial_signature=trim($this->fk_commercial_signature);
+		if (isset($this->fk_commercial_suivi)) $this->fk_commercial_suivi=trim($this->fk_commercial_suivi);
+		if (isset($this->fk_user_mise_en_service)) $this->fk_user_mise_en_service=trim($this->fk_user_mise_en_service);
+		if (isset($this->fk_user_cloture)) $this->fk_user_cloture=trim($this->fk_user_cloture);
+		if (isset($this->note_private)) $this->note_private=trim($this->note_private);
+		if (isset($this->note_public)) $this->note_public=trim($this->note_public);
+		if (isset($this->import_key)) $this->import_key=trim($this->import_key);
+		if (isset($this->extraparams)) $this->extraparams=trim($this->extraparams);
+	
+	
+	
+		// Check parameters
+		// Put here code to add a control on parameters values
+	
+		// Update request
+		$sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET";
+	
+		$sql.= " ref=".(isset($this->ref)?"'".$this->db->escape($this->ref)."'":"null").",";
+		$sql.= " ref_ext=".(isset($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null").",";
+		$sql.= " entity=".$conf->entity.",";
+		$sql.= " date_contrat=".(dol_strlen($this->date_contrat)!=0 ? "'".$this->db->idate($this->date_contrat)."'" : 'null').",";
+		$sql.= " statut=".(isset($this->statut)?$this->statut:"null").",";
+		$sql.= " mise_en_service=".(dol_strlen($this->mise_en_service)!=0 ? "'".$this->db->idate($this->mise_en_service)."'" : 'null').",";
+		$sql.= " fin_validite=".(dol_strlen($this->fin_validite)!=0 ? "'".$this->db->idate($this->fin_validite)."'" : 'null').",";
+		$sql.= " date_cloture=".(dol_strlen($this->date_cloture)!=0 ? "'".$this->db->idate($this->date_cloture)."'" : 'null').",";
+		$sql.= " fk_soc=".(isset($this->fk_soc)?$this->fk_soc:"null").",";
+		$sql.= " fk_projet=".(isset($this->fk_projet)?$this->fk_projet:"null").",";
+		$sql.= " fk_commercial_signature=".(isset($this->fk_commercial_signature)?$this->fk_commercial_signature:"null").",";
+		$sql.= " fk_commercial_suivi=".(isset($this->fk_commercial_suivi)?$this->fk_commercial_suivi:"null").",";
+		$sql.= " fk_user_mise_en_service=".(isset($this->fk_user_mise_en_service)?$this->fk_user_mise_en_service:"null").",";
+		$sql.= " fk_user_cloture=".(isset($this->fk_user_cloture)?$this->fk_user_cloture:"null").",";
+		$sql.= " note_private=".(isset($this->note_private)?"'".$this->db->escape($this->note_private)."'":"null").",";
+		$sql.= " note_public=".(isset($this->note_public)?"'".$this->db->escape($this->note_public)."'":"null").",";
+		$sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null").",";
+		$sql.= " extraparams=".(isset($this->extraparams)?"'".$this->db->escape($this->extraparams)."'":"null")."";
+	
+	
+		$sql.= " WHERE rowid=".$this->id;
+	
+		$this->db->begin();
+	
+		$resql = $this->db->query($sql);
+		if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
+	
+		if (! $error)
+		{
+			if (! $notrigger)
+			{
+				// Uncomment this and change MYOBJECT to your own tag if you
+				// want this action calls a trigger.
+	
+				//// Call triggers
+				//$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
+				//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
+				//// End call triggers
+				}
+			}
+	
+			// Commit or rollback
+			if ($error)
+			{
+				foreach($this->errors as $errmsg)
+				{
+					dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR);
+					$this->error.=($this->error?', '.$errmsg:$errmsg);
+				}
+				$this->db->rollback();
+				return -1*$error;
+			}
+			else
+			{
+				$this->db->commit();
+				return 1;
+			}
+		}
 
 
 	/**
@@ -1078,6 +1175,15 @@ class Contrat extends CommonObject
 				$result=$this->update_statut($user);
 				if ($result > 0)
 				{
+				    // Call trigger
+				    $result=$this->call_trigger('LINECONTRACT_CREATE',$user);
+				    if ($result < 0)
+				    { 
+				        $this->db->rollback();
+				        return -1;
+				    }
+				    // End call triggers
+				    
 					$this->db->commit();
 					return 1;
 				}
@@ -1222,6 +1328,15 @@ class Contrat extends CommonObject
 			$result=$this->update_statut($user);
 			if ($result >= 0)
 			{
+		        // Call trigger
+		        $result=$this->call_trigger('LINECONTRACT_UPDATE',$user);
+		        if ($result < 0) 
+		        { 
+		            $this->db->rollback(); 
+		            return -3; 
+		        }
+		        // End call triggers
+	     			    
 				$this->db->commit();
 				return 1;
 			}
@@ -1257,6 +1372,11 @@ class Contrat extends CommonObject
 		if ($this->statut >= 0)
 		{
 
+		    // Call trigger
+		    $result=$this->call_trigger('LINECONTRACT_DELETE',$user);
+		    if ($result < 0) return -1;
+		    // End call triggers
+		    
 		    $this->db->begin();
 
 			$sql = "DELETE FROM ".MAIN_DB_PREFIX."contratdet";
@@ -1271,11 +1391,6 @@ class Contrat extends CommonObject
 				return -1;
 			}
 
-            // Call trigger
-            $result=$this->call_trigger('LINECONTRACT_DELETE',$user);
-            if ($result < 0) { $error++; $this->db->rollback(); return -1; }
-            // End call triggers
-
             $this->db->commit();
 			return 1;
 		}
@@ -1734,13 +1849,8 @@ class Contrat extends CommonObject
 /**
  *	Classe permettant la gestion des lignes de contrats
  */
-class ContratLigne
+class ContratLigne extends CommonObject
 {
-	var $db;							//!< To store db handler
-	var $error;							//!< To return error code (or message)
-	var $errors=array();				//!< To return several error codes (or messages)
-	//var $element='contratdet';			//!< Id that identify managed objects
-	//var $table_element='contratdet';	//!< Name of table without prefix where object is stored
 
 	var $id;
 	var $ref;
diff --git a/htdocs/contrat/class/index.html b/htdocs/contrat/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/contrat/fiche.php b/htdocs/contrat/fiche.php
index 4c842e25f554441e2ae9fd0b0e5e8a8a7e91d016..e073566c55f8de3f7df81a64c91f829274bd8440 100644
--- a/htdocs/contrat/fiche.php
+++ b/htdocs/contrat/fiche.php
@@ -3,7 +3,7 @@
  * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
  * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
  * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
- * Copyright (C) 2010-2013	Juanjo Menent			<jmenent@2byte.es>
+ * Copyright (C) 2010-2014	Juanjo Menent			<jmenent@2byte.es>
  * Copyright (C) 2013       Christophe Battarel     <christophe.battarel@altairis.fr>
  * Copyright (C) 2013-2014  Florian Henry		  	<florian.henry@open-concept.pro>
  *
@@ -47,6 +47,7 @@ $langs->load("orders");
 $langs->load("companies");
 $langs->load("bills");
 $langs->load("products");
+$langs->load('compta');
 
 $action=GETPOST('action','alpha');
 $confirm=GETPOST('confirm','alpha');
@@ -205,6 +206,7 @@ if ($action == 'add' && $user->rights->contrat->creer)
     	$object->fk_project					= GETPOST('projectid','int');
     	$object->remise_percent				= GETPOST('remise_percent','alpha');
     	$object->ref						= GETPOST('ref','alpha');
+    	$object->ref_ext					= GETPOST('ref_ext','alpha');
 
 	    // If creation from another object of another module (Example: origin=propal, originid=1)
 	    if ($_POST['origin'] && $_POST['originid'])
@@ -711,6 +713,21 @@ else if ($action == 'confirm_move' && $confirm == 'yes' && $user->rights->contra
 		$action = 'edit_extras';
 		setEventMessage($object->error,'errors');
 	}
+} elseif ($action=='setref_ext') {
+	$result = $object->fetch($id);
+	if ($result < 0) {
+		setEventMessage($object->errors,'errors');
+	}
+	$object->ref_ext=GETPOST('ref_ext','alpha');
+	
+	$result = $object->update($user);
+	if ($result < 0) {
+		setEventMessage($object->errors,'errors');
+		$action='editref_ext';
+	} else {
+		header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
+		exit;
+	}
 }
 
 if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->contrat->creer)
@@ -858,6 +875,10 @@ if ($action == 'create')
 
     // Ref
 	print '<tr><td class="fieldrequired">'.$langs->trans('Ref').'</td><td colspan="2">'.$langs->trans("Draft").'</td></tr>';
+	
+	// Ref Int
+	print '<tr><td>'.$langs->trans('RefCustomer').'</td>';
+	print '<td colspan="2"><input type="text" siez="5" name="ref_ext" id="ref_ext" value="'.GETPOST('ref_ext','alpha').'"></td></tr>';
 
     // Customer
 	print '<tr>';
@@ -1046,6 +1067,14 @@ else
         print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', '');
         print "</td></tr>";
 
+        print '<tr>';
+		print '<td  width="20%">';
+		print $form->editfieldkey("RefCustomer",'ref_ext',$object->ref_ext,$object,$user->rights->contrat->creer);
+		print '</td><td>';
+		print $form->editfieldval("RefCustomer",'ref_ext',$object->ref_ext,$object,$user->rights->contrat->creer);
+		print '</td>';
+		print '</tr>';
+
         // Customer
         print "<tr><td>".$langs->trans("Customer")."</td>";
         print '<td colspan="3">'.$object->thirdparty->getNomUrl(1).'</td></tr>';
diff --git a/htdocs/contrat/liste.php b/htdocs/contrat/liste.php
index e1e49a5d7fd549f6be29561f1578e91ad509f3b9..16586b9dd4c2fb270dbdba2b4a4d929b1c4221de 100644
--- a/htdocs/contrat/liste.php
+++ b/htdocs/contrat/liste.php
@@ -3,6 +3,7 @@
  * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
  * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
+ * Copyright (C) 2014      Juanjo Menent        <jmenent@2byte.es>
  *
  * 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
@@ -30,6 +31,7 @@ require_once (DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php");
 $langs->load("contracts");
 $langs->load("products");
 $langs->load("companies");
+$langs->load("compta");
 
 $sortfield=GETPOST('sortfield','alpha');
 $sortorder=GETPOST('sortorder','alpha');
@@ -40,6 +42,7 @@ $offset = $limit * $page ;
 
 $search_nom=GETPOST('search_nom');
 $search_contract=GETPOST('search_contract');
+$search_ref_ext=GETPOST('search_ref_ext','alpha');
 $sall=GETPOST('sall');
 $statut=GETPOST('statut')?GETPOST('statut'):1;
 $socid=GETPOST('socid');
@@ -72,6 +75,7 @@ $sql.= ' SUM('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NOT NULL AND
 $sql.= ' SUM('.$db->ifsql("cd.statut=5",1,0).') as nb_closed,';
 $sql.= " c.rowid as cid, c.ref, c.datec, c.date_contrat, c.statut,";
 $sql.= " s.nom, s.rowid as socid";
+$sql.= " ,c.ref_ext";
 $sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
 if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
 $sql.= ", ".MAIN_DB_PREFIX."contrat as c";
@@ -86,6 +90,9 @@ if ($search_nom) {
 if ($search_contract) {
     $sql .= natural_search(array('c.rowid', 'c.ref'), $search_contract);
 }
+if (!empty($search_ref_ext)) {
+	$sql .= natural_search(array('c.ref_ext'), $search_ref_ext);
+}
 if ($sall) {
     $sql .= natural_search(array('s.nom', 'cd.label', 'cd.description'), $sall);
 }
@@ -107,7 +114,9 @@ if ($resql)
     print '<tr class="liste_titre">';
     $param='&amp;search_contract='.$search_contract;
     $param.='&amp;search_nom='.$search_nom;
+    $param.='&amp;search_ref_ext='.$search_ref_ext;
     print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "c.rowid","","$param",'',$sortfield,$sortorder);
+    print_liste_field_titre($langs->trans("RefCustomer"), $_SERVER["PHP_SELF"], "c.ref_ext","","$param",'',$sortfield,$sortorder);
     print_liste_field_titre($langs->trans("Company"), $_SERVER["PHP_SELF"], "s.nom","","$param",'',$sortfield,$sortorder);
     //print_liste_field_titre($langs->trans("DateCreation"), $_SERVER["PHP_SELF"], "c.datec","","$param",'align="center"',$sortfield,$sortorder);
     print_liste_field_titre($langs->trans("DateContract"), $_SERVER["PHP_SELF"], "c.date_contrat","","$param",'align="center"',$sortfield,$sortorder);
@@ -125,6 +134,9 @@ if ($resql)
     print '<input type="text" class="flat" size="3" name="search_contract" value="'.$search_contract.'">';
     print '</td>';
     print '<td class="liste_titre">';
+    print '<input type="text" class="flat" size="7" name="search_ref_ext" value="'.$search_ref_ext.'">';
+    print '</td>';
+    print '<td class="liste_titre">';
     print '<input type="text" class="flat" size="24" name="search_nom" value="'.$search_nom.'">';
     print '</td>';
     print '<td class="liste_titre">&nbsp;</td>';
@@ -144,6 +156,7 @@ if ($resql)
         print img_object($langs->trans("ShowContract"),"contract").' '.(isset($obj->ref) ? $obj->ref : $obj->cid) .'</a>';
         if ($obj->nb_late) print img_warning($langs->trans("Late"));
         print '</td>';
+        print '<td>'.$obj->ref_ext.'</td>';
         print '<td><a href="../comm/fiche.php?socid='.$obj->socid.'">'.img_object($langs->trans("ShowCompany"),"company").' '.$obj->nom.'</a></td>';
         //print '<td align="center">'.dol_print_date($obj->datec).'</td>';
         print '<td align="center">'.dol_print_date($db->jdate($obj->date_contrat)).'</td>';
diff --git a/htdocs/contrat/tpl/index.html b/htdocs/contrat/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/ajax/index.html b/htdocs/core/ajax/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/ajax/index.php b/htdocs/core/ajax/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/ajax/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/boxes/box_actions.php b/htdocs/core/boxes/box_actions.php
index 9dcfc76016a9e300c9f640aef6e71121e54f84be..ae138ae1422cebe3506fa319b3384e934f4ecdf2 100644
--- a/htdocs/core/boxes/box_actions.php
+++ b/htdocs/core/boxes/box_actions.php
@@ -2,6 +2,7 @@
 /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
+ * Copyright (C) 2014 	   Charles-Fr BENKE        <charles.fr@benke.fr>
  *
  * 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
@@ -151,7 +152,70 @@ class box_actions extends ModeleBoxes
 	 */
 	function showBox($head = null, $contents = null)
 	{
+		global $langs, $conf;
 		parent::showBox($this->info_box_head, $this->info_box_contents);
+				if ($conf->global->SHOW_DIALOG_HOMEPAGE)
+		{		
+			$actioncejour=false;
+			$contents=$this->info_box_contents;
+			$nblines=count($contents);
+			$bcx[0] = 'class="box_pair"';
+			$bcx[1] = 'class="box_impair"';
+			if ($contents[0][0]['text'] != $langs->trans("NoActionsToDo"))
+			{
+				print '<div id="dialog" title="'.$nblines." ".$langs->trans("ActionsToDo").'">';
+				print '<table width=100%>';
+				for ($i=0, $n=$nblines; $i < $n; $i++)
+				{
+					if (isset($contents[$i]))
+					{
+						// on affiche que les évènement du jours ou passé
+						// qui ne sont pas à 100% 
+						$actioncejour=true;
+						$var=!$var;
+						// TR
+						$logo=$contents[$i][0]['logo'];
+						$label=$contents[$i][1]['text'];
+						$urlevent=$contents[$i][1]['url'];
+						$logosoc=$contents[$i][2]['logo'];
+						$nomsoc=$contents[$i][3]['text'];
+						$urlsoc=$contents[$i][3]['url'];
+						$dateligne=$contents[$i][4]['text'];
+						$percentage=$contents[$i][5]['text'];
+						print '<tr '.$bcx[$var].'>';
+						print '<td align=center>';
+						print img_object("",$logo);
+						print '</td>';
+						print '<td align=center><a href="'.$urlevent.'">'.$label.'</a></td>';
+						print '<td align=center><a href="'.$urlsoc.'">'.img_object("",$logosoc)." ".$nomsoc.'</a></td>';
+						print '<td align=center>'.$dateligne.'</td>';
+						print '<td align=center>'.$percentage.'</td>';
+						print '</tr>';
+					}
+				}
+				print '</table>'; 
+	
+			}
+			print '</div>';
+			if ($actioncejour)
+			{
+				print '<script>';
+				print '$( "#dialog" ).dialog({ autoOpen: true });';
+				if ($conf->global->SHOW_DIALOG_HOMEPAGE > 1)
+				{
+					print 'setTimeout(function(){';
+					print '$("#dialog").dialog("close");';
+					print '}, '.($conf->global->SHOW_DIALOG_HOMEPAGE*1000).');';
+				}
+				print '</script>';
+			}
+			else
+			{
+				print '<script>';
+				print '$( "#dialog" ).dialog({ autoOpen: false });';
+				print '</script>';
+			}
+		}
 	}
 
 }
diff --git a/htdocs/core/boxes/index.html b/htdocs/core/boxes/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/boxes/index.php b/htdocs/core/boxes/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/boxes/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/class/index.html b/htdocs/core/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/class/index.php b/htdocs/core/class/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/class/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/class/link.class.php b/htdocs/core/class/link.class.php
index 4316d56f4fe8af3723ec17db78e43b6b81a3a213..0c7d52f9569a4c810a14ff977917fbd5ce63ddd4 100644
--- a/htdocs/core/class/link.class.php
+++ b/htdocs/core/class/link.class.php
@@ -99,15 +99,10 @@ class Link extends CommonObject
             $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "links");
 
             if ($this->id > 0) {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('LINK_CREATE', $this, $user, $langs, $conf);
-                if ($result < 0) {
-                    $error++;
-                    $this->errors = $interface->errors;
-                }
-                // Fin appel triggers
+                // Call trigger
+                $result=$this->call_trigger('LINK_CREATE',$user);
+                if ($result < 0) $error++;            
+                // End call triggers
             } else {
                 $error++;
             }
@@ -190,15 +185,10 @@ class Link extends CommonObject
         {
             if ($call_trigger)
             {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface = new Interfaces($this->db);
-                $result = $interface->run_triggers('LINK_MODIFY', $this, $user, $langs, $conf);
-                if ($result < 0) {
-                    $error++;
-                    $this->errors = $interface->errors;
-                }
-                // Fin appel triggers
+                // Call trigger
+                $result=$this->call_trigger('LINK_MODIFY',$user);
+                if ($result < 0) $error++;            
+                // End call triggers
             }
 
             if (! $error)
@@ -339,6 +329,11 @@ class Link extends CommonObject
         dol_syslog(get_class($this)."::delete", LOG_DEBUG);
         $error = 0;
 
+        // Call trigger
+        $result=$this->call_trigger('LINK_DELETE',$user);
+        if ($result < 0) return -1;            
+        // End call triggers         
+        
         $this->db->begin();
 
         // Remove link
@@ -353,18 +348,6 @@ class Link extends CommonObject
         }
 
 
-        if (! $error) {
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result = $interface->run_triggers('LINK_DELETE', $this, $user, $langs, $conf);
-            if ($result < 0) {
-                $error++;
-                $this->errors = $interface->errors;
-            }
-            // Fin appel triggers
-        }
-
         if (! $error) {
             $this->db->commit();
 
diff --git a/htdocs/core/db/index.html b/htdocs/core/db/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/db/index.php b/htdocs/core/db/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/db/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/filemanagerdol/browser/default/images/icons/32/index.html b/htdocs/core/filemanagerdol/browser/default/images/icons/32/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/browser/default/images/icons/index.html b/htdocs/core/filemanagerdol/browser/default/images/icons/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/browser/default/images/index.html b/htdocs/core/filemanagerdol/browser/default/images/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/browser/default/index.html b/htdocs/core/filemanagerdol/browser/default/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/browser/default/js/index.html b/htdocs/core/filemanagerdol/browser/default/js/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/browser/index.html b/htdocs/core/filemanagerdol/browser/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/connectors/index.html b/htdocs/core/filemanagerdol/connectors/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/connectors/php/index.html b/htdocs/core/filemanagerdol/connectors/php/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/index.html b/htdocs/core/filemanagerdol/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/filemanagerdol/index.php b/htdocs/core/filemanagerdol/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/filemanagerdol/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/index.html b/htdocs/core/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/index.php b/htdocs/core/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/js/index.html b/htdocs/core/js/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/js/index.php b/htdocs/core/js/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/js/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/lib/index.html b/htdocs/core/lib/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/lib/index.php b/htdocs/core/lib/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/lib/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/login/index.html b/htdocs/core/login/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/login/index.php b/htdocs/core/login/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/login/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/menus/index.html b/htdocs/core/menus/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/menus/index.php b/htdocs/core/menus/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/menus/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/menus/standard/index.html b/htdocs/core/menus/standard/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/menus/standard/index.php b/htdocs/core/menus/standard/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/menus/standard/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/modules/action/index.html b/htdocs/core/modules/action/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/barcode/doc/index.html b/htdocs/core/modules/barcode/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/barcode/index.html b/htdocs/core/modules/barcode/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/cheque/index.html b/htdocs/core/modules/cheque/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/cheque/pdf/index.html b/htdocs/core/modules/cheque/pdf/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/commande/doc/index.html b/htdocs/core/modules/commande/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/commande/index.html b/htdocs/core/modules/commande/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/contract/doc/index.html b/htdocs/core/modules/contract/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/contract/index.html b/htdocs/core/modules/contract/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/dons/index.html b/htdocs/core/modules/dons/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/expedition/doc/index.html b/htdocs/core/modules/expedition/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/expedition/index.html b/htdocs/core/modules/expedition/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/export/index.html b/htdocs/core/modules/export/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/facture/doc/index.html b/htdocs/core/modules/facture/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/facture/index.html b/htdocs/core/modules/facture/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/fichinter/doc/index.html b/htdocs/core/modules/fichinter/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/fichinter/index.html b/htdocs/core/modules/fichinter/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/import/index.html b/htdocs/core/modules/import/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/index.html b/htdocs/core/modules/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/index.php b/htdocs/core/modules/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/modules/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/modules/livraison/index.html b/htdocs/core/modules/livraison/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/livraison/pdf/index.html b/htdocs/core/modules/livraison/pdf/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/mailings/index.html b/htdocs/core/modules/mailings/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/member/doc/index.html b/htdocs/core/modules/member/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/member/index.html b/htdocs/core/modules/member/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php
index ee48e4d7ff7274a28c8fdf2849f2d39913b54b71..746046cb3dabe43f56f89a4539397f23577511bf 100644
--- a/htdocs/core/modules/modSociete.class.php
+++ b/htdocs/core/modules/modSociete.class.php
@@ -4,7 +4,7 @@
  * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
  * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
  * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
- * Copyright (C) 2012-2013 Juanjo Menent        <jmenent@2byte.es>
+ * Copyright (C) 2012-2014 Juanjo Menent        <jmenent@2byte.es>
  *
  * 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
@@ -382,7 +382,7 @@ class modSociete extends DolibarrModules
 		$this->import_icon[$r]='company';
 		$this->import_entities_array[$r]=array();		// We define here only fields that use another icon that the one defined into import_icon
 		$this->import_tables_array[$r]=array('s'=>MAIN_DB_PREFIX.'societe','extra'=>MAIN_DB_PREFIX.'societe_extrafields');	// List of tables to insert into (insert done in same order)
-		$this->import_fields_array[$r]=array('s.nom'=>"Name*",'s.status'=>"Status",'s.client'=>"Customer*",'s.fournisseur'=>"Supplier*",'s.code_client'=>"CustomerCode",'s.code_fournisseur'=>"SupplierCode",'s.code_compta'=>"CustomerAccountancyCode",'s.code_compta_fournisseur'=>"SupplierAccountancyCode",'s.address'=>"Address",'s.zip'=>"Zip",'s.town'=>"Town",'s.fk_departement'=>"StateId",'s.fk_pays'=>"CountryCode",'s.phone'=>"Phone",'s.fax'=>"Fax",'s.url'=>"Url",'s.email'=>"Email",'s.siret'=>"ProfId1",'s.siren'=>"ProfId2",'s.ape'=>"ProfId3",'s.idprof4'=>"ProfId4",'s.tva_intra'=>"VATIntraShort",'s.capital'=>"Capital",'s.note_private'=>"NotePrivate",'s.note_public'=>"NotePublic",'s.fk_typent'=>"ThirdPartyType",'s.fk_effectif'=>"Staff","s.fk_forme_juridique"=>"JuridicalStatus",'s.fk_prospectlevel'=>'ProspectLevel','s.fk_stcomm'=>'ProspectStatus','s.default_lang'=>'DefaultLanguage','s.barcode'=>'BarCode','s.datec'=>"DateCreation");
+		$this->import_fields_array[$r]=array('s.nom'=>"Name*",'s.status'=>"Status",'s.client'=>"Customer*",'s.fournisseur'=>"Supplier*",'s.code_client'=>"CustomerCode",'s.code_fournisseur'=>"SupplierCode",'s.code_compta'=>"CustomerAccountancyCode",'s.code_compta_fournisseur'=>"SupplierAccountancyCode",'s.address'=>"Address",'s.zip'=>"Zip",'s.town'=>"Town",'s.fk_departement'=>"StateId",'s.fk_pays'=>"CountryCode",'s.phone'=>"Phone",'s.fax'=>"Fax",'s.url'=>"Url",'s.email'=>"Email",'s.siren'=>"ProfId1",'s.siret'=>"ProfId2",'s.ape'=>"ProfId3",'s.idprof4'=>"ProfId4",'s.tva_intra'=>"VATIntraShort",'s.capital'=>"Capital",'s.note_private'=>"NotePrivate",'s.note_public'=>"NotePublic",'s.fk_typent'=>"ThirdPartyType",'s.fk_effectif'=>"Staff","s.fk_forme_juridique"=>"JuridicalStatus",'s.fk_prospectlevel'=>'ProspectLevel','s.fk_stcomm'=>'ProspectStatus','s.default_lang'=>'DefaultLanguage','s.barcode'=>'BarCode','s.datec'=>"DateCreation");
 		// Add extra fields
 		$sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'societe' AND entity = ".$conf->entity;
 		$resql=$this->db->query($sql);
diff --git a/htdocs/core/modules/printsheet/doc/index.html b/htdocs/core/modules/printsheet/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/printsheet/index.html b/htdocs/core/modules/printsheet/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/product/index.html b/htdocs/core/modules/product/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/project/index.html b/htdocs/core/modules/project/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/project/pdf/index.html b/htdocs/core/modules/project/pdf/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/project/task/index.html b/htdocs/core/modules/project/task/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/project/task/pdf/index.html b/htdocs/core/modules/project/task/pdf/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/propale/doc/index.html b/htdocs/core/modules/propale/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/propale/index.html b/htdocs/core/modules/propale/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/rapport/index.html b/htdocs/core/modules/rapport/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/security/generate/index.html b/htdocs/core/modules/security/generate/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/security/index.html b/htdocs/core/modules/security/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/societe/doc/index.html b/htdocs/core/modules/societe/doc/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/societe/index.html b/htdocs/core/modules/societe/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/supplier_invoice/index.html b/htdocs/core/modules/supplier_invoice/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/supplier_invoice/pdf/index.html b/htdocs/core/modules/supplier_invoice/pdf/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/supplier_order/index.html b/htdocs/core/modules/supplier_order/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/supplier_order/pdf/index.html b/htdocs/core/modules/supplier_order/pdf/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/modules/syslog/index.html b/htdocs/core/modules/syslog/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/tpl/ajax/index.html b/htdocs/core/tpl/ajax/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/tpl/index.html b/htdocs/core/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/tpl/index.php b/htdocs/core/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/triggers/index.html b/htdocs/core/triggers/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/core/triggers/index.php b/htdocs/core/triggers/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/core/triggers/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN
index 8bc4e42ed3fbe78af1b8c11b144275c1a770b4a9..4b9d923de03a72198c3472957caca3ce6004177d 100644
--- a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN
+++ b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN
@@ -417,6 +417,10 @@ class InterfaceDemo
         {
             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
         }
+        elseif ($action == 'LINECONTRACT_CREATE')
+        {
+            dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
+        }
         elseif ($action == 'LINECONTRACT_UPDATE')
         {
             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
@@ -484,6 +488,10 @@ class InterfaceDemo
 		elseif ($action == 'BILL_SUPPLIER_CREATE')
         {
              dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
+        }
+		elseif ($action == 'BILL_SUPPLIER_UPDATE')
+        {
+             dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
         }
 		elseif ($action == 'BILL_SUPPLIER_DELETE')
         {
diff --git a/htdocs/cron/admin/index.html b/htdocs/cron/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cron/class/index.html b/htdocs/cron/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/cron/index.html b/htdocs/cron/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/ecm/ajax/index.html b/htdocs/ecm/ajax/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/ecm/class/index.html b/htdocs/ecm/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/ecm/tpl/index.html b/htdocs/ecm/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/expedition/class/index.html b/htdocs/expedition/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/expedition/tpl/index.html b/htdocs/expedition/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/exports/class/index.html b/htdocs/exports/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/externalsite/admin/index.html b/htdocs/externalsite/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/externalsite/index.html b/htdocs/externalsite/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/externalsite/index.php b/htdocs/externalsite/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/externalsite/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/fichinter/admin/index.html b/htdocs/fichinter/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fichinter/class/index.html b/htdocs/fichinter/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fichinter/index.html b/htdocs/fichinter/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fichinter/index.php b/htdocs/fichinter/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/fichinter/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/fichinter/tpl/index.html b/htdocs/fichinter/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fourn/ajax/index.html b/htdocs/fourn/ajax/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
index 19432c09b78e038f64e86abc84b0bb36ee835e51..147cf2c39e2ed480b028ca1ff7955538dae8ee24 100644
--- a/htdocs/fourn/class/fournisseur.commande.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.class.php
@@ -388,18 +388,14 @@ class CommandeFournisseur extends CommonOrder
 
             if (! $error)
             {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('ORDER_SUPPLIER_VALIDATE',$this,$user,$langs,$conf);
-                if ($result < 0)
+				// Call trigger
+				$result=$this->call_trigger('ORDER_SUPPLIER_VALIDATE',$user);
+				if ($result < 0)
                 {
-                    $error++;
-                    $this->errors=$interface->errors;
                     $this->db->rollback();
                     return -1;
                 }
-                // Fin appel triggers
+				// End call triggers
             }
 
             if (! $error)
@@ -653,12 +649,10 @@ class CommandeFournisseur extends CommonOrder
 
                 if (! $error)
                 {
-                    // Appel des triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('ORDER_SUPPLIER_APPROVE',$this,$user,$langs,$conf);
-                    if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                    // Fin appel triggers
+					// Call trigger
+					$result=$this->call_trigger('ORDER_SUPPLIER_APPROVE',$user);
+					if ($result < 0) $error++;            
+					// End call triggers
                 }
 
                 if (! $error)
@@ -714,17 +708,16 @@ class CommandeFournisseur extends CommonOrder
 
                 if ($error == 0)
                 {
-                    // Appel des triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('ORDER_SUPPLIER_REFUSE',$this,$user,$langs,$conf);
-                    if ($result < 0)
+					// Call trigger
+					$result=$this->call_trigger('ORDER_SUPPLIER_REFUSE',$user);
+					if ($result < 0)
                     {
                         $error++;
-                        $this->errors=$interface->errors;
                         $this->db->rollback();
                     }
-                    // Fin appel triggers
+                    else 
+                    	$this->db->commit();
+					// End call triggers
                 }
             }
             else
@@ -772,12 +765,10 @@ class CommandeFournisseur extends CommonOrder
                 $result = 0;
                 $this->log($user, $statut, time());
 
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('ORDER_SUPPLIER_CANCEL',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                // Fin appel triggers
+				// Call trigger
+				$result=$this->call_trigger('ORDER_SUPPLIER_CANCEL',$user);
+				if ($result < 0) $error++;            
+				// End call triggers
 
                 if ($error == 0)
                 {
@@ -967,18 +958,14 @@ class CommandeFournisseur extends CommonOrder
 
 					if (! $notrigger)
 	                {
-	                    // Appel des triggers
-	                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-	                    $interface=new Interfaces($this->db);
-	                    $result=$interface->run_triggers('ORDER_SUPPLIER_CREATE',$this,$user,$langs,$conf);
-	                    if ($result < 0)
+						// Call trigger
+						$result=$this->call_trigger('ORDER_SUPPLIER_CREATE',$user);
+						if ($result < 0)            
 	                    {
-	                        $error++;
-	                        $this->errors=$interface->errors;
 	                        $this->db->rollback();
 	                        return -1;
 	                    }
-	                    // Fin appel triggers
+						// End call triggers
 	                }
 
 	                $this->db->commit();
@@ -1041,12 +1028,10 @@ class CommandeFournisseur extends CommonOrder
                 if ($reshook < 0) $error++;
             }
 
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('ORDER_SUPPLIER_CLONE',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+			// Call trigger
+			$result=$this->call_trigger('ORDER_SUPPLIER_CLONE',$user);
+			if ($result < 0) $error++;            
+			// End call triggers
         }
 
         // End
@@ -1222,18 +1207,14 @@ class CommandeFournisseur extends CommonOrder
                 if (! $notrigger)
                 {
                     global $conf, $langs, $user;
-                    // Appel des triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('LINEORDER_SUPPLIER_CREATE',$this,$user,$langs,$conf);
-                    if ($result < 0)
+					// Call trigger
+					$result=$this->call_trigger('LINEORDER_SUPPLIER_CREATE',$user);
+					if ($result < 0)        
                     {
-                        $error++;
-                        $this->errors=$interface->errors;
                         $this->db->rollback();
                         return -1;
                     }
-                    // Fin appel triggers
+					// End call triggers
                 }
 
                 $this->update_price('','auto');
@@ -1295,18 +1276,14 @@ class CommandeFournisseur extends CommonOrder
                 if (! $notrigger)
                 {
                     global $conf, $langs, $user;
-                    // Appel des triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('LINEORDER_SUPPLIER_DISPATCH',$this,$user,$langs,$conf);
-                    if ($result < 0)
+					// Call trigger
+					$result=$this->call_trigger('LINEORDER_SUPPLIER_DISPATCH',$user);
+					if ($result < 0)        
                     {
-                        $error++;
-                        $this->errors=$interface->errors;
                         $this->db->rollback();
                         return -1;
                     }
-                    // Fin appel triggers
+					// End call triggers
                 }
 
                 $this->db->commit();
@@ -1369,15 +1346,10 @@ class CommandeFournisseur extends CommonOrder
 
 			if (! $notrigger)
 			{
-				// Appel des triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$result = 0;
-				$interface=new Interfaces($this->db);
-				$result = $interface->run_triggers('LINEORDER_SUPPLIER_DELETE',$this,$user,$langs,$conf);
-				if ($result < 0) {
-					$error++; $this->errors=$interface->errors;
-				}
-				// Fin appel triggers
+				// Call trigger
+				$result=$this->call_trigger('LINEORDER_SUPPLIER_DELETE',$user);
+				if ($result < 0) $error++;            
+				// End call triggers
 			}
 
 			if (! $error)
@@ -1424,6 +1396,16 @@ class CommandeFournisseur extends CommonOrder
         require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
 
         $error = 0;
+        
+        // Call trigger
+        $result=$this->call_trigger('ORDER_SUPPLIER_DELETE',$user);
+        if ($result < 0)
+        {
+        	dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR);
+        	return -1;
+        }
+        // End call triggers
+        
 
         $this->db->begin();
 
@@ -1461,18 +1443,6 @@ class CommandeFournisseur extends CommonOrder
         	}
         }
 
-        if (! $error)
-        {
-        	// Appel des triggers
-        	include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-        	$interface=new Interfaces($this->db);
-        	$result=$interface->run_triggers('ORDER_SUPPLIER_DELETE',$this,$user,$langs,$conf);
-        	if ($result < 0) {
-        		$error++; $this->errors=$interface->errors;
-        	}
-        	// Fin appel triggers
-        }
-
         if (! $error)
         {
         	// We remove directory
@@ -1828,18 +1798,14 @@ class CommandeFournisseur extends CommonOrder
                 if (! $notrigger)
                 {
                     global $conf, $langs, $user;
-                    // Appel des triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('LINEORDER_SUPPLIER_UPDATE',$this,$user,$langs,$conf);
-                    if ($result < 0)
+					// Call trigger
+					$result=$this->call_trigger('LINEORDER_SUPPLIER_UPDATE',$user);
+					if ($result < 0)        
                     {
-                        $error++;
-                        $this->errors=$interface->errors;
                         $this->db->rollback();
                         return -1;
                     }
-                    // Fin appel triggers
+					// End call triggers
                 }
 
                 // Mise a jour info denormalisees au niveau facture
diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php
index b01e3ee789166c728e4de12cb20a92f5d5d31ef4..4ceea058b4f64c62f2a997f69310be28cae564db 100644
--- a/htdocs/fourn/class/fournisseur.facture.class.php
+++ b/htdocs/fourn/class/fournisseur.facture.class.php
@@ -254,12 +254,10 @@ class FactureFournisseur extends CommonInvoice
             $result=$this->update_price();
             if ($result > 0)
             {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('BILL_SUPPLIER_CREATE',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                // Fin appel triggers
+                // Call trigger
+                $result=$this->call_trigger('BILL_SUPPLIER_CREATE',$user);
+                if ($result < 0) $error++;            
+                // End call triggers
 
                 if (! $error)
                 {
@@ -601,11 +599,9 @@ class FactureFournisseur extends CommonInvoice
         {
             if (! $notrigger)
             {
-                // Call triggers
-                //include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                //$interface=new Interfaces($this->db);
-                //$result=$interface->run_triggers('BILL_SUPPLIER_MODIFY',$this,$user,$langs,$conf);
-                //if ($result < 0) { $error++; $this->errors=$interface->errors; }
+                // Call trigger
+                $result=$this->call_trigger('BILL_SUPPLIER_UPDATE',$user);
+                if ($result < 0) $error++;            
                 // End call triggers
             }
         }
@@ -673,13 +669,10 @@ class FactureFournisseur extends CommonInvoice
 
         if (! $error)
         {
-        	// Appel des triggers
-        	include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-        	$interface=new Interfaces($this->db);
-        	$result=$interface->run_triggers('BILL_SUPPLIER_DELETE',$this,$user,$langs,$conf);
-        	if ($result < 0) {
-        		$error++;
-        		$this->errors=$interface->errors;
+            // Call trigger
+            $result=$this->call_trigger('BILL_SUPPLIER_DELETE',$user);
+            if ($result < 0)
+            { 
         		$this->db->rollback();
         	    return -1;      		
         	}
@@ -771,12 +764,10 @@ class FactureFournisseur extends CommonInvoice
         $resql = $this->db->query($sql);
         if ($resql)
         {
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('BILL_SUPPLIER_PAYED',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('BILL_SUPPLIER_PAYED',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
         }
         else
         {
@@ -821,12 +812,10 @@ class FactureFournisseur extends CommonInvoice
         $resql = $this->db->query($sql);
         if ($resql)
         {
-            // Appel des triggers
-            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-            $interface=new Interfaces($this->db);
-            $result=$interface->run_triggers('BILL_SUPPLIER_UNPAYED',$this,$user,$langs,$conf);
-            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-            // Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('BILL_SUPPLIER_UNPAYED',$user);
+            if ($result < 0) $error++;            
+            // End call triggers
         }
         else
         {
@@ -962,12 +951,10 @@ class FactureFournisseur extends CommonInvoice
             // Triggers call
             if (! $error)
             {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('BILL_SUPPLIER_VALIDATE',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                // Fin appel triggers
+                // Call trigger
+                $result=$this->call_trigger('BILL_SUPPLIER_VALIDATE',$user);
+                if ($result < 0) $error++;            
+                // End call triggers
             }
 
             if (! $error)
@@ -1129,18 +1116,14 @@ class FactureFournisseur extends CommonInvoice
                 if (! $notrigger)
                 {
                     global $conf, $langs, $user;
-                    // Appel des triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('LINEBILL_SUPPLIER_CREATE',$this,$user,$langs,$conf);
-                    if ($result < 0) 
+                    // Call trigger
+                    $result=$this->call_trigger('LINEBILL_SUPPLIER_CREATE',$user);
+                    if ($result < 0)            
                     { 
-                        $error++;
-                        $this->errors=$interface->errors;
                         $this->db->rollback();
                         return -1;
                     }
-                    // Fin appel triggers
+                    // End call triggers
                 }
 
                 $this->db->commit();
@@ -1263,18 +1246,14 @@ class FactureFournisseur extends CommonInvoice
             if (! $notrigger)
             {
                 global $conf, $langs, $user;
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('LINEBILL_SUPPLIER_UPDATE',$this,$user,$langs,$conf);
-                if ($result < 0) 
-                {
-                    $error++;
-                    $this->errors=$interface->errors;
+                // Call trigger
+                $result=$this->call_trigger('LINEBILL_SUPPLIER_UPDATE',$user);
+                if ($result < 0)            
+                { 
                     $this->db->rollback();
                     return -1;
                 }
-                // Fin appel triggers
+                // End call triggers
             }
 
             // Update total price into invoice record
@@ -1312,14 +1291,10 @@ class FactureFournisseur extends CommonInvoice
 
 		if (! $error && ! $notrigger)
         {
-	    	// Appel des triggers
-	    	include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
-	    	$interface=new Interfaces($this->db);
-	    	$result=$interface->run_triggers('LINEBILL_SUPPLIER_DELETE',$this,$user,$langs,$conf);
-	    	if ($result < 0) {
-	    		$error++; $this->errors=$interface->errors;
-	    	}
-        	// Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('LINEBILL_SUPPLIER_DELETE',$user);
+            if ($result < 0) $error++;           
+            // End call triggers
         }
 
     	if (! $error)
diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php
index a384f6ea21913ec84f2613c489fbc8fb0f65e458..b9cd7f4016349d58da8d4eeddc0899b92a08aceb 100644
--- a/htdocs/fourn/class/fournisseur.product.class.php
+++ b/htdocs/fourn/class/fournisseur.product.class.php
@@ -203,14 +203,10 @@ class ProductFournisseur extends Product
 			$resql = $this->db->query($sql);
 			if ($resql)
 			{
-				// Appel des triggers
-				include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('SUPPLIER_PRODUCT_BUYPRICE_UPDATE',$this,$user,$langs,$conf);
-				if ($result < 0)
-				{
-					$error++; $this->error=$interface->errors;
-				}
+                // Call trigger
+                $result=$this->call_trigger('SUPPLIER_PRODUCT_BUYPRICE_UPDATE',$user);
+                if ($result < 0) $error++;          
+                // End call triggers
 
 				if (empty($error))
 				{
@@ -289,14 +285,10 @@ class ProductFournisseur extends Product
 
 		            if (! $error)
 		            {
-        				// Appel des triggers
-        				include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
-        				$interface=new Interfaces($this->db);
-        				$result=$interface->run_triggers('SUPPLIER_PRODUCT_BUYPRICE_CREATE',$this,$user,$langs,$conf);
-        				if ($result < 0)
-        				{
-        					$error++; $this->error=$interface->errors;
-        				}
+                        // Call trigger
+                        $result=$this->call_trigger('SUPPLIER_PRODUCT_BUYPRICE_CREATE',$user);
+                        if ($result < 0) $error++;          
+                        // End call triggers
 
         				if (empty($error))
         				{
diff --git a/htdocs/fourn/class/index.html b/htdocs/fourn/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php
index 6fff76e2ca0efc99225de7d7ba0e46e6681bf1e5..02010d1e2e883d66b217a64765f7f9be9bf33b38 100644
--- a/htdocs/fourn/class/paiementfourn.class.php
+++ b/htdocs/fourn/class/paiementfourn.class.php
@@ -201,12 +201,10 @@ class PaiementFourn extends Paiement
 
 				if (! $error)
 				{
-		            // Appel des triggers
-		            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-		            $interface=new Interfaces($this->db);
-		            $result=$interface->run_triggers('PAYMENT_SUPPLIER_CREATE',$this,$user,$langs,$conf);
-					if ($result < 0) { $error++; $this->errors=$interface->errors; }
-		            // Fin appel triggers
+                    // Call trigger
+                    $result=$this->call_trigger('PAYMENT_SUPPLIER_CREATE',$user);
+                    if ($result < 0) $error++;          
+                    // End call triggers
 				}
 			}
 			else
diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php
index 02666e1c855c906b4ead1274c3e489623de83f1b..bea467340e65747a047a65056ddbec9dc70a9a0d 100644
--- a/htdocs/fourn/commande/dispatch.php
+++ b/htdocs/fourn/commande/dispatch.php
@@ -120,12 +120,9 @@ if ($_POST["action"] ==	'dispatch' && $user->rights->fournisseur->commande->rece
 	if (! $notrigger)
 	{
 		global $conf, $langs, $user;
-		// Appel des triggers
-		include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-		$interface=new Interfaces($db);
-		$result_trigger=$interface->run_triggers('ORDER_SUPPLIER_DISPATCH',$commande,$user,$langs,$conf);
-		if ($result_trigger < 0) { $error++; $commande->errors=$interface->errors; }
-		// Fin appel triggers
+        // Call trigger
+        $result=$commande->call_trigger('ORDER_SUPPLIER_DISPATCH',$user);
+        // End call triggers
 	}
 
 	if ($result > 0)
diff --git a/htdocs/fourn/commande/tpl/index.html b/htdocs/fourn/commande/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fourn/facture/index.html b/htdocs/fourn/facture/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fourn/facture/index.php b/htdocs/fourn/facture/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/fourn/facture/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/fourn/facture/tpl/index.html b/htdocs/fourn/facture/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fourn/paiement/index.html b/htdocs/fourn/paiement/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/fourn/paiement/index.php b/htdocs/fourn/paiement/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/fourn/paiement/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/ftp/admin/index.html b/htdocs/ftp/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/holiday/admin/index.html b/htdocs/holiday/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/holiday/class/index.html b/htdocs/holiday/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/holiday/img/index.html b/htdocs/holiday/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/imports/class/import.class.php b/htdocs/imports/class/import.class.php
index e4acc733a85fe91c76feb2b401654f5d0b8de67c..58a1bf3e9315dbd7259803e2eaeddc9d6ca7d521 100644
--- a/htdocs/imports/class/import.class.php
+++ b/htdocs/imports/class/import.class.php
@@ -313,12 +313,10 @@ class Import
 		{
 			if (! $notrigger)
 			{
-				// Call triggers
-				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-				$interface=new Interfaces($this->db);
-				$result=$interface->run_triggers('IMPORT_DELETE',$this,$user,$langs,$conf);
-				if ($result < 0) { $error++; $this->errors=$interface->errors; }
-				// End call triggers
+                // Call trigger
+                $result=$this->call_trigger('IMPORT_DELETE',$user);
+                if ($result < 0) $error++;          
+                // End call triggers
 			}
 		}
 
diff --git a/htdocs/imports/class/index.html b/htdocs/imports/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/includes/adodbtime/index.html b/htdocs/includes/adodbtime/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/includes/adodbtime/index.php b/htdocs/includes/adodbtime/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/includes/adodbtime/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/includes/index.html b/htdocs/includes/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/includes/index.php b/htdocs/includes/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/includes/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/install/doctemplates/index.html b/htdocs/install/doctemplates/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/doctemplates/invoices/index.html b/htdocs/install/doctemplates/invoices/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/doctemplates/orders/index.html b/htdocs/install/doctemplates/orders/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/doctemplates/projects/index.html b/htdocs/install/doctemplates/projects/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/doctemplates/proposals/index.html b/htdocs/install/doctemplates/proposals/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/doctemplates/shipment/index.html b/htdocs/install/doctemplates/shipment/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/doctemplates/tasks/index.html b/htdocs/install/doctemplates/tasks/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/doctemplates/thirdparties/index.html b/htdocs/install/doctemplates/thirdparties/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/lib/index.html b/htdocs/install/lib/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/mssql/functions/index.html b/htdocs/install/mssql/functions/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/mssql/index.html b/htdocs/install/mssql/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/mysql/data/index.html b/htdocs/install/mysql/data/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/mysql/functions/index.html b/htdocs/install/mysql/functions/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/mysql/index.html b/htdocs/install/mysql/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql
index a65ef4132695a6305811a3db2609f8cf3a0d447c..7796813b7320dc16aef60bd3f12fac604c56c443 100644
--- a/htdocs/install/mysql/migration/3.6.0-3.7.0.sql
+++ b/htdocs/install/mysql/migration/3.6.0-3.7.0.sql
@@ -23,13 +23,13 @@ ALTER TABLE llx_c_paiement ADD COLUMN accountancy_code varchar(32) DEFAULT NULL
 
 -- Defined only to have specific list for countries that can't use generic list (like argentina that need type A or B)
 ALTER TABLE llx_c_typent ADD COLUMN fk_country integer NULL AFTER libelle;
-  
+
 INSERT INTO llx_c_action_trigger (rowid,code,label,description,elementtype,rang) values (29,'FICHINTER_CLASSIFY_BILLED','Classify intervention as billed','Executed when a intervention is classified as billed (when option FICHINTER_DISABLE_DETAILS is set)','ficheinter',19);
 
 INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) values (11,'AC_INT','system','Intervention on site',NULL, 1, 4);
 
 
-  
+
 ALTER TABLE llx_accountingaccount add column entity integer DEFAULT 1 NOT NULL AFTER rowid;
 ALTER TABLE llx_accountingaccount add column datec datetime NOT NULL AFTER entity;
 ALTER TABLE llx_accountingaccount add column tms timestamp AFTER datec;
@@ -120,3 +120,4 @@ create table llx_accounting_fiscalyear
 	fk_user_modif	integer NULL
 )ENGINE=innodb;
 
+ALTER TABLE llx_contrat ADD COLUMN ref_ext varchar(30) after ref;
diff --git a/htdocs/install/mysql/migration/index.html b/htdocs/install/mysql/migration/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/mysql/tables/index.html b/htdocs/install/mysql/tables/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/mysql/tables/llx_contrat.sql b/htdocs/install/mysql/tables/llx_contrat.sql
index 7521eb0aa1b3821b04efbacd07e94cc8116021bb..9cef8fddb42bc6adb011e545bdc41b545c28e16d 100644
--- a/htdocs/install/mysql/tables/llx_contrat.sql
+++ b/htdocs/install/mysql/tables/llx_contrat.sql
@@ -20,11 +20,12 @@
 
 create table llx_contrat
 (
-  rowid						integer AUTO_INCREMENT PRIMARY KEY,  
-  ref						varchar(30),		            -- reference de contrat
+  rowid						integer AUTO_INCREMENT PRIMARY KEY,
+  ref						varchar(30),		            -- contrat reference
+  ref_ext					varchar(30),		            -- external contract ref
   entity					integer DEFAULT 1 NOT NULL,	-- multi company id
   tms						timestamp,
-  datec						datetime,                   -- date de creation de l enregistrement
+  datec						datetime,                   -- creation date
   date_contrat				datetime,
   statut					smallint DEFAULT 0,
   mise_en_service			datetime,
@@ -40,7 +41,7 @@ create table llx_contrat
   note_private				text,
   note_public				text,
   import_key				varchar(14),
-  extraparams				varchar(255)					-- for stock other parameters with json format
-  
+  extraparams				varchar(255)
+
 )ENGINE=innodb;
 
diff --git a/htdocs/install/pgsql/functions/index.html b/htdocs/install/pgsql/functions/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/install/pgsql/index.html b/htdocs/install/pgsql/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/livraison/class/index.html b/htdocs/livraison/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/livraison/index.html b/htdocs/livraison/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/livraison/index.php b/htdocs/livraison/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/livraison/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/mailmanspip/class/index.html b/htdocs/mailmanspip/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/mailmanspip/index.html b/htdocs/mailmanspip/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/margin/admin/index.html b/htdocs/margin/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/margin/lib/index.html b/htdocs/margin/lib/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/margin/productMargins.php b/htdocs/margin/productMargins.php
index 3a53c9570f26b1db0ba98aec176332227085b5d0..a8830f777ecfe3f542ece906ea524629a75c0bb0 100644
--- a/htdocs/margin/productMargins.php
+++ b/htdocs/margin/productMargins.php
@@ -259,13 +259,15 @@ if ($result)
 				print dol_print_date($db->jdate($objp->datef),'day')."</td>";
 			}
 			else {
+				print '<td>';
 				$product_static->type=$objp->fk_product_type;
-				$product_static->id=$objp->fk_product;
+				$product_static->id=$objp->rowid;
 				$product_static->ref=$objp->ref;
 				$product_static->libelle=$objp->label;
 				$text=$product_static->getNomUrl(1);
-				$text.= ' - '.$objp->label;
-				print "<td>".$product_static->getNomUrl(1)."</td>\n";
+				print $text.= ' - '.$objp->label;
+				print "</td>\n";
+				//print "<td>".$product_static->getNomUrl(1)."</td>\n";
 			}
 			print "<td align=\"right\">".price($pv, null, null, null, null, $rounding)."</td>\n";
 			print "<td align=\"right\">".price($pa, null, null, null, null, $rounding)."</td>\n";
diff --git a/htdocs/margin/tabs/index.html b/htdocs/margin/tabs/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/opensurvey/class/index.html b/htdocs/opensurvey/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/opensurvey/class/opensurveysondage.class.php b/htdocs/opensurvey/class/opensurveysondage.class.php
index 8f3f3fccff89742276abca72b2337574847a146d..58351527e6e41929fdacc9dfb063cd3dd2ef1074 100644
--- a/htdocs/opensurvey/class/opensurveysondage.class.php
+++ b/htdocs/opensurvey/class/opensurveysondage.class.php
@@ -142,12 +142,10 @@ class Opensurveysondage extends CommonObject
 			{
 				global $langs, $conf;
 
-	            //// Call triggers
-	            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-	            $interface=new Interfaces($this->db);
-	            $result=$interface->run_triggers('OPENSURVEY_CREATE',$this,$user,$langs,$conf);
-	            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-	            //// End call triggers
+                // Call trigger
+                $result=$this->call_trigger('OPENSURVEY_CREATE',$user);
+                if ($result < 0) $error++;          
+                // End call triggers
 			}
         }
 
@@ -338,12 +336,10 @@ class Opensurveysondage extends CommonObject
 		{
 			if (! $notrigger)
 			{
-		        //// Call triggers
-		        include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-		        $interface=new Interfaces($this->db);
-		        $result=$interface->run_triggers('OPENSURVEY_DELETE',$this,$user,$langs,$conf);
-		        if ($result < 0) { $error++; $this->errors=$interface->errors; }
-		        //// End call triggers
+                // Call trigger
+                $result=$this->call_trigger('OPENSURVEY_DELETE',$user);
+                if ($result < 0) $error++;          
+                // End call triggers
 			}
 		}
 
diff --git a/htdocs/opensurvey/css/index.html b/htdocs/opensurvey/css/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/opensurvey/img/index.html b/htdocs/opensurvey/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/opensurvey/public/index.html b/htdocs/opensurvey/public/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/paybox/admin/index.html b/htdocs/paybox/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/paybox/img/index.html b/htdocs/paybox/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/paybox/index.html b/htdocs/paybox/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/paybox/index.php b/htdocs/paybox/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/paybox/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/paybox/lib/index.html b/htdocs/paybox/lib/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/paypal/admin/index.html b/htdocs/paypal/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/paypal/img/index.html b/htdocs/paypal/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/paypal/index.html b/htdocs/paypal/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/paypal/index.php b/htdocs/paypal/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/paypal/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/paypal/lib/index.html b/htdocs/paypal/lib/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/printipp/admin/index.html b/htdocs/printipp/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/printipp/lib/index.html b/htdocs/printipp/lib/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/admin/index.html b/htdocs/product/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/ajax/index.html b/htdocs/product/ajax/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/canvas/index.html b/htdocs/product/canvas/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/canvas/index.php b/htdocs/product/canvas/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/product/canvas/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/product/canvas/product/index.html b/htdocs/product/canvas/product/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/canvas/product/index.php b/htdocs/product/canvas/product/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/product/canvas/product/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/product/canvas/product/tpl/index.html b/htdocs/product/canvas/product/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/canvas/product/tpl/index.php b/htdocs/product/canvas/product/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/product/canvas/product/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/product/canvas/service/index.html b/htdocs/product/canvas/service/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/canvas/service/index.php b/htdocs/product/canvas/service/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/product/canvas/service/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/product/canvas/service/tpl/index.html b/htdocs/product/canvas/service/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/canvas/service/tpl/index.php b/htdocs/product/canvas/service/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/product/canvas/service/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/product/class/index.html b/htdocs/product/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/composition/index.html b/htdocs/product/composition/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/composition/index.php b/htdocs/product/composition/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/product/composition/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/product/stats/index.html b/htdocs/product/stats/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/stats/index.php b/htdocs/product/stats/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/product/stats/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/product/stock/class/index.html b/htdocs/product/stock/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php
index 747a737f389c27bdb4ee6500e0a6744718b5a266..8219da2b81469059da00af0ee63b3f24fff3aa71 100644
--- a/htdocs/product/stock/class/mouvementstock.class.php
+++ b/htdocs/product/stock/class/mouvementstock.class.php
@@ -245,17 +245,17 @@ class MouvementStock
 
 		if ($movestock && ! $error)
 		{
-			// Appel des triggers
-			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-			$interface=new Interfaces($this->db);
 
 			$this->product_id = $fk_product;
 			$this->entrepot_id = $entrepot_id;
 			$this->qty = $qty;
 
-			$result=$interface->run_triggers('STOCK_MOVEMENT',$this,$user,$langs,$conf);
-			if ($result < 0) { $error++; $this->errors=$interface->errors; }
-			// Fin appel triggers
+            // Call trigger
+            $result=$this->call_trigger('STOCK_MOVEMENT',$user);
+            if ($result < 0) $error++;          
+            // End call triggers
+            
+            //FIXME: Restore previous value of product_id,  entrepot_id, qty if trigger fail
 		}
 
 		if (! $error)
diff --git a/htdocs/product/stock/fiche.php b/htdocs/product/stock/fiche.php
index ecc29a559279eca22b96c4abdd1e85eb7a3a27eb..874b082ceae8c7e6acec236e20db10648c087616 100644
--- a/htdocs/product/stock/fiche.php
+++ b/htdocs/product/stock/fiche.php
@@ -39,6 +39,7 @@ $action=GETPOST('action');
 
 $sortfield = GETPOST("sortfield",'alpha');
 $sortorder = GETPOST("sortorder",'alpha');
+$id = GETPOST("id",'int');
 if (! $sortfield) $sortfield="p.ref";
 if (! $sortorder) $sortorder="DESC";
 
@@ -109,7 +110,7 @@ if ($action == 'confirm_delete' && $_REQUEST["confirm"] == 'yes' && $user->right
 if ($action == 'update' && $_POST["cancel"] <> $langs->trans("Cancel"))
 {
 	$object = new Entrepot($db);
-	if ($object->fetch($_POST["id"]))
+	if ($object->fetch($id))
 	{
 		$object->libelle     = $_POST["libelle"];
 		$object->description = $_POST["desc"];
@@ -120,23 +121,20 @@ if ($action == 'update' && $_POST["cancel"] <> $langs->trans("Cancel"))
 		$object->town        = $_POST["town"];
 		$object->country_id  = $_POST["country_id"];
 
-		if ( $object->update($_POST["id"], $user) > 0)
+		if ( $object->update($id, $user) > 0)
 		{
 			$action = '';
-			$_GET["id"] = $_POST["id"];
 			//$mesg = '<div class="ok">Fiche mise a jour</div>';
 		}
 		else
 		{
 			$action = 'edit';
-			$_GET["id"] = $_POST["id"];
 			$mesg = '<div class="error">'.$object->error.'</div>';
 		}
 	}
 	else
 	{
 		$action = 'edit';
-		$_GET["id"] = $_POST["id"];
 		$mesg = '<div class="error">'.$object->error.'</div>';
 	}
 }
@@ -144,7 +142,6 @@ if ($action == 'update' && $_POST["cancel"] <> $langs->trans("Cancel"))
 if ($_POST["cancel"] == $langs->trans("Cancel"))
 {
 	$action = '';
-	$_GET["id"] = $_POST["id"];
 }
 
 
@@ -219,12 +216,13 @@ if ($action == 'create')
 }
 else
 {
-	if ($_GET["id"])
+    $id=GETPOST("id",'int');
+	if ($id)
 	{
 		dol_htmloutput_mesg($mesg);
 
 		$object = new Entrepot($db);
-		$result = $object->fetch($_GET["id"]);
+		$result = $object->fetch($id);
 		if ($result < 0)
 		{
 			dol_print_error($db);
@@ -368,13 +366,13 @@ else
 
 			print '<table class="noborder" width="100%">';
 			print "<tr class=\"liste_titre\">";
-			print_liste_field_titre($langs->trans("Product"),"", "p.ref","&amp;id=".$_GET['id'],"","",$sortfield,$sortorder);
-			print_liste_field_titre($langs->trans("Label"),"", "p.label","&amp;id=".$_GET['id'],"","",$sortfield,$sortorder);
-            print_liste_field_titre($langs->trans("Units"),"", "ps.reel","&amp;id=".$_GET['id'],"",'align="right"',$sortfield,$sortorder);
-            print_liste_field_titre($langs->trans("AverageUnitPricePMPShort"),"", "ps.pmp","&amp;id=".$_GET['id'],"",'align="right"',$sortfield,$sortorder);
-			print_liste_field_titre($langs->trans("EstimatedStockValueShort"),"", "","&amp;id=".$_GET['id'],"",'align="right"',$sortfield,$sortorder);
-            if (empty($conf->global->PRODUIT_MULTIPRICES)) print_liste_field_titre($langs->trans("SellPriceMin"),"", "p.price","&amp;id=".$_GET['id'],"",'align="right"',$sortfield,$sortorder);
-            if (empty($conf->global->PRODUIT_MULTIPRICES)) print_liste_field_titre($langs->trans("EstimatedStockValueSellShort"),"", "","&amp;id=".$_GET['id'],"",'align="right"',$sortfield,$sortorder);
+			print_liste_field_titre($langs->trans("Product"),"", "p.ref","&amp;id=".$id,"","",$sortfield,$sortorder);
+			print_liste_field_titre($langs->trans("Label"),"", "p.label","&amp;id=".$id,"","",$sortfield,$sortorder);
+            print_liste_field_titre($langs->trans("Units"),"", "ps.reel","&amp;id=".$id,"",'align="right"',$sortfield,$sortorder);
+            print_liste_field_titre($langs->trans("AverageUnitPricePMPShort"),"", "ps.pmp","&amp;id=".$id,"",'align="right"',$sortfield,$sortorder);
+			print_liste_field_titre($langs->trans("EstimatedStockValueShort"),"", "","&amp;id=".$id,"",'align="right"',$sortfield,$sortorder);
+            if (empty($conf->global->PRODUIT_MULTIPRICES)) print_liste_field_titre($langs->trans("SellPriceMin"),"", "p.price","&amp;id=".$id,"",'align="right"',$sortfield,$sortorder);
+            if (empty($conf->global->PRODUIT_MULTIPRICES)) print_liste_field_titre($langs->trans("EstimatedStockValueSellShort"),"", "","&amp;id=".$id,"",'align="right"',$sortfield,$sortorder);
 			if ($user->rights->stock->mouvement->creer) print '<td>&nbsp;</td>';
 			if ($user->rights->stock->creer)            print '<td>&nbsp;</td>';
 			print "</tr>";
diff --git a/htdocs/product/stock/img/index.html b/htdocs/product/stock/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/product/stock/lib/index.html b/htdocs/product/stock/lib/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/projet/admin/index.html b/htdocs/projet/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/projet/class/index.html b/htdocs/projet/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/public/cron/index.html b/htdocs/public/cron/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/public/emailing/index.html b/htdocs/public/emailing/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/resource/class/index.html b/htdocs/resource/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/resource/class/resource.class.php b/htdocs/resource/class/resource.class.php
index 22ae2f36bded298917feb3cdef7a9247336944ad..f9eacda124afb30727af63c132750897fb09002b 100644
--- a/htdocs/resource/class/resource.class.php
+++ b/htdocs/resource/class/resource.class.php
@@ -331,7 +331,15 @@ class Resource extends CommonObject
         global $user,$langs,$conf;
     
         $error=0;
-    
+
+        if (! $notrigger)
+        {
+            // Call trigger
+            $result=$this->call_trigger('RESOURCE_DELETE',$user);
+            if ($result < 0) return -1;
+            // End call triggers
+        }
+        
         $sql = "DELETE FROM ".MAIN_DB_PREFIX."resource";
         $sql.= " WHERE rowid =".$rowid;
     
@@ -343,18 +351,6 @@ class Resource extends CommonObject
             dol_syslog(get_class($this)."::delete", LOG_DEBUG);
             if ($this->db->query($sql))
             {
-                if (! $notrigger)
-                {
-                    // Call triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('RESOURCE_DELETE',$this,$user,$langs,$conf);
-                    if ($result < 0) {
-                        $error++; $this->errors=$interface->errors;
-                    }
-                    // End call triggers
-                }
-    
                 return 1;
             }
             else {
@@ -734,15 +730,10 @@ class Resource extends CommonObject
 		{
 			if (! $notrigger)
 			{
-	            // Uncomment this and change MYOBJECT to your own tag if you
-	            // want this action calls a trigger.
-
-	            // Call triggers
-	            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-	            $interface=new Interfaces($this->db);
-	            $result=$interface->run_triggers('RESOURCE_MODIFY',$this,$user,$langs,$conf);
-	            if ($result < 0) { $error++; $this->errors=$interface->errors; }
-	            // End call triggers
+                // Call trigger
+                $result=$this->call_trigger('RESOURCE_MODIFY',$user);
+                if ($result < 0) $error++;          
+                // End call triggers
 	    	}
 		}
 
diff --git a/htdocs/resource/img/index.html b/htdocs/resource/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/resource/index.html b/htdocs/resource/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/ajax/index.html b/htdocs/societe/ajax/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/canvas/company/index.html b/htdocs/societe/canvas/company/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/canvas/company/index.php b/htdocs/societe/canvas/company/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/societe/canvas/company/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/societe/canvas/company/tpl/index.html b/htdocs/societe/canvas/company/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/canvas/company/tpl/index.php b/htdocs/societe/canvas/company/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/societe/canvas/company/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/societe/canvas/index.html b/htdocs/societe/canvas/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/canvas/individual/index.html b/htdocs/societe/canvas/individual/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/canvas/individual/index.php b/htdocs/societe/canvas/individual/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/societe/canvas/individual/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/societe/canvas/individual/tpl/index.html b/htdocs/societe/canvas/individual/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/canvas/individual/tpl/index.php b/htdocs/societe/canvas/individual/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/societe/canvas/individual/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/societe/checkvat/index.html b/htdocs/societe/checkvat/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/checkvat/index.php b/htdocs/societe/checkvat/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/societe/checkvat/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/societe/class/index.html b/htdocs/societe/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php
index 2b519a686cd7f04b77dce4c23734b9f5649d7e64..814ed4832b3691688d9183c380ac4aea89c173b8 100644
--- a/htdocs/societe/class/societe.class.php
+++ b/htdocs/societe/class/societe.class.php
@@ -441,12 +441,10 @@ class Societe extends CommonObject
 
                 if ($ret >= 0)
                 {
-                    // Appel des triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('COMPANY_CREATE',$this,$user,$langs,$conf);
-                    if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                    // Fin appel triggers
+                    // Call trigger
+                    $result=$this->call_trigger('COMPANY_CREATE',$user);
+                    if ($result < 0) $error++;          
+                    // End call triggers
                 }
                 else $error++;
 
@@ -879,12 +877,10 @@ class Societe extends CommonObject
 
                 if (! $error && $call_trigger)
                 {
-                    // Appel des triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface=new Interfaces($this->db);
-                    $result=$interface->run_triggers('COMPANY_MODIFY',$this,$user,$langs,$conf);
-                    if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                    // Fin appel triggers
+                    // Call trigger
+                    $result=$this->call_trigger('COMPANY_MODIFY',$user);
+                    if ($result < 0) $error++;          
+                    // End call triggers
                 }
 
                 if (! $error)
@@ -1247,15 +1243,10 @@ class Societe extends CommonObject
 		{
             $this->db->begin();
 
-		    if (! $error)
-            {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('COMPANY_DELETE',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
-                // Fin appel triggers
-            }
+            // Call trigger
+            $result=$this->call_trigger('COMPANY_DELETE',$user);
+            if ($result < 0) $error++;          
+            // End call triggers
 
 			if (! $error)
 			{
diff --git a/htdocs/societe/tpl/index.html b/htdocs/societe/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/amarok/ckeditor/index.html b/htdocs/theme/amarok/ckeditor/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/amarok/img/index.html b/htdocs/theme/amarok/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/amarok/index.html b/htdocs/theme/amarok/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/amarok/index.php b/htdocs/theme/amarok/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/amarok/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/amarok/tpl/index.html b/htdocs/theme/amarok/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/amarok/tpl/index.php b/htdocs/theme/amarok/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/amarok/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/auguria/ckeditor/index.html b/htdocs/theme/auguria/ckeditor/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/auguria/img/index.html b/htdocs/theme/auguria/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/auguria/img/menus/index.html b/htdocs/theme/auguria/img/menus/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/auguria/index.html b/htdocs/theme/auguria/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/auguria/index.php b/htdocs/theme/auguria/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/auguria/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/auguria/tpl/index.html b/htdocs/theme/auguria/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/auguria/tpl/index.php b/htdocs/theme/auguria/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/auguria/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/bureau2crea/ckeditor/index.html b/htdocs/theme/bureau2crea/ckeditor/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/bureau2crea/img/bouton/index.html b/htdocs/theme/bureau2crea/img/bouton/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/bureau2crea/img/index.html b/htdocs/theme/bureau2crea/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/bureau2crea/img/menus/index.html b/htdocs/theme/bureau2crea/img/menus/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/bureau2crea/index.html b/htdocs/theme/bureau2crea/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/bureau2crea/index.php b/htdocs/theme/bureau2crea/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/bureau2crea/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/bureau2crea/tpl/index.html b/htdocs/theme/bureau2crea/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/bureau2crea/tpl/index.php b/htdocs/theme/bureau2crea/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/bureau2crea/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/cameleo/ckeditor/index.html b/htdocs/theme/cameleo/ckeditor/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/cameleo/img/bouton/index.html b/htdocs/theme/cameleo/img/bouton/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/cameleo/img/index.html b/htdocs/theme/cameleo/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/cameleo/img/menus/index.html b/htdocs/theme/cameleo/img/menus/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/cameleo/index.html b/htdocs/theme/cameleo/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/cameleo/index.php b/htdocs/theme/cameleo/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/cameleo/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/cameleo/tpl/index.html b/htdocs/theme/cameleo/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/cameleo/tpl/index.php b/htdocs/theme/cameleo/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/cameleo/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/common/devices/index.html b/htdocs/theme/common/devices/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/common/emotes/index.html b/htdocs/theme/common/emotes/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/common/flags/index.html b/htdocs/theme/common/flags/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/common/index.html b/htdocs/theme/common/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/common/mime/index.html b/htdocs/theme/common/mime/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/common/treemenu/index.html b/htdocs/theme/common/treemenu/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/common/weather/index.html b/htdocs/theme/common/weather/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/eldy/ckeditor/index.html b/htdocs/theme/eldy/ckeditor/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/eldy/img/index.html b/htdocs/theme/eldy/img/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/eldy/img/menus/index.html b/htdocs/theme/eldy/img/menus/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/eldy/index.html b/htdocs/theme/eldy/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/eldy/index.php b/htdocs/theme/eldy/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/eldy/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/eldy/tpl/index.html b/htdocs/theme/eldy/tpl/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/eldy/tpl/index.php b/htdocs/theme/eldy/tpl/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/eldy/tpl/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/theme/index.html b/htdocs/theme/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/theme/index.php b/htdocs/theme/index.php
deleted file mode 100644
index 7db0dd9ebf92f2ddad5a82d32d38ab764846107a..0000000000000000000000000000000000000000
--- a/htdocs/theme/index.php
+++ /dev/null
@@ -1 +0,0 @@
-Url not available
\ No newline at end of file
diff --git a/htdocs/user/admin/index.html b/htdocs/user/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/user/class/index.html b/htdocs/user/class/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/htdocs/webservices/admin/index.html b/htdocs/webservices/admin/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391