diff --git a/htdocs/admin/system/perf.php b/htdocs/admin/system/perf.php
new file mode 100644
index 0000000000000000000000000000000000000000..f0f95b62d152e1e35a25c48c4c18b90861d0260a
--- /dev/null
+++ b/htdocs/admin/system/perf.php
@@ -0,0 +1,451 @@
+<?php
+/* Copyright (C) 2005-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
+ *
+ * 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/perf.php
+ *  \brief      Page to show Performance information
+ */
+
+require '../../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
+
+$langs->load("admin");
+$langs->load("install");
+$langs->load("other");
+
+if (! $user->admin)
+	accessforbidden();
+
+if (GETPOST('action') == 'donothing')
+{
+	exit;
+}
+
+
+/*
+ * View
+ */
+
+$form=new Form($db);
+$nowstring=dol_print_date(dol_now(),'dayhourlog');
+
+llxHeader();
+
+print_fiche_titre($langs->trans("PerfDolibarr"),'','setup');
+
+print $langs->trans("YouMayFindPerfAdviceHere",'http://wiki.dolibarr.org/index.php/FAQ_Increase_Performance').' (<a href="'.$_SERVER["PHP_SELF"].'">'.$langs->trans("Reload").'</a>)<br>';
+
+// XDebug
+print '<br>';
+print '<strong>'.$langs->trans("XDebug").'</strong>: ';
+$test=!function_exists('xdebug_is_enabled');
+if ($test) print img_picto('','tick.png').' '.$langs->trans("NotInstalled");
+else 
+{
+	print img_picto('','warning').' '.$langs->trans("XDebugInstalled");
+	print $langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/xdebug.php'.'">XDebug admin page</a>';
+}
+print '<br>';
+
+// Applicative cache
+print '<br>';
+print '<strong>'.$langs->trans("ApplicativeCache").'</strong>: ';
+$test=!empty($conf->memcached->enabled);
+if ($test) 
+{
+	if (!empty($conf->global->MEMCACHED_SERVER))
+	{
+		print img_picto('','tick.png').' '.$langs->trans("MemcachedAvailableAndSetup");
+		print $langs->trans("MoreInformation").' <a href="'.dol_buildpath('/memcached/admin/memcached.php',1).'">Memcached module admin page</a>';
+	}
+	else
+	{
+		print img_picto('','warning').' '.$langs->trans("MemcachedModuleAvailableButNotSetup");
+	}
+}
+else print img_picto('','warning').' '.$langs->trans("MemcachedNotAvailable");
+print '</br>';
+
+// OPCode cache
+print '<br>';
+print '<strong>'.$langs->trans("OPCodeCache").'</strong>: ';
+$test1=function_exists('xcache_info');
+if ($test1) 
+{
+	print img_picto('','tick.png').' '.$langs->trans("XCacheInstalled");
+	print $langs->trans("MoreInformation").' <a href="'.DOL_URL_ROOT.'/admin/xcache.php'.'">Xcache admin page</a>';
+}
+else 
+{
+	$test2=function_exists('eaccelerator_info');
+	if ($test2) print img_picto('','tick.png').' '.$langs->trans("EAcceleratorInstalled");
+	else print $langs->trans("NoOPCodeCacheFound");
+}
+print '<br>';
+
+// HTTPCacheStaticResources
+print '<script type="text/javascript" language="javascript">
+jQuery(document).ready(function() {
+  var getphpurl;
+  var cachephpstring;
+  var compphpstring;
+  getphpurl = $.ajax({
+    type: "GET",
+    url: \''.DOL_URL_ROOT.'/index.php\',
+    cache: false,
+    /* async: false, */
+    /* crossDomain: true,*/
+    success: function () {
+    	cachephpstring=getphpurl.getResponseHeader(\'Cache-Control\');
+    	/* alert(\'php:\'+getphpurl.getAllResponseHeaders()); */
+      	/*alert(\'php:\'+cachephpstring);*/
+      	if (cachephpstring == null || cachephpstring.indexOf("no-cache") !== -1)
+      	{
+	      	jQuery("#httpcachephpok").hide();
+      		jQuery("#httpcachephpko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcachephpok").show();
+      		jQuery("#httpcachephpko").hide();
+      	}
+      	compphpstring=getphpurl.getResponseHeader(\'Content-Encoding\');
+      	/* alert(\'php:\'+getphpurl.getAllResponseHeaders()); */
+      	/*alert(\'php:\'+compphpstring);*/
+      	if (compphpstring == null || (compphpstring.indexOf("gzip") == -1 && compphpstring.indexOf("deflate") == -1))
+      	{
+	      	jQuery("#httpcompphpok").hide();
+      		jQuery("#httpcompphpko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcompphpok").show();
+      		jQuery("#httpcompphpko").hide();
+      	}
+	}
+  })
+  
+  var getcssurl;
+  var cachecssstring;
+  var compcssstring;
+  getcssurl = $.ajax({
+    type: "GET",
+    url: \''.DOL_URL_ROOT.'/includes/jquery/css/smoothness/jquery-ui-latest.custom.css\',
+    cache: false,
+    /* async: false, */
+    /*crossDomain: true, */
+    success: function () {
+      	cachecssstring=getcssurl.getResponseHeader(\'Cache-Control\');
+      	/* alert(\'css:\'+getcssurl.getAllResponseHeaders()); */
+      	/*alert(\'css:\'+cachecssstring);*/
+      	if (cachecssstring != null && cachecssstring.indexOf("no-cache") !== -1)
+      	{
+	      	jQuery("#httpcachecssok").hide();
+      		jQuery("#httpcachecssko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcachecssok").show();
+      		jQuery("#httpcachecssko").hide();
+      	}
+      	compcssstring=getcssurl.getResponseHeader(\'Content-Encoding\');
+      	/* alert(\'php:\'+getcssurl.getAllResponseHeaders()); */
+      	/*alert(\'php:\'+compcssstring);*/
+      	if (compcssstring == null || (compcssstring.indexOf("gzip") == -1 && compcssstring.indexOf("deflate") == -1))
+      	{
+	      	jQuery("#httpcompcssok").hide();
+      		jQuery("#httpcompcssko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcompcssok").show();
+      		jQuery("#httpcompcssko").hide();
+      	}
+	}
+  })
+
+  var getcssphpurl;
+  var cachecssphpstring;  
+  var compcssphpstring;
+  getcssphpurl = $.ajax({
+    type: "GET",
+    url: \''.DOL_URL_ROOT.'/theme/eldy/style.css.php\',
+    cache: false,
+    /* async: false, */
+    /*crossDomain: true,*/
+    success: function () {
+      	cachecssphpstring=getcssphpurl.getResponseHeader(\'Cache-Control\');
+      	/* alert(\'cssphp:\'+getcssphpurl.getAllResponseHeaders()); */
+      	/*alert(\'cssphp:\'+cachecssphpstring);*/
+      	if (cachecssphpstring != null && cachecssphpstring.indexOf("no-cache") !== -1)
+      	{
+	      	jQuery("#httpcachecssphpok").hide();
+      		jQuery("#httpcachecssphpko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcachecssphpok").show();
+      		jQuery("#httpcachecssphpko").hide();
+      	}
+      	compcssphpstring=getcssphpurl.getResponseHeader(\'Content-Encoding\');
+      	/* alert(\'php:\'+getcssphpurl.getAllResponseHeaders()); */
+      	/*alert(\'php:\'+compcssphpstring);*/
+      	if (compcssphpstring == null || (compcssphpstring.indexOf("gzip") == -1 && compcssphpstring.indexOf("deflate") == -1))
+      	{
+	      	jQuery("#httpcompcssphpok").hide();
+      		jQuery("#httpcompcssphpko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcompcssphpok").show();
+      		jQuery("#httpcompcssphpko").hide();
+      	}
+    }
+  })
+  
+  var getimgurl;
+  var cacheimgstring;
+  var compimgstring;
+  getimgurl = $.ajax({
+    type: "GET",
+    url: \''.DOL_URL_ROOT.'/theme/eldy/img/help.png\',
+    cache: false,
+    /* async: false, */
+    /*crossDomain: true,*/
+    success: function () {
+      	cacheimgstring=getimgurl.getResponseHeader(\'Cache-Control\');
+      	/* alert(\'img:\'+getimgurl.getAllResponseHeaders()); */
+      	/*alert(\'img:\'+cacheimgstring);*/
+      	if (cacheimgstring != null && cacheimgstring.indexOf("no-cache") !== -1)
+      	{
+	      	jQuery("#httpcacheimgok").hide();
+      		jQuery("#httpcacheimgko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcacheimgok").show();
+      		jQuery("#httpcacheimgko").hide();
+      	}
+      	compimgstring=getimgurl.getResponseHeader(\'Content-Encoding\');
+      	/* alert(\'php:\'+getimgurl.getAllResponseHeaders()); */
+      	/*alert(\'php:\'+compimgstring);*/
+      	if (compimgstring == null || (compimgstring.indexOf("gzip") == -1 && compimgstring.indexOf("deflate") == -1))
+      	{
+	      	jQuery("#httpcompimgok").hide();
+      		jQuery("#httpcompimgko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcompimgok").show();
+      		jQuery("#httpcompimgko").hide();
+      	}      	
+	 }
+  })
+
+  var getjsurl;
+  var cachejsstring;
+  var compjsstring;
+  getjsurl = $.ajax({
+    type: "GET",
+    url: \''.DOL_URL_ROOT.'/core/js/lib_head.js\',
+    cache: false,
+    /* async: false, */
+    /* crossDomain: true,*/
+    success: function () {
+      	cachejsstring=getjsurl.getResponseHeader(\'Cache-Control\');
+      	/*alert(\'js:\'+getjsurl.getAllResponseHeaders());*/
+      	/*alert(\'js:\'+cachejsstring);*/
+      	if (cachejsstring != null && cachejsstring.indexOf("no-cache") !== -1)
+      	{
+	      	jQuery("#httpcachejsok").hide();
+      		jQuery("#httpcachejsko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcachejsok").show();
+      		jQuery("#httpcachejsko").hide();
+      	}
+      	compjstring=getjsurl.getResponseHeader(\'Content-Encoding\');
+      	/* alert(\'php:\'+getjsurl.getAllResponseHeaders()); */
+      	/*alert(\'php:\'+compjsstring);*/
+      	if (compjsstring == null || (compjsstring.indexOf("gzip") == -1 && compjsstring.indexOf("deflate") == -1))
+      	{
+	      	jQuery("#httpcompjsok").hide();
+      		jQuery("#httpcompjsko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcompjsok").show();
+      		jQuery("#httpcompjsko").hide();
+      	}      	
+    }
+  })
+
+  var getjsphpurl;
+  var cachejsphpstring;
+  var compjsphpstring;
+  getjsphpurl = $.ajax({
+    type: "GET",
+    url: \''.DOL_URL_ROOT.'/core/js/datepicker.js.php\',
+    cache: false,
+    /* async: false, */
+    /* crossDomain: true,*/
+    success: function () {
+      	cachejsphpstring=getjsphpurl.getResponseHeader(\'Cache-Control\');
+      	/* alert(\'jsphp:\'+getjsphpurl.getAllResponseHeaders()); */
+      	/*alert(\'jsphp:\'+cachejsphpstring);*/
+      	if (cachejsphpstring != null && cachejsphpstring.indexOf("no-cache") !== -1)
+      	{
+	      	jQuery("#httpcachejsphpok").hide();
+      		jQuery("#httpcachejsphpko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcachejsphpok").show();
+      		jQuery("#httpcachejsphpko").hide();
+      	}
+      	compjsphpstring=getjsphpurl.getResponseHeader(\'Content-Encoding\');
+      	/* alert(\'php:\'+getjsphpurl.getAllResponseHeaders()); */
+      	/*alert(\'php:\'+compjsphpstring);*/
+      	if (compjsphpstring == null || (compjsphpstring.indexOf("gzip") == -1 && compjsphpstring.indexOf("deflate") == -1))
+      	{
+	      	jQuery("#httpcompjsphpok").hide();
+      		jQuery("#httpcompjsphpko").show();
+		}
+      	else
+      	{
+      		jQuery("#httpcompjsphpok").show();
+      		jQuery("#httpcompjsphpko").hide();
+      	}      	
+    }
+  })
+
+});
+</script>';
+
+
+print '<br>';
+print '<strong>'.$langs->trans("HTTPCacheStaticResources").' - ';
+print $langs->trans("CacheByServer").':</strong><br>';
+// No cahce on PHP
+//print '<div id="httpcachephpok">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'php (.php)').'</div>';
+//print '<div id="httpcachephpko">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeNotCached",'php (.php)').'</div>';
+// Cache on rest
+print '<div id="httpcachecssok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCached",'css (.css)').'</div>';
+print '<div id="httpcachecssko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCached",'css (.css)').'</div>';
+print '<div id="httpcachecssphpok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCached",'css (.css.php)').'</div>';
+print '<div id="httpcachecssphpko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCached",'css (.css.php)').'</div>';
+print '<div id="httpcacheimgok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCached",'img (.png)').'</div>';
+print '<div id="httpcacheimgko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCached",'img (.png)').'</div>';
+print '<div id="httpcachejsok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCached",'javascript (.js)').'</div>';
+print '<div id="httpcachejsko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCached",'javascript (.js)').'</div>';
+print '<div id="httpcachejsphpok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCached",'javascript (.js.php)').'</div>';
+print '<div id="httpcachejsphpko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCached",'javascript (.js.php)').'</div>';
+print '<br>';
+print '<strong>'.$langs->trans("HTTPCacheStaticResources").' - ';
+print $langs->trans("CacheByClient").':</strong><br>';
+print $langs->trans("TestNotPossibleWithCurrentBrowsers").'<br>';
+
+
+// Compressions
+print '<br>';
+print '<strong>'.$langs->trans("CompressionOfResources").'</strong>: ';
+//$tmp=getURLContent(DOL_URL_ROOT.'/index.php','GET');var_dump($tmp);
+print '<br>';
+// on PHP
+print '<div id="httpcompphpok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCompressed",'php (.php)').'</div>';
+print '<div id="httpcompphpko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'php (.php)').'</div>';
+// on rest
+print '<div id="httpcompcssok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCompressed",'css (.css)').'</div>';
+print '<div id="httpcompcssko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'css (.css)').'</div>';
+print '<div id="httpcompcssphpok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCompressed",'css (.css.php)').'</div>';
+print '<div id="httpcompcssphpko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'css (.css.php)').'</div>';
+//print '<div id="httpcompimgok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCompressed",'img (.png)').'</div>';
+//print '<div id="httpcompimgko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'img (.png)').'</div>';
+print '<div id="httpcompjsok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCompressed",'javascript (.js)').'</div>';
+print '<div id="httpcompjsko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'javascript (.js)').'</div>';
+print '<div id="httpcompjsphpok">'.img_picto('','tick.png').' '.$langs->trans("FilesOfTypeCompressed",'javascript (.js.php)').'</div>';
+print '<div id="httpcompjsphpko">'.img_picto('','warning.png').' '.$langs->trans("FilesOfTypeNotCompressed",'javascript (.js.php)').'</div>';
+
+// Database driver
+print '<br>';
+print '<strong>'.$langs->trans("DriverType").'</strong>: ';
+print '<br>';
+if ($conf->db->type == 'mysql' || $conf->db->type == 'mysqli')
+{
+	$test=($conf->db->type == 'mysqli');
+	if ($test)
+	{
+		print img_picto('','tick.png').' '.$langs->trans("YouUseBestDriver",$conf->db->type);
+	}
+	else
+	{
+		print img_picto('','warning.png').' '.$langs->trans("YouDoNotUseBestDriver",$conf->db->type,'mysqli');
+	}
+	print '<br>';
+}
+
+// Product search
+print '<br>';
+print '<strong>'.$langs->trans("ProductSearch").'</strong>: ';
+print '<br>';
+$tab = array();
+$sql = "SELECT COUNT(*) as nb";
+$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
+$resql=$db->query($sql);
+if ($resql)
+{
+	$limitforoptim=10000;
+	$num=$db->num_rows($resql);
+	if ($nb > $limitforoptim)
+	{
+		if (empty($conf->global->PRODUCT_DONOTSEARCH_ANYWHERE))
+		{
+			print img_picto('','warning.png').' '.$langs->trans("YouHaveXProductUseSearchOptim",$num);
+		}
+		else
+		{
+			print img_picto('','tick.png').' '.$langs->trans("YouHaveXProductAndSearchOptimOn",$num);
+		}
+	}
+	else 
+	{
+		print img_picto('','tick.png').' '.$langs->trans("NbOfProductIsLowerThanNoPb",$limitforoptim);		
+	}
+	print '<br>';
+	$db->free($resql);
+}
+
+// Browser
+print '<br>';
+print '<strong>'.$langs->trans("Browser").'</strong>: ';
+var_dump($conf->browser);
+print '<br>';
+
+// Database statistics update
+print '<br>';
+print '<strong>'.$langs->trans("DatabaseStatistics").'</strong>: ';
+print '<br>';
+
+
+
+llxFooter();
+
+$db->close();
+?>
\ No newline at end of file
diff --git a/htdocs/admin/system/xdebug.php b/htdocs/admin/system/xdebug.php
index d95c957470716410c808fd639fdb763c2ed011c3..b3b833557f6b85ba473f9bdcaffb2e0ad07325b1 100644
--- a/htdocs/admin/system/xdebug.php
+++ b/htdocs/admin/system/xdebug.php
@@ -56,7 +56,7 @@ if (function_exists('socket_create'))
     print 'XDEBUG_PORT: '.$port."<br>\n";
     print "<br>\n";
     $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
-    if (empty($socket)) die('Unable to preapre a socket');
+    if (empty($socket)) die('Unable to prepare a socket');
     //socket_bind($sock, $address, $port) or die('Unable to bind on address='.$address.' port='.$port);
     //socket_listen($sock);
     //$client = socket_accept($sock);
diff --git a/htdocs/core/lib/geturl.lib.php b/htdocs/core/lib/geturl.lib.php
index 61bf9ca94944414e4facffa41ad268c89f5a2782..d0c6d29ddea1d51e31d3c9ad32c11a47fd366d00 100644
--- a/htdocs/core/lib/geturl.lib.php
+++ b/htdocs/core/lib/geturl.lib.php
@@ -83,7 +83,7 @@ function getURLContent($url,$postorget='GET',$param='')
     $rep['content']=$response;
     $rep['curl_error_no']='';
     $rep['curl_error_msg']='';
-
+    
     dol_syslog("getURLContent response=".$response);
 
     if (curl_errno($ch))
@@ -96,7 +96,10 @@ function getURLContent($url,$postorget='GET',$param='')
     }
     else
     {
-        //closing the curl
+    	$info = curl_getinfo($ch);
+    	$rep['header_size']=$info['header_size'];
+    	
+    	//closing the curl
         curl_close($ch);
     }
 
diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php
index 459d2dfd1fb9f89a8029bfb083e9030b5d6bad3d..bea2a29936ce35b8fcec14833bb632497da2e7ce 100644
--- a/htdocs/core/menus/standard/eldy.lib.php
+++ b/htdocs/core/menus/standard/eldy.lib.php
@@ -521,13 +521,14 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 					$newmenu->add('/admin/system/phpinfo.php?mainmenu=home&amp;leftmenu=admintools', $langs->trans('InfoPHP'), 1);
 					//if (function_exists('xdebug_is_enabled')) $newmenu->add('/admin/system/xdebug.php', $langs->trans('XDebug'),1);
 					$newmenu->add('/admin/system/database.php?mainmenu=home&amp;leftmenu=admintools', $langs->trans('InfoDatabase'), 1);
+					if (function_exists('eaccelerator_info')) $newmenu->add("/admin/tools/eaccelerator.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("EAccelerator"),1);
+					//$newmenu->add("/admin/system/perf.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("InfoPerf"),1);
+					$newmenu->add("/admin/tools/purge.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("Purge"),1);
 					$newmenu->add("/admin/tools/dolibarr_export.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("Backup"),1);
 					$newmenu->add("/admin/tools/dolibarr_import.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("Restore"),1);
 					$newmenu->add("/admin/tools/update.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("MenuUpgrade"),1);
-					if (function_exists('eaccelerator_info')) $newmenu->add("/admin/tools/eaccelerator.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("EAccelerator"),1);
 					$newmenu->add("/admin/tools/listevents.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("Audit"),1);
 					$newmenu->add("/admin/tools/listsessions.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("Sessions"),1);
-					$newmenu->add("/admin/tools/purge.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("Purge"),1);
 					$newmenu->add('/admin/system/about.php?mainmenu=home&amp;leftmenu=admintools', $langs->trans('About'), 1);
 					$newmenu->add("/support/index.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("HelpCenter"),1,1,'targethelp');
 				}
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 123dad3b4346b45c74f5102eea3de184f165998b..a90fa297ef7cbbb88aaa0848b07866feaa85bf46 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -884,6 +884,7 @@ InfoOS=Infos OS
 InfoWebServer=Infos web server
 InfoDatabase=Infos database
 InfoPHP=Infos PHP
+InfoPerf=Infos performances
 ListEvents=Audit events
 ListOfSecurityEvents=List of Dolibarr security events
 SecurityEventsPurged=Security events purged
@@ -980,6 +981,11 @@ YesInSummer=Yes in summer
 OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users):
 SuhosinSessionEncrypt=Session storage encrypted by Suhosin
 ConditionIsCurrently=Condition is currently %s
+TestNotPossibleWithCurrentBrowsers=Automatic detection not possible
+YouUseBestDriver=You use driver %s that is best driver available currently.
+YouDoNotUseBestDriver=You use drive %s but driver %s is recommanded.
+SearchProduct=Optimisation recherche produits
+NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
 
 ##### Module password generation
 PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
@@ -1228,6 +1234,22 @@ LDAPDescGroups=This page allows you to define LDAP attributes name in LDAP tree
 LDAPDescMembers=This page allows you to define LDAP attributes name in LDAP tree for each data found on Dolibarr members module.
 LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
 ForANonAnonymousAccess=For an authenticated access (for a write access for example)
+PerfDolibarr=Performance setup/optimizing report
+YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
+NotInstalled=Not installed, so your server is not slow down by this.
+ApplicativeCache=Applicative cache
+MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server. More information here http://wiki.dolibarr.org/index.php/Module_MemCached_EN. Note that a lot of web hosting provider does not provide such cache server. 
+OPCodeCache=OPCode cache
+NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad). 
+HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
+FilesOfTypeCached=Files of type %s are cached by HTTP server
+FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
+FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
+FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
+CacheByServer=Cache by server
+CacheByClient=Cache by browser
+CompressionOfResources=Compression of HTTP responses
+TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current bowsers 
 ##### Products #####
 ProductSetup=Products module setup
 ServiceSetup=Services module setup
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 5aa8827796365288dc05b90f21e0662c555af1ba..b25fb49a7e0cce8a0177786c0b9a4e8b56a25dfc 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -886,6 +886,7 @@ InfoOS=Infos OS
 InfoWebServer=Infos web server
 InfoDatabase=Infos base de donnée
 InfoPHP=Infos PHP
+InfoPerf=Infos performances
 ListEvents=Audit événements
 ListOfSecurityEvents=Liste des événements de sécurité Dolibarr
 SecurityEventsPurged=Evenement de sécurité purgés
@@ -982,7 +983,25 @@ YesInSummer=Oui en été
 OnlyFollowingModulesAreOpenedToExternalUsers=Remarque, seuls les modules suivants sont ouverts aux utilisateurs externes (quelles que soient les permissions de ces utilisateurs) :
 SuhosinSessionEncrypt=Stockage des sessions chiffrées par Suhosin
 ConditionIsCurrently=La condition est actuellement %s
-
+PerfDolibarr=Rapport de configuration/optimisation sur la performance
+YouMayFindPerfAdviceHere=Sur cette page vous trouverez quelques indicateurs ou conseils pour optimiser la performance.
+NotInstalled=Non installé, aussi votre serveur n'est pas ralentit par cela.
+ApplicativeCache=Cache applicatif
+MemcachedNotAvailable=Aucun cache applicatif disponible. Vous pouvez accélérer les performances de Dolibarr en installant un serveur de cache Memcached et un module de cache applicatif exploitant ce serveur. Plus d'info sur la page http://wiki.dolibarr.org/index.php/Module_MemCached. Notez que de nombreux hébergeurs bas couts ne fournissent pas de tels serveurs de cache dans leur infrastructure. 
+OPCodeCache=Cache OPCode
+NoOPCodeCacheFound=Pas de cache OPCode trouvé. Peut-être utilisez-vous un cache OPCode différent de XCache ou eAccelerator (bien), peut-être n'avez vous pas du tout de cache OPCode (très mauvais).
+HTTPCacheStaticResources=Cache HTTP des ressources statiques (css, img, javascript)
+FilesOfTypeCached=Fichiers de type %s mis en cache par le serveur HTTP
+FilesOfTypeNotCached=Fichiers de type %s non mis en cache par le serveur HTTP
+FilesOfTypeCompressed=Fichiers de type %s compressé par le serveur HTTP
+FilesOfTypeNotCompressed=Fichiers de type %s non compressé par le serveur HTTP
+CacheByServer=Cache par le serveur
+CacheByClient=Cache par le navigateur
+CompressionOfResources=Compression des réponses HTTP
+TestNotPossibleWithCurrentBrowsers=Détection automatique non possible
+YouUseBestDriver=Vous utilisez le driver %s qui est le driver recommandé actuellement.
+YouDoNotUseBestDriver=Vous utilisez le driver %s mais le driver %s est recommandé.
+NbOfProductIsLowerThanNoPb=Vous n'avez que %s produits/services en base. Ceci ne requiert pas d'optimisation particulière.
 ##### Module password generation
 PasswordGenerationStandard=Renvoie un mot de passe généré selon l'algorithme interne de Dolibarr : 8 caractères, chiffres et caractères en minuscules mélangés.
 PasswordGenerationNone=Ne propose pas de mots de passe générés. Le mot de passe est à saisir manuellement.