diff --git a/build/generate_filecheck_xml.php b/build/generate_filecheck_xml.php
new file mode 100644
index 0000000000000000000000000000000000000000..47b15f4dec01c24c497e51f7254f74586a631571
--- /dev/null
+++ b/build/generate_filecheck_xml.php
@@ -0,0 +1,29 @@
+<?php
+parse_str($argv[1]);
+$fp = fopen(dirname(__FILE__).'/../htdocs/core/filelist-'.$release.'.xml','w');
+fputs($fp, '<?xml version="1.0" encoding="UTF-8" ?>'."\n");
+fputs($fp, '<checksum_list>'."\n");
+fputs($fp, '<dolibarr_root_dir version="'.$release.'">'."\n");
+$dir_iterator = new RecursiveDirectoryIterator(dirname(__FILE__).'/../htdocs/');
+$iterator = new RecursiveIteratorIterator($dir_iterator);
+// need to ignore document custom etc
+$files = new RegexIterator($iterator, '#^(?:[A-Z]:)?(?:/(?!(?:custom|documents|conf|install))[^/]+)+/[^/]+\.(?:php|html|js|json|tpl|jpg|png|gif|sql|lang)$#i');
+$dir='';
+$needtoclose=0;
+foreach ($files as $file) {
+    $newdir = str_replace(dirname(__FILE__).'/../htdocs', '', dirname($file));
+    if ($newdir!=$dir) {
+        if ($needtoclose)
+            fputs($fp, '</dir>'."\n");
+        fputs($fp, '<dir name="'.$newdir.'" >'."\n");
+        $dir = $newdir;
+        $needtoclose=1;
+    }
+    if (filetype($file)=="file") {
+        fputs($fp, '<md5file name="'.basename($file).'">'.md5_file($file).'</md5file>'."\n");
+    }
+}
+fputs($fp, '</dir>'."\n");
+fputs($fp, '</dolibarr_root_dir>'."\n");
+fputs($fp, '</checksum_list>'."\n");
+fclose($fp);
diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl
index c14fb86a1047e856ea7aa5bbb30db76151995398..3de531902f4fbbb7300920fadbaf692f3ba426c6 100755
--- a/build/makepack-dolibarr.pl
+++ b/build/makepack-dolibarr.pl
@@ -204,6 +204,9 @@ else {
 	my $NUM_SCRIPT;
 	my $cpt=0;
 	while (! $found) {
+		$cpt=-1;
+		printf(" %2d - %-14s  (%s)\n",$cpt,"XML Filecheck","Done in all case");
+		$cpt=0;
 		printf(" %2d - %-14s  (%s)\n",$cpt,"ALL (1..9)","Need ".join(",",values %REQUIREMENTTARGET));
 		foreach my $target (@LISTETARGET) {
 			$cpt++;
@@ -297,7 +300,7 @@ foreach my $target (keys %CHOOSEDTARGET) {
 
 print "\n";
 
-# Check if there is at least on target to build
+# Check if there is at least one target to build
 #----------------------------------------------
 $nboftargetok=0;
 $nboftargetneedbuildroot=0;
@@ -319,6 +322,12 @@ foreach my $target (keys %CHOOSEDPUBLISH) {
 
 if ($nboftargetok) {
 
+	# Build xml check file
+	#-----------------------
+    print 'Create xml check file with md5 checksum'."\n";
+    $FULLDIRECTORY = cwd();
+    $ret=`php $FULLDIRECTORY/generate_filecheck_xml.php release=$MAJOR.$MINOR.$BUILD`;
+
 	# Update CVS if required
 	#-----------------------
 	if ($nbofpublishneedtag)
diff --git a/htdocs/admin/system/filecheck.php b/htdocs/admin/system/filecheck.php
new file mode 100644
index 0000000000000000000000000000000000000000..278aae8ea5bd26ef1f6c33282b87aed871c08d7f
--- /dev/null
+++ b/htdocs/admin/system/filecheck.php
@@ -0,0 +1,138 @@
+<?php
+/* Copyright (C) 2005-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
+ * Copyright (C) 2007       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
+ * Copyright (C) 2007-2012  Regis Houssin           <regis.houssin@capnetworks.com>
+ * Copyright (C) 2015       Frederic France         <frederic.france@free.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
+ * 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/admin/system/filecheck.php
+ *  \brief      Page to check Dolibarr files integrity
+ */
+
+require '../../main.inc.php';
+
+$langs->load("admin");
+
+if (!$user->admin)
+    accessforbidden();
+
+
+/*
+ * View
+ */
+
+llxHeader();
+
+print_fiche_titre($langs->trans("FileCheckDolibarr"),'','setup');
+
+// Version
+$var = true;
+print '<table class="noborder" width="100%">';
+print '<tr class="liste_titre"><td>'.$langs->trans("Version").'</td><td>'.$langs->trans("Value").'</td></tr>'."\n";
+$var = ! $var;
+print '<tr '.$bc[$var].'><td width="300">'.$langs->trans("VersionLastInstall").'</td><td>'.$conf->global->MAIN_VERSION_LAST_INSTALL.'</td></tr>'."\n";
+$var = ! $var;
+print '<tr '.$bc[$var].'><td width="300">'.$langs->trans("VersionLastUpgrade").'</td><td>'.$conf->global->MAIN_VERSION_LAST_UPGRADE.'</td></tr>'."\n";
+$var = ! $var;
+print '<tr '.$bc[$var].'><td width="300">'.$langs->trans("VersionProgram").'</td><td>'.DOL_VERSION;
+// If current version differs from last upgrade
+if (empty($conf->global->MAIN_VERSION_LAST_UPGRADE)) {
+    // Compare version with last install database version (upgrades never occured)
+    if (DOL_VERSION != $conf->global->MAIN_VERSION_LAST_INSTALL)
+        print ' '.img_warning($langs->trans("RunningUpdateProcessMayBeRequired",DOL_VERSION,$conf->global->MAIN_VERSION_LAST_INSTALL));
+} else {
+    // Compare version with last upgrade database version
+    if (DOL_VERSION != $conf->global->MAIN_VERSION_LAST_UPGRADE)
+        print ' '.img_warning($langs->trans("RunningUpdateProcessMayBeRequired",DOL_VERSION,$conf->global->MAIN_VERSION_LAST_UPGRADE));
+}
+print '</td></tr>'."\n";
+print '</table>';
+print '<br>';
+
+
+// Modified or missing files
+$file_list = array('missing' => array(), 'updated' => array());
+$xmlfile = DOL_DOCUMENT_ROOT.'/core/filelist-'.DOL_VERSION.'.xml';
+if (file_exists($xmlfile)) {
+    $xml = simplexml_load_file($xmlfile);
+    if ($xml) {
+        $ret = getFilesUpdated($xml->dolibarr_root_dir[0]);
+        print '<table class="noborder">';
+        print '<tr class="liste_titre">';
+        print '<td>' . $langs->trans("FilesMissing") . '</td>';
+        print '</tr>'."\n";
+        $var = true;
+        foreach ($file_list['missing'] as $file) {
+            $var = !$var;
+            print '<tr ' . $bc[$var] . '>';
+            print '<td>'.$file.'</td>' . "\n";
+            print "</tr>\n";
+        }
+        print '</table>';
+        print '<table class="noborder">';
+        print '<tr class="liste_titre">';
+        print '<td>' . $langs->trans("FilesUpdated") . '</td>';
+        print '</tr>'."\n";
+        $var = true;
+        foreach ($file_list['updated'] as $file) {
+            $var = !$var;
+            print '<tr ' . $bc[$var] . '>';
+            print '<td>'.$file.'</td>' . "\n";
+            print "</tr>\n";
+        }
+        print '</table>';
+    }
+} else {
+    print $langs->trans('XmlNotFound') . ': ' . DOL_DOCUMENT_ROOT . '/core/filelist-' . DOL_VERSION . '.xml';
+}
+
+llxFooter();
+
+$db->close();
+
+
+/**
+ * Function to get list of updated or modified files
+ *
+ * @param   object   $dir           SimpleXMLElement of files to test
+ * @param   string   $path          Path of file
+ * @return  array                   Array of filenames
+ */
+function getFilesUpdated(SimpleXMLElement $dir, $path = '')
+{
+    global $file_list;
+    $exclude = 'install';
+
+    foreach ($dir->md5file as $file) {
+        $filename = $path.$file['name'];
+
+        if (preg_match('#'.$exclude.'#', $filename))
+            continue;
+
+        if (!file_exists(DOL_DOCUMENT_ROOT.'/'.$filename)) {
+            $file_list['missing'][] = $filename;
+        } else {
+            $md5_local = md5_file(DOL_DOCUMENT_ROOT.'/'.$filename);
+            if ($md5_local != (string) $file)
+                $file_list['updated'][] = $filename;
+        }
+    }
+
+    foreach ($dir->dir as $subdir)
+        getFilesUpdated($subdir, $path.$subdir['name'].'/');
+return $file_list;
+}
diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql
index 417e02738b3fd748b607719db47ff0ddde482f5c..236669273a15ee21e4c56ca8e3ddedde6b453de8 100644
--- a/htdocs/core/menus/init_menu_auguria.sql
+++ b/htdocs/core/menus/init_menu_auguria.sql
@@ -39,10 +39,11 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 201__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/dolibarr.php?leftmenu=admintools', 'InfoDolibarr', 1, 'admin', '', '', 2, 0, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 202__+MAX_llx_menu__, 'home', '', 201__+MAX_llx_menu__, '/admin/system/modules.php?leftmenu=admintools', 'Modules', 2, 'admin', '', '', 2, 2, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 203__+MAX_llx_menu__, 'home', '', 201__+MAX_llx_menu__, '/admin/triggers.php?leftmenu=admintools', 'Triggers', 2, 'admin', '', '', 2, 3, __ENTITY__);
-insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 204__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/browser.php?leftmenu=admintools', 'InfoBrowser', 1, 'admin', '', '', 2, 1, __ENTITY__);
-insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 205__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/os.php?leftmenu=admintools', 'InfoOS', 1, 'admin', '', '', 2, 2, __ENTITY__);
-insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 206__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/web.php?leftmenu=admintools', 'InfoWebServer', 1, 'admin', '', '', 2, 3, __ENTITY__);
-insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 207__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/phpinfo.php?leftmenu=admintools', 'InfoPHP', 1, 'admin', '', '', 2, 4, __ENTITY__);
+insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 204__+MAX_llx_menu__, 'home', '', 201__+MAX_llx_menu__, '/admin/system/filecheck.php?leftmenu=admintools', 'FileCheck', 2, 'admin', '', '', 2, 4, __ENTITY__);
+insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 205__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/browser.php?leftmenu=admintools', 'InfoBrowser', 1, 'admin', '', '', 2, 1, __ENTITY__);
+insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 206__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/os.php?leftmenu=admintools', 'InfoOS', 1, 'admin', '', '', 2, 2, __ENTITY__);
+insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 207__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/web.php?leftmenu=admintools', 'InfoWebServer', 1, 'admin', '', '', 2, 3, __ENTITY__);
+insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 208__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/phpinfo.php?leftmenu=admintools', 'InfoPHP', 1, 'admin', '', '', 2, 4, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 210__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/system/database.php?leftmenu=admintools', 'InfoDatabase', 1, 'admin', '', '', 2, 5, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 301__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/tools/dolibarr_export.php?leftmenu=admintools', 'Backup', 1, 'admin', '', '', 2, 6, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu=="admintools"', __HANDLER__, 'left', 302__+MAX_llx_menu__, 'home', '', 300__+MAX_llx_menu__, '/admin/tools/dolibarr_import.php?leftmenu=admintools', 'Restore', 1, 'admin', '', '', 2, 7, __ENTITY__);
diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php
index bfab2db051a866554d8d876d54526a5920a54082..5e6ce3cc63bd4edec2174f9c3fbf968c9e3b927f 100644
--- a/htdocs/core/menus/standard/eldy.lib.php
+++ b/htdocs/core/menus/standard/eldy.lib.php
@@ -503,6 +503,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 					$newmenu->add('/admin/system/dolibarr.php?mainmenu=home&amp;leftmenu=admintools_info', $langs->trans('InfoDolibarr'), 1);
 					if (empty($leftmenu) || $leftmenu=='admintools_info') $newmenu->add('/admin/system/modules.php?mainmenu=home&amp;leftmenu=admintools_info', $langs->trans('Modules'), 2);
 					if (empty($leftmenu) || $leftmenu=='admintools_info') $newmenu->add('/admin/triggers.php?mainmenu=home&amp;leftmenu=admintools_info', $langs->trans('Triggers'), 2);
+					if (empty($leftmenu) || $leftmenu=='admintools_info') $newmenu->add('/admin/system/filecheck.php?mainmenu=home&amp;leftmenu=admintools_info', $langs->trans('FileCheck'), 2);
 					$newmenu->add('/admin/system/browser.php?mainmenu=home&amp;leftmenu=admintools', $langs->trans('InfoBrowser'), 1);
 					$newmenu->add('/admin/system/os.php?mainmenu=home&amp;leftmenu=admintools', $langs->trans('InfoOS'), 1);
 					$newmenu->add('/admin/system/web.php?mainmenu=home&amp;leftmenu=admintools', $langs->trans('InfoWebServer'), 1);
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index e16a0a30cccf1de7e03c0fb62bab94c24e93a5a0..5305c1c62ba0d5ecc0c2bcec33d3e58461d8b7d9 100755
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -8,6 +8,11 @@ VersionExperimental=Experimental
 VersionDevelopment=Development
 VersionUnknown=Unknown
 VersionRecommanded=Recommended
+FileCheck=Files Integrity
+FilesMissing=Missing Files
+FilesUpdated=Updated Files
+FileCheckDolibarr=Check Dolibarr Files Integrity
+XmlNotFound=Xml File of Dolibarr Integrity Not Found
 SessionId=Session ID
 SessionSaveHandler=Handler to save sessions
 SessionSavePath=Storage session localization