diff --git a/ChangeLog b/ChangeLog
index f72d5f3e5a481c392b5a9332011ae5b8e3a321d4..460e2dc73aeabf50b2a20e7efe4ea1d9e87de84e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -57,6 +57,7 @@ For users:
 - New: Added ODT Template tag {object_total_discount}
 - New: Add new import options: Third parties bank details, warehouses and stocks, categories and suppliers prices
 - New: English bank account need a bank code (called sort code) to identify an account. 
+- New: Can choose menu entry to show with external site module.
 - New: Add hidden option MAIN_PDF_MARGIN_LEFT, MAIN_PDF_MARGIN_RIGHT, MAIN_PDF_MARGIN_TOP, MAIN_PDF_MARGIN_BOTTOM
        to force margins of generated PDF.
 New experimental modules:
@@ -87,6 +88,7 @@ For developers:
 - New: Add ChromePHP output into syslog module.
 - New: Add PRODUCT_PRICE_MODIFY trigger.
 - New: Created function to retrieve total amount of discount of an invoice/proposal...
+- New: We can use a dynamic value ($conf->global->XXX for example) into titles of menus.
 
 For translators:
 - New: Update language files (de, tr, pt, ca, es, en, fr).
diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php
index c42b220bd98ee82e17f4c009362b926a0014d9d7..d454cc3d00520e29c5889ef37c0ad84354c8624f 100644
--- a/htdocs/core/class/translate.class.php
+++ b/htdocs/core/class/translate.class.php
@@ -152,7 +152,7 @@ class Translate
 	 *  @param	string	$alt         		0 (try xx_ZZ then 1), 1 (try xx_XX then 2), 2 (try en_US or fr_FR or es_ES)
 	 * 	@param	int		$stopafterdirection	Stop when the DIRECTION tag is found (optimize speed)
 	 * 	@param	int		$forcelangdir		To force a different lang directory
-	 *	@return	int							<0 if KO, 0 if already loaded, >0 if OK
+	 *	@return	int							<0 if KO, 0 if already loaded or loading not required, >0 if OK
 	 */
 	function Load($domain,$alt=0,$stopafterdirection=0,$forcelangdir='')
 	{
@@ -164,7 +164,7 @@ class Translate
 			dol_print_error('',get_class($this)."::Load ErrorWrongParameters");
 			exit;
 		}
-		if ($this->defaultlang == 'none_NONE') return;    // Special language code to not translate keys
+		if ($this->defaultlang == 'none_NONE') return 0;    // Special language code to not translate keys
 
 		//dol_syslog("Translate::Load Start domain=".$domain." alt=".$alt." forcelangdir=".$forcelangdir." this->defaultlang=".$this->defaultlang);
 
@@ -388,7 +388,7 @@ class Translate
 		{
             $str=$this->tab_translate[$key];
 
-		    // Overwrite translation
+		    // Overwrite translation (TODO Move this at a higher level when we load tab_translate to avoid doing it for each trans call)
 		    $overwritekey='MAIN_OVERWRITE_TRANS_'.$this->defaultlang;
             if (! empty($conf->global->$overwritekey))    // Overwrite translation with key1:newstring1,key2:newstring2
             {
@@ -399,7 +399,7 @@ class Translate
                 	if ($tmparray2[0]==$key) { $str=$tmparray2[1]; break; }
                 }
             }
-            
+
             if (! preg_match('/^Format/',$key)) $str=sprintf($str,$param1,$param2,$param3,$param4);	// Replace %s and %d except for FormatXXX strings.
 
 			if ($maxsize) $str=dol_trunc($str,$maxsize);
@@ -417,8 +417,7 @@ class Translate
 		}
 		else								// Translation is not available
 		{
-			//$str=$this->getTradFromKey($key);
-			//return $this->convToOutputCharset($str);
+		    if ($key[0] == '$') { return dol_eval($key,1); }
 			return $this->getTradFromKey($key);
 		}
 	}
@@ -460,7 +459,7 @@ class Translate
 	function transnoentitiesnoconv($key, $param1='', $param2='', $param3='', $param4='')
 	{
 		global $conf;
-		
+
 		if (! empty($this->tab_translate[$key]))	// Translation is available
 		{
 		    $str=$this->tab_translate[$key];
@@ -476,14 +475,16 @@ class Translate
                 	if ($tmparray2[0]==$key) { $str=$tmparray2[1]; break; }
                 }
             }
-            
+
             if (! preg_match('/^Format/',$key)) $str=sprintf($str,$param1,$param2,$param3,$param4);	// Replace %s and %d except for FormatXXX strings.
+
+            return $str;
 		}
 		else
 		{
-			$str=$this->getTradFromKey($key);
+		    if ($key[0] == '$') { return dol_eval($key,1); }
+			return $this->getTradFromKey($key);
 		}
-		return $str;
 	}
 
 
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index 0e4ca0113bb97da55d6a65bc703b21b857d0b3bd..4422e6d64535fa1028ad4b8754acdacdb16e9f5b 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -3874,12 +3874,13 @@ function verifCond($strRights)
 
 /**
  * Replace eval function to add more security.
- * This function is called by verifCond()
+ * This function is called by verifCond() or trans() and transnoentitiesnoconv().
  *
- * @param 	string	$s		String to evaluate
- * @return	mixed			Result of eval
+ * @param 	string	$s				String to evaluate
+ * @param	int		$returnvalue	0=No return (used to execute $a=something). 1=Value of eval is returned (used to eval $something).
+ * @return	mixed					Nothing or return of eval
  */
-function dol_eval($s)
+function dol_eval($s,$returnvalue=0)
 {
 	// Only global variables can be changed by eval function and returned to caller
 	global $langs, $user, $conf;
@@ -3887,7 +3888,8 @@ function dol_eval($s)
 	global $rights;
 
 	//print $s."<br>\n";
-	eval($s);
+	if ($returnvalue) return eval('return '.$s.';');
+	else eval($s);
 }
 
 /**
diff --git a/htdocs/core/modules/modExternalSite.class.php b/htdocs/core/modules/modExternalSite.class.php
index da66f18c2cbbf2f40983bc37458e633612eaa250..cc0fa60c35a2a509d22964397e3ed44a5d3dd286 100644
--- a/htdocs/core/modules/modExternalSite.class.php
+++ b/htdocs/core/modules/modExternalSite.class.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -53,7 +53,7 @@ class modExternalSite extends DolibarrModules
 		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
 		$this->name = preg_replace('/^mod/i','',get_class($this));
 		// Module description used if translation string 'ModuleXXXDesc' not found (XXX is id value)
-		$this->description = "Include any external web site into Dolibarr menus and view it into a Dolibarr frame.";
+		$this->description = "This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame.";
 		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
 		$this->version = 'dolibarr';
 		// Key used in llx_const table to save module status enabled/disabled (XXX is id value)
@@ -63,7 +63,7 @@ class modExternalSite extends DolibarrModules
 		// Name of png file (without png) used for this module
 		$this->picto='bookmark';
 		// Call to inside lang's file
-		$this->langfiles = array("@externalsite");
+		$this->langfiles = array("externalsite");
 
 		// Data directories to create when module is enabled
 		$this->dirs = array();
@@ -76,7 +76,11 @@ class modExternalSite extends DolibarrModules
 		$this->requiredby = array();	// List of modules id to disable if this one is disabled
 
 		// Constants
-		$this->const = array();			// List of parameters
+		// List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive)
+		// Example: $this->const=array(0=>array('MYMODULE_MYNEWCONST1','chaine','myvalue','This is a constant to add',1),
+		//                             1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0)
+		// );
+		$this->const = array(0=>array('EXTERNALSITE_LABEL','chaine','ExternalSite','To declare label to use into external site menu entry', 0));
 
 		// Boxes
 		$this->boxes = array();			// List of boxes
@@ -97,18 +101,19 @@ class modExternalSite extends DolibarrModules
 		//------
 		$r=0;
 
-		$this->menu[$r]=array('fk_menu'=>0,
-													'type'=>'top',
-													'titre'=>'ExternalSites',
-													'mainmenu'=>'externalsite',
-													'url'=>'/externalsite/frames.php',
-													'langs'=>'other',
-													'position'=>100,
-													'perms'=>'',
-													'enabled'=>'$conf->externalsite->enabled',
-													'target'=>'',
-													'user'=>0
-													);
+		$this->menu[$r]=array(
+			'fk_menu'=>0,
+			'type'=>'top',
+			'titre'=>'$conf->global->EXTERNALSITE_LABEL',
+			'mainmenu'=>'externalsite',
+			'url'=>'/externalsite/frames.php',
+			'langs'=>'other',
+			'position'=>100,
+			'perms'=>'',
+			'enabled'=>'$conf->externalsite->enabled',
+			'target'=>'',
+			'user'=>0
+		);
 		$r++;
 
 	}
diff --git a/htdocs/externalsite/admin/externalsite.php b/htdocs/externalsite/admin/externalsite.php
index 59a98ded0a22831a7d2f5d69c80c1fead01787fc..dd212fdd63f3aab90a3de56637f1578bb3fbf62c 100644
--- a/htdocs/externalsite/admin/externalsite.php
+++ b/htdocs/externalsite/admin/externalsite.php
@@ -48,13 +48,15 @@ if ($action == 'update')
     $i=0;
 
     $db->begin();
-    
+
+	$label  = GETPOST('EXTERNALSITE_LABEL','alpha');
     $exturl = GETPOST('EXTERNALSITE_URL','alpha');
 
+    $i+=dolibarr_set_const($db,'EXTERNALSITE_LABEL',trim($label),'chaine',0,'',$conf->entity);
     $i+=dolibarr_set_const($db,'EXTERNALSITE_URL',trim($exturl),'chaine',0,'',$conf->entity);
     //$i+=dolibarr_set_const($db,'EXTERNALSITE_LABEL',trim($_POST["EXTERNALSITE_LABEL"]),'chaine',0,'',$conf->entity);
 
-    if ($i >= 1)
+    if ($i >= 2)
     {
         $db->commit();
         $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
@@ -75,8 +77,9 @@ llxHeader();
 
 $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
 print_fiche_titre($langs->trans("ExternalSiteSetup"),$linkback,'setup');
-print '<br>';
 
+print $langs->trans("Module100Desc")."<br>\n";
+print '<br>';
 
 print '<form name="externalsiteconfig" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
 print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@@ -89,17 +92,21 @@ print "<td>".$langs->trans("Value")."</td>";
 print "<td>".$langs->trans("Examples")."</td>";
 print "</tr>";
 
-/*print "<tr class=\"impair\">";
-print "<td>".$langs->trans("Label")."</td>";
-print "<td><input type=\"text\" class=\"flat\" name=\"EXTERNALSITE_LABEL\" value=\"". ($_POST["EXTERNALSITE_LABEL"]?$_POST["EXTERNALSITE_LABEL"]:$conf->global->EXTERNALSITE_LABEL) . "\" size=\"40\"></td>";
-print "<td>My menu";
+$var=true;
+
+$var=!$var;
+print "<tr ".$bc[$var].">";
+print '<td class="fieldrequired">'.$langs->trans("Label")."</td>";
+print "<td><input type=\"text\" class=\"flat\" name=\"EXTERNALSITE_LABEL\" value=\"". (GETPOST('EXTERNALSITE_LABEL','alpha')?GETPOST('EXTERNALSITE_LABEL','alpha'):((empty($conf->global->EXTERNALSITE_LABEL) || $conf->global->EXTERNALSITE_LABEL=='ExternalSite')?'':$conf->global->EXTERNALSITE_LABEL)) . "\" size=\"12\"></td>";
+print "<td>http://localhost/myurl/";
+print "<br>http://wikipedia.org/";
 print "</td>";
 print "</tr>";
-*/
 
-print "<tr class=\"impair\">";
-print "<td>".$langs->trans("ExternalSiteURL")."</td>";
-print "<td><input type=\"text\" class=\"flat\" name=\"EXTERNALSITE_URL\" value=\"". (GETPOST('EXTERNALSITE_URL','alpha')?GETPOST('EXTERNALSITE_URL','alpha'):$conf->global->EXTERNALSITE_URL) . "\" size=\"40\"></td>";
+$var=!$var;
+print "<tr ".$bc[$var].">";
+print '<td class="fieldrequired">'.$langs->trans("ExternalSiteURL")."</td>";
+print "<td><input type=\"text\" class=\"flat\" name=\"EXTERNALSITE_URL\" value=\"". (GETPOST('EXTERNALSITE_URL','alpha')?GETPOST('EXTERNALSITE_URL','alpha'):(empty($conf->global->EXTERNALSITE_URL)?'':$conf->global->EXTERNALSITE_URL)) . "\" size=\"40\"></td>";
 print "<td>http://localhost/myurl/";
 print "<br>http://wikipedia.org/";
 print "</td>";
@@ -117,7 +124,8 @@ print "</form>\n";
 
 dol_htmloutput_mesg($mesg);
 
-$db->close();
 
 llxFooter();
+
+$db->close();
 ?>
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 96985683d62554db184c44400fedf4dd5e4fe008..84a59052629bb3c3783a74cecdd4687cf0a23f0b 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -400,7 +400,7 @@ Module80Desc=Shipments and delivery order management
 Module85Name=Banks and cash
 Module85Desc=Management of bank or cash accounts
 Module100Name=External site
-Module100Desc=Include any external web site into Dolibarr menus and view it into a Dolibarr frame
+Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
 Module105Name=Mailman and SPIP
 Module105Desc=Mailman or SPIP interface for member module
 Module200Name=LDAP