diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php
index bb2c5dfba7aed804f37226bd416b2e73336958fe..b892d23cb8fb609cd258768e722df0aa31cb0b9c 100644
--- a/htdocs/admin/menus/edit.php
+++ b/htdocs/admin/menus/edit.php
@@ -62,14 +62,31 @@ if (isset($_GET["action"]) && $_GET["action"] == 'update')
 {	
 	if (! $_POST['cancel'])
 	{		
-
-		$sql = "UPDATE ".MAIN_DB_PREFIX."menu as m";
-		$sql.="	SET m.titre = '".$_POST['titre']."', m.leftmenu = '".$_POST['leftmenu']."', m.url = '".$_POST['url']."', m.langs = '".$_POST['langs']."', m.right = '".$_POST['right']."',m.target = '".$_POST['target']."', m.user = ".$_POST['user'];
-		$sql.=" WHERE m.rowid = ".$_POST['menuId'];
-		$resql=$db->query($sql);
-		if ($resql > 0)
+		$menu = new Menubase($db);
+		$result=$menu->fetch($_POST['menuId']);
+		if ($result > 0)
+		{
+			$menu->titre=$_POST['titre'];
+			$menu->leftmenu=$_POST['leftmenu'];
+			$menu->url=$_POST['url'];
+			$menu->langs=$_POST['langs'];
+			$menu->position=$_POST['position'];
+			$menu->perms=$_POST['perms'];
+			$menu->target=$_POST['target'];
+			$menu->user=$_POST['user'];
+			$result=$menu->update($user);
+			if ($result > 0)
+			{
+				$mesg='<div class="ok">'.$langs->trans("RecordModifiedSuccessfully").'</div>';
+			}
+			else
+			{
+				$mesg='<div class="error">'.$menu->error.'</div>';
+			}
+		}
+		else
 		{
-			$mesg='<div class="ok">'.$langs->trans("RecordModifiedSuccessfully").'</div>';
+			$mesg='<div class="error">'.$menu->error.'</div>';
 		}
 		$_GET["menuId"]=$_POST['menuId'];
 		$_GET["action"]="edit";
@@ -138,14 +155,14 @@ if (isset($_GET["action"]) && $_GET["action"] == 'add')
 	{		
 		$sql = "SELECT max(m.rowid) as maxId FROM ".MAIN_DB_PREFIX."menu as m";
 		$result = $db->query($sql);
-		$lastMenu = $db->fetch_object($result);	
-		$rowid = $lastMenu->maxId + 1;
+		$obj = $db->fetch_object($result);	
+		$rowid = $obj->maxId + 1;
 		
 		// On prend le max de toutes celles qui auront le meme pere fk_menu
-		$sql = "SELECT max(m.order) as maxOrder FROM ".MAIN_DB_PREFIX."menu as m WHERE m.fk_menu = ".$_POST['menuId'];
+		$sql = "SELECT max(m.position) as maxOrder FROM ".MAIN_DB_PREFIX."menu as m WHERE m.fk_menu = ".$_POST['menuId'];
 		$result = $db->query($sql);
-		$lastMenu = $db->fetch_object($result);	
-		if ($lastMenu) $order = $lastMenu->maxOrder + 1;
+		$obj = $db->fetch_object($result);	
+		if ($obj) $position = $obj->maxOrder + 1;
 		else
 		{
 			dolibarr_print_error($db);
@@ -161,8 +178,8 @@ if (isset($_GET["action"]) && $_GET["action"] == 'add')
 
 	if (! $error)
 	{		
-		$sql = "INSERT INTO ".MAIN_DB_PREFIX."menu(rowid,menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, `right`, target, user, `order`)";
-		$sql.=" VALUES(".$rowid.",'".$_POST['menu_handler']."','".$_POST['type']."','".$_POST['mainmenu']."','".$_POST['leftmenu']."',".$_POST['menuId'].",'".$_POST['url']."','".$_POST['titre']."','".$_POST['level']."','".$_POST['langs']."','".$_POST['right']."','".$_POST['target']."',".$_POST['user'].",0)";
+		$sql = "INSERT INTO ".MAIN_DB_PREFIX."menu(rowid,menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms`, target, user, position)";
+		$sql.=" VALUES(".$rowid.",'".$_POST['menu_handler']."','".$_POST['type']."','".$_POST['mainmenu']."','".$_POST['leftmenu']."',".$_POST['menuId'].",'".$_POST['url']."','".$_POST['titre']."','".$_POST['level']."','".$_POST['langs']."','".$_POST['perms']."','".$_POST['target']."',".$_POST['user'].", ".$position.")";
 		
 		dolibarr_syslog("edit: insert menu entry sql=".$sql);
 		$result=$db->query($sql);		
@@ -321,13 +338,22 @@ if (isset($_GET["action"]) && $_GET["action"] == 'create')
 	print '<td><input type="text" size="10" name="menuId" value="'.$parent_rowid.'"></td>';
 	print '<td>'.$langs->trans('DetailMenuIdParent').'</td></tr>';
 
-	//Handler
+	// Handler
 	print '<tr><td><b>'.$langs->trans('MenuHandler').'</b></td>';
 	print '<td>';
 	print $htmladmin->select_menu_families($menu_handler,'menu_handler',$dirleft);
 	print '</td>';
 	print '<td>'.$langs->trans('DetailMenuHandler').'</td></tr>';
 
+	//User
+	print '<tr><td nowrap="nowrap"><b>'.$langs->trans('MenuForUsers').'</b></td>';
+	print '<td><select class="flat" name="user">';
+	print '<option value="2" selected>'.$langs->trans("AllMenus").'</option>';
+	print '<option value="0">'.$langs->trans('Interne').'</option>';
+	print '<option value="1">'.$langs->trans('Externe').'</option>';
+	print '</select></td>';
+	print '<td>'.$langs->trans('DetailUser').'</td></tr>';
+
 	// Type
 	print '<tr><td><b>'.$langs->trans('Type').'</b></td><td>';
 	print '<select name="type" class="flat">';
@@ -337,27 +363,26 @@ if (isset($_GET["action"]) && $_GET["action"] == 'create')
 	print '</select>';
 	//	print '<input type="text" size="50" name="type" value="'.$type.'">';
 	print '</td><td>'.$langs->trans('DetailType').'</td></tr>';
-	//User
-	print '<tr><td nowrap="nowrap"><b>'.$langs->trans('MenuForUsers').'</b></td>';
-	print '<td><select class="flat" name="user">';
-	print '<option value="2" selected>'.$langs->trans("AllMenus").'</option>';
-	print '<option value="0">'.$langs->trans('Interne').'</option>';
-	print '<option value="1">'.$langs->trans('Externe').'</option>';
-	print '</select></td>';
-	print '<td>'.$langs->trans('DetailUser').'</td></tr>';
+
 	//Titre
 	print '<tr><td><b>'.$langs->trans('Title').'</b></td><td><input type="text" size="30" name="titre" value=""></td><td>'.$langs->trans('DetailTitre').'</td></tr>';
+
 	//Langs
 	print '<tr><td>'.$langs->trans('LangFile').'</td><td><input type="text" size="30" name="langs" value="'.$parent_langs.'"></td><td>'.$langs->trans('DetailLangs').'</td></tr>';
+
+	//Position
+	print '<tr><td>'.$langs->trans('Position').'</td><td><input type="text" size="5" name="position" value="'.$parent_langs.'"></td><td>'.$langs->trans('DetailPosition').'</td></tr>';
+
 	//URL
 	print '<tr><td><b>'.$langs->trans('URL').'</b></td><td><input type="text" size="60" name="url" value=""></td><td>'.$langs->trans('DetailUrl').'</td></tr>';
+
 	//Target
 	print '<tr><td>'.$langs->trans('Target').'</td><td><select class="flat" name="target">';
 	print '<option value=""'.($menu->target==""?' selected="true"':'').'>'.$langs->trans('').'</option>';
 	print '<option value="_new"'.($menu->target=="_new"?' selected="true"':'').'>'.$langs->trans('_new').'</option>';
 	print '</select></td></td><td>'.$langs->trans('DetailTarget').'</td></tr>';
-	//Right
-	print '<tr><td>'.$langs->trans('Rights').'</td><td><input type="text" size="60" name="right" value=""></td><td>'.$langs->trans('DetailRight').'</td></tr>';
+	//Perms
+	print '<tr><td>'.$langs->trans('Rights').'</td><td><input type="text" size="60" name="perms" value=""></td><td>'.$langs->trans('DetailRight').'</td></tr>';
 
 	// Boutons
 	print '<tr><td colspan="3" align="center"><input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
@@ -395,24 +420,28 @@ elseif (isset($_GET["action"]) && $_GET["action"] == 'edit')
 	// Handler
 	print '<tr><td>'.$langs->trans('MenuHandler').'</td><td>'.$menu->menu_handler.'</td><td>'.$langs->trans('DetailMenuHandler').'</td></tr>';
 
-	// user
+	// Type
+	print '<tr><td>'.$langs->trans('Type').'</td><td>'.$menu->type.'</td><td>'.$langs->trans('DetailType').'</td></tr>';
+
+	// User
 	print '<tr><td nowrap="nowrap">'.$langs->trans('MenuForUsers').'</td><td><select class="flat" name="user">';
 	print '<option value="2"'.($menu->user==2?' selected="true"':'').'>'.$langs->trans("All").'</option>';
 	print '<option value="0"'.($menu->user==0?' selected="true"':'').'>'.$langs->trans('Interne').'</option>';
 	print '<option value="1"'.($menu->user==1?' selected="true"':'').'>'.$langs->trans('Externe').'</option>';
 	print '</select></td><td>'.$langs->trans('DetailUser').'</td></tr>';
 
-	// Type
-	print '<tr><td>'.$langs->trans('Type').'</td><td>'.$menu->type.'</td><td>'.$langs->trans('DetailType').'</td></tr>';
-
 	// Niveau
 	//print '<tr><td>'.$langs->trans('Level').'</td><td>'.$menu->level.'</td><td>'.$langs->trans('DetailLevel').'</td></tr>';
 
 	// Titre
 	print '<tr><td>'.$langs->trans('Title').'</td><td><input type="text" size="30" name="titre" value="'.$menu->titre.'"></td><td>'.$langs->trans('DetailTitre').'</td></tr>';
+
 	// Langs
 	print '<tr><td>'.$langs->trans('LangFile').'</td><td><input type="text" size="30" name="langs" value="'.$menu->langs.'"></td><td>'.$langs->trans('DetailLangs').'</td></tr>';
 
+	// Position
+	print '<tr><td>'.$langs->trans('Position').'</td><td><input type="text" size="5" name="position" value="'.$menu->position.'"></td><td>'.$langs->trans('DetailPosition').'</td></tr>';
+
 	// Url
 	print '<tr><td>'.$langs->trans('URL').'</td><td><input type="text" size="60" name="url" value="'.$menu->url.'"></td><td>'.$langs->trans('DetailUrl').'</td></tr>';
 
@@ -422,8 +451,8 @@ elseif (isset($_GET["action"]) && $_GET["action"] == 'edit')
 	print '<option value="_new"'.($menu->target=="_new"?' selected="true"':'').'>'.$langs->trans('_new').'</option>';
 	print '</select></td></td><td>'.$langs->trans('DetailTarget').'</td></tr>';
 	
-	// Right
-	print '<tr><td>'.$langs->trans('Rights').'</td><td><input type="text" size="60" name="right" value="'.$menu->right.'"></td><td>'.$langs->trans('DetailRight').'</td></tr>';
+	// Perms
+	print '<tr><td>'.$langs->trans('Rights').'</td><td><input type="text" size="60" name="perms" value="'.$menu->perms.'"></td><td>'.$langs->trans('DetailRight').'</td></tr>';
 
 	// Bouton			
 	print '<tr><td colspan="3" align="center"><input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php
index ae2d2a54de6fa71bbd0b35b651bcbfc61f464469..068e00389a61e5a5cc7252c9958f8aec42e26b9d 100644
--- a/htdocs/admin/menus/index.php
+++ b/htdocs/admin/menus/index.php
@@ -58,44 +58,44 @@ if ($_REQUEST["menu_handler"]) $menu_handler=$_REQUEST["menu_handler"];
 if (isset($_GET["action"]) && $_GET["action"] == 'up')
 {
 
-	$sql = "SELECT m.rowid, m.order FROM ".MAIN_DB_PREFIX."menu as m";
+	$sql = "SELECT m.rowid, m.position FROM ".MAIN_DB_PREFIX."menu as m";
 	$sql.= " WHERE m.rowid = ".$_GET["menuId"];
 	$result = $db->query($sql);	
 	
-	$num = $db->num_rows();
+	$num = $db->num_rows($result);
 	$i = 0;
 	
 	while($i < $num)
 	{
 		$obj = $db->fetch_object($result);
 		$precedent['rowid'] = $obj->rowid;
-		$precedent['order'] = $obj->order;
+		$precedent['order'] = $obj->position;
 		$i++;
 	}
 	
 	// Menu top
-	$sql = "SELECT m.rowid, m.order FROM ".MAIN_DB_PREFIX."menu as m";
-	$sql.= " WHERE m.order = ".($precedent['order'] - 1)." AND m.type = 'top'";
+	$sql = "SELECT m.rowid, m.position FROM ".MAIN_DB_PREFIX."menu as m";
+	$sql.= " WHERE m.position = ".($precedent['order'] - 1)." AND m.type = 'top'";
 	$sql.= " AND menu_handler='".$menu_handler_top."'";
 	$result = $db->query($sql);	
 	
-	$num = $db->num_rows();
+	$num = $db->num_rows($result);
 	$i = 0;
 	
 	while($i < $num)
 	{
 		$obj = $db->fetch_object($result);
 		$suivant['rowid'] = $obj->rowid;
-		$suivant['order'] = $obj->order;
+		$suivant['order'] = $obj->position;
 		$i++;
 	}
 	
 	$sql = "UPDATE ".MAIN_DB_PREFIX."menu as m";
-	$sql.= " SET m.order = ".$suivant['order'];
+	$sql.= " SET m.position = ".$suivant['order'];
 	$sql.= " WHERE m.rowid = ".$precedent['rowid'].""; // Monte celui select
 	$db->query($sql);	
 	$sql = "UPDATE ".MAIN_DB_PREFIX."menu as m";
-	$sql.= " SET m.order = ".$precedent['order'];
+	$sql.= " SET m.position = ".$precedent['order'];
 	$sql.= " WHERE m.rowid = ".$suivant['rowid'].""; // Descend celui du dessus
 	$db->query($sql);		
 }
@@ -103,39 +103,39 @@ if (isset($_GET["action"]) && $_GET["action"] == 'up')
 if (isset($_GET["action"]) && $_GET["action"] == 'down')
 {
 
-	$sql = "SELECT m.rowid, m.order FROM ".MAIN_DB_PREFIX."menu as m WHERE m.rowid = ".$_GET["menuId"];
+	$sql = "SELECT m.rowid, m.position FROM ".MAIN_DB_PREFIX."menu as m WHERE m.rowid = ".$_GET["menuId"];
 	$result = $db->query($sql);	
 	
-	$num = $db->num_rows();
+	$num = $db->num_rows($result);
 	$i = 0;
 	
 	while($i < $num)
 	{
 		$obj = $db->fetch_object($result);
 		$precedent['rowid'] = $obj->rowid;
-		$precedent['order'] = $obj->order;
+		$precedent['order'] = $obj->position;
 		$i++;
 	}
 	
-	$sql = "SELECT m.rowid, m.order";
+	$sql = "SELECT m.rowid, m.position";
 	$sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
-	$sql.= " WHERE m.order = ".($precedent['order'] + 1)." AND type='top'";
+	$sql.= " WHERE m.position = ".($precedent['order'] + 1)." AND type='top'";
 	$result = $db->query($sql);	
 	
-	$num = $db->num_rows();
+	$num = $db->num_rows($result);
 	$i = 0;
 	
 	while($i < $num)
 	{
 		$obj = $db->fetch_object($result);
 		$suivant['rowid'] = $obj->rowid;
-		$suivant['order'] = $obj->order;
+		$suivant['order'] = $obj->position;
 		$i++;
 	}
 	
-	$sql = "UPDATE ".MAIN_DB_PREFIX."menu as m SET m.order = ".$suivant['order']." WHERE m.rowid = ".$precedent['rowid'].""; // Monte celui select
+	$sql = "UPDATE ".MAIN_DB_PREFIX."menu as m SET m.position = ".$suivant['order']." WHERE m.rowid = ".$precedent['rowid'].""; // Monte celui select
 	$db->query($sql);	
-	$sql = "UPDATE ".MAIN_DB_PREFIX."menu as m SET m.order = ".$precedent['order']." WHERE m.rowid = ".$suivant['rowid'].""; // Descend celui du dessus
+	$sql = "UPDATE ".MAIN_DB_PREFIX."menu as m SET m.position = ".$precedent['order']." WHERE m.rowid = ".$suivant['rowid'].""; // Descend celui du dessus
 	$db->query($sql);		
 }    
 
@@ -277,7 +277,7 @@ if ($conf->use_javascript_ajax)
 	$sql = "SELECT m.rowid, m.fk_menu, m.titre, m.langs";
 	$sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
 	$sql.= " WHERE menu_handler='".$menu_handler."'";
-	$sql.= " ORDER BY m.order, m.rowid";
+	$sql.= " ORDER BY m.position, m.rowid";
 	$res  = $db->query($sql);
 
 	if ($res)
diff --git a/htdocs/includes/menus/barre_top/auguria_backoffice.php b/htdocs/includes/menus/barre_top/auguria_backoffice.php
index 0e331139e743a558872d3875d93454cf8b7406d7..914c21dea1a85ece298f27f137d05814a6da270c 100644
--- a/htdocs/includes/menus/barre_top/auguria_backoffice.php
+++ b/htdocs/includes/menus/barre_top/auguria_backoffice.php
@@ -86,7 +86,7 @@ class MenuTop {
 
         
         $menuArbo = new Menubase($this->db,'auguria','top');
- 		$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu']);
+ 		$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu'], 'auguria');
         
         print '<ul>';
         
diff --git a/htdocs/includes/menus/barre_top/auguria_frontoffice.php b/htdocs/includes/menus/barre_top/auguria_frontoffice.php
index e59d986566ea042d943688d72a96416cf92d7794..3ca9800195d85ea3dd9e3fc0a16d7c75c80d1787 100644
--- a/htdocs/includes/menus/barre_top/auguria_frontoffice.php
+++ b/htdocs/includes/menus/barre_top/auguria_frontoffice.php
@@ -86,7 +86,7 @@ class MenuTop {
 
         
         $menuArbo = new Menubase($this->db,'auguria','top');
- 		$tabMenu = $menuArbo->menutopCharger(1,$_SESSION['mainmenu']);
+ 		$tabMenu = $menuArbo->menutopCharger(1,$_SESSION['mainmenu'], 'auguria');
         
         print '<ul>';
         
diff --git a/htdocs/includes/menus/barre_top/eldy_backoffice.php b/htdocs/includes/menus/barre_top/eldy_backoffice.php
index 98acb0fdf4ed4624e70304acaba23509414bab5d..f1ecc0ff83e8da505715d697fd3c3feebc494c1e 100644
--- a/htdocs/includes/menus/barre_top/eldy_backoffice.php
+++ b/htdocs/includes/menus/barre_top/eldy_backoffice.php
@@ -429,7 +429,7 @@ class MenuTop {
        	require_once(DOL_DOCUMENT_ROOT."/lib/menubase.class.php");
 
         $menuArbo = new Menubase($this->db,'eldy','top');
- 		$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu']);
+ 		$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu'],'eldy');
         for($i=0;$i<count($tabMenu);$i++)
         {
         	if ($tabMenu[$i]['right'] == true)
diff --git a/htdocs/includes/menus/barre_top/eldy_frontoffice.php b/htdocs/includes/menus/barre_top/eldy_frontoffice.php
index 3c34204bc1f683ec355eb93952a0dfff3ae5c17c..2bdbe33517f2c0e189e8e5262b839b7154438f85 100644
--- a/htdocs/includes/menus/barre_top/eldy_frontoffice.php
+++ b/htdocs/includes/menus/barre_top/eldy_frontoffice.php
@@ -375,7 +375,7 @@ class MenuTop {
        	require_once(DOL_DOCUMENT_ROOT."/lib/menubase.class.php");
 
         $menuArbo = new Menubase($this->db,'eldy','top');
- 		$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu']);
+ 		$tabMenu = $menuArbo->menutopCharger(1,$_SESSION['mainmenu'],'eldy');
         for($i=0;$i<count($tabMenu);$i++)
         {
         	if ($tabMenu[$i]['right'] == true)
diff --git a/htdocs/includes/menus/barre_top/empty.php b/htdocs/includes/menus/barre_top/empty.php
index ef0d19ed5fbe7ee384a299790a05bbdb7d2132cf..46998114a5f0ec874bfdd68b9b4d97bbc2246b67 100644
--- a/htdocs/includes/menus/barre_top/empty.php
+++ b/htdocs/includes/menus/barre_top/empty.php
@@ -71,7 +71,7 @@ class MenuTop {
        	require_once(DOL_DOCUMENT_ROOT."/lib/menubase.class.php");
 
         $menuArbo = new Menubase($this->db,'eldy','top');
- 		$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu']);
+ 		$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu'],'');
         for($i=0;$i<count($tabMenu);$i++)
         {
         	if ($tabMenu[$i]['right'] == true)
diff --git a/htdocs/includes/menus/barre_top/rodolphe.php b/htdocs/includes/menus/barre_top/rodolphe.php
index 169fa20eec19d7b290b3e024dee80637ba953bd9..0c90634d1fd318a478333a463697b6e6cad25a88 100644
--- a/htdocs/includes/menus/barre_top/rodolphe.php
+++ b/htdocs/includes/menus/barre_top/rodolphe.php
@@ -377,7 +377,7 @@ class MenuTop {
        	require_once(DOL_DOCUMENT_ROOT."/lib/menubase.class.php");
 
         $menuArbo = new Menubase($this->db,'rodolphe','top');
- 		$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu']);
+ 		$tabMenu = $menuArbo->menutopCharger(1,$_SESSION['mainmenu'],'rodolphe');
         for($i=0;$i<count($tabMenu);$i++)
         {
         	if ($tabMenu[$i]['right'] == true)
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index b87887650e3e3cb81b1adb219157e1ed7529e45d..7f4d241cb78e45f20dfff401affb13125480f02a 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -46,6 +46,7 @@ MenuSetup=Menus management setup
 MenuLimits=Limits and accuracy
 MenuIdParent=Parent menu id
 DetailMenuIdParent=Id of parent menu (0 for a top menu)
+DetailPosition=Sort number to define menu position
 PersonalizedMenusNotSupported=Personalized menus not supported
 AllMenus=All
 NotConfigured=Not configured
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 43dd9dbf78cc6d5df11f3d8431007b9e30215ccf..aee11af84fb2970288bfaae89189882796caf87c 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -45,6 +45,7 @@ UserSetup=Configuration gestion des utilisateurs
 MenuSetup=Administration des menus par base de donn�es
 MenuIdParent=Id du menu parent
 DetailMenuIdParent=Id du menu parent (0 pour un menu du haut)
+DetailPosition=Num�ro d'ordre d�terminant la position du menu
 MenuLimits=Limites et pr�cision
 PersonalizedMenusNotSupported=Menus personalis�s non g�r�s
 AllMenus=Tous
diff --git a/htdocs/lib/menubase.class.php b/htdocs/lib/menubase.class.php
index 2f817b470b7d40dcdee527db6811617b16f7944d..4b3b4155184a8b27961c98688610484966d8d687 100644
--- a/htdocs/lib/menubase.class.php
+++ b/htdocs/lib/menubase.class.php
@@ -42,14 +42,14 @@ class Menubase
 	var $type;
 	var $mainmenu;
 	var $fk_menu;
-	var $order;
+	var $position;
 	var $url;
 	var $target;
 	var $titre;
 	var $langs;
 	var $level;
 	var $leftmenu;
-	var $right;
+	var $perms;
 	var $user;
 	var $tms;
 
@@ -82,14 +82,14 @@ class Menubase
 		$this->type=trim($this->type);
 		$this->mainmenu=trim($this->mainmenu);
 		$this->fk_menu=trim($this->fk_menu);
-		$this->order=trim($this->order);
+		$this->position=trim($this->position);
 		$this->url=trim($this->url);
 		$this->target=trim($this->target);
 		$this->titre=trim($this->titre);
 		$this->langs=trim($this->langs);
 		$this->level=trim($this->level);
 		$this->leftmenu=trim($this->leftmenu);
-		$this->right=trim($this->right);
+		$this->perms=trim($this->perms);
 		$this->user=trim($this->user);
 
 		// Check parameters
@@ -101,31 +101,29 @@ class Menubase
 		$sql.= "type,";
 		$sql.= "mainmenu,";
 		$sql.= "fk_menu,";
-		$sql.= "order,";
+		$sql.= "position,";
 		$sql.= "url,";
 		$sql.= "target,";
 		$sql.= "titre,";
 		$sql.= "langs,";
 		$sql.= "level,";
 		$sql.= "leftmenu,";
-		$sql.= "right,";
-		$sql.= "user,";
-		$sql.= "tms";
+		$sql.= "perms,";
+		$sql.= "user";
         $sql.= ") VALUES (";
 		$sql.= " '".$this->menu_handler."',";
 		$sql.= " '".$this->type."',";
 		$sql.= " '".$this->mainmenu."',";
 		$sql.= " '".$this->fk_menu."',";
-		$sql.= " '".$this->order."',";
+		$sql.= " '".$this->position."',";
 		$sql.= " '".$this->url."',";
 		$sql.= " '".$this->target."',";
 		$sql.= " '".$this->titre."',";
 		$sql.= " '".$this->langs."',";
 		$sql.= " '".$this->level."',";
 		$sql.= " '".$this->leftmenu."',";
-		$sql.= " '".$this->right."',";
-		$sql.= " '".$this->user."',";
-		$sql.= " ".$this->db->idate($this->tms)."";
+		$sql.= " '".$this->perms."',";
+		$sql.= " '".$this->user."'";
 		$sql.= ")";
 
 	   	dolibarr_syslog("Menu::create sql=".$sql, LOG_DEBUG);
@@ -167,14 +165,14 @@ class Menubase
 		$this->type=trim($this->type);
 		$this->mainmenu=trim($this->mainmenu);
 		$this->fk_menu=trim($this->fk_menu);
-		$this->order=trim($this->order);
+		$this->position=trim($this->position);
 		$this->url=trim($this->url);
 		$this->target=trim($this->target);
 		$this->titre=trim($this->titre);
 		$this->langs=trim($this->langs);
 		$this->level=trim($this->level);
 		$this->leftmenu=trim($this->leftmenu);
-		$this->right=trim($this->right);
+		$this->perms=trim($this->perms);
 		$this->user=trim($this->user);
 
 		// Check parameters
@@ -186,16 +184,15 @@ class Menubase
 		$sql.= " type='".$this->type."',";
 		$sql.= " mainmenu='".addslashes($this->mainmenu)."',";
 		$sql.= " fk_menu='".$this->fk_menu."',";
-		$sql.= " order='".$this->order."',";
+		$sql.= " position='".$this->position."',";
 		$sql.= " url='".addslashes($this->url)."',";
 		$sql.= " target='".addslashes($this->target)."',";
 		$sql.= " titre='".addslashes($this->titre)."',";
 		$sql.= " langs='".addslashes($this->langs)."',";
 		$sql.= " level='".$this->level."',";
 		$sql.= " leftmenu='".addslashes($this->leftmenu)."',";
-		$sql.= " right='".addslashes($this->right)."',";
-		$sql.= " user='".$this->user."',";
-		$sql.= " tms=".$this->db->idate($this->tms)."";
+		$sql.= " perms='".addslashes($this->perms)."',";
+		$sql.= " user='".$this->user."'";
         $sql.= " WHERE rowid=".$this->id;
 
         dolibarr_syslog("Menu::update sql=".$sql, LOG_DEBUG);
@@ -237,14 +234,14 @@ class Menubase
 		$sql.= " t.type,";
 		$sql.= " t.mainmenu,";
 		$sql.= " t.fk_menu,";
-		$sql.= " t.order,";
+		$sql.= " t.position,";
 		$sql.= " t.url,";
 		$sql.= " t.target,";
 		$sql.= " t.titre,";
 		$sql.= " t.langs,";
 		$sql.= " t.level,";
 		$sql.= " t.leftmenu,";
-		$sql.= " t.right,";
+		$sql.= " t.perms,";
 		$sql.= " t.user,";
 		$sql.= " ".$this->db->pdate('t.tms')."";
         $sql.= " FROM ".MAIN_DB_PREFIX."menu as t";
@@ -264,14 +261,14 @@ class Menubase
 				$this->type = $obj->type;
 				$this->mainmenu = $obj->mainmenu;
 				$this->fk_menu = $obj->fk_menu;
-				$this->order = $obj->order;
+				$this->position = $obj->position;
 				$this->url = $obj->url;
 				$this->target = $obj->target;
 				$this->titre = $obj->titre;
 				$this->langs = $obj->langs;
 				$this->level = $obj->level;
 				$this->leftmenu = $obj->leftmenu;
-				$this->right = $obj->right;
+				$this->perms = $obj->perms;
 				$this->user = $obj->user;
 				$this->tms = $obj->tms;
             }
@@ -332,14 +329,14 @@ class Menubase
 		$this->type='';
 		$this->mainmenu='';
 		$this->fk_menu='';
-		$this->order='';
+		$this->position='';
 		$this->url='';
 		$this->target='';
 		$this->titre='';
 		$this->langs='';
 		$this->level='';
 		$this->leftmenu='';
-		$this->right='';
+		$this->perms='';
 		$this->user='';
 		$this->tms='';
 	}
@@ -363,12 +360,12 @@ class Menubase
 
 		$data[] = array ($menutop->rowid,-1,$this->mainmenu);
 
-		$sql = "SELECT m.rowid, m.fk_menu, m.url, m.titre, m.langs, m.right, m.target, m.mainmenu, m.leftmenu";
+		$sql = "SELECT m.rowid, m.fk_menu, m.url, m.titre, m.langs, m.perms, m.target, m.mainmenu, m.leftmenu";
 		$sql.= " FROM " . MAIN_DB_PREFIX . "menu as m";
 		$sql.= " WHERE m.menu_handler= '".$this->menu_handler."'";
 		if($type_user == 0) $sql.= " AND m.user <> 1";
 		else $sql.= " AND m.user > 0";
-		$sql.= " ORDER BY m.order, m.rowid";
+		$sql.= " ORDER BY m.position, m.rowid";
 
 		$res = $this->db->query($sql);
 		if ($res)
@@ -513,29 +510,29 @@ class Menubase
 	}
 	
 	
-	function menutopCharger($type_user,$mainmenu)
+	function menutopCharger($type_user, $mainmenu, $menu_handler)
 	{
 		global $langs, $user, $conf;
 		
-		$sql = "SELECT m.rowid, m.mainmenu, m.titre, m.url, m.langs, m.right";
+		$sql = "SELECT m.rowid, m.mainmenu, m.titre, m.url, m.langs, m.perms";
 		$sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
 		$sql.= " WHERE m.type = 'top'"; 
-		$sql.= " AND m.menu_handler= '".$this->menu_handler."'";
+		$sql.= " AND m.menu_handler in('".$menu_handler."','all')";
 		if($type_user == 0) $sql.= " AND m.user <> 1";
 		else $sql.= " AND m.user > 0";
-		$sql.= " ORDER BY m.order";
+		$sql.= " ORDER BY m.menu_handler DESC, m.position";
 
-		$result = $this->db->query($sql);
-		if ($result)
+		$resql = $this->db->query($sql);
+		if ($resql)
 		{
-			$numa = $this->db->num_rows();
+			$numa = $this->db->num_rows($resql);
 
 			$a = 0;
 			$b = 0;
 			while ($a < $numa)
 			{
 				// Affichage entete menu
-				$objm = $this->db->fetch_object($result);
+				$objm = $this->db->fetch_object($resql);
 				
 				if ($this->verifConstraint($objm->rowid))
 		        {
@@ -550,9 +547,9 @@ class Menubase
 		        	
 		        	$right = true;
 		        	
-		        	if ($objm->right)
+		        	if ($objm->perms)
 		        	{
-		        		$str = "if(!(".$objm->right.")) \$right = false;";
+		        		$str = "if(!(".$objm->perms.")) \$right = false;";
 		        		eval($str);
 		        	}
 		        	
diff --git a/mysql/migration/2.2.0-2.4.0.sql b/mysql/migration/2.2.0-2.4.0.sql
index 8b59448eceaaf87f36b75205d44fc965618c3272..ec09455b676fbcf7382acdafefa286aa427f8e04 100644
--- a/mysql/migration/2.2.0-2.4.0.sql
+++ b/mysql/migration/2.2.0-2.4.0.sql
@@ -32,4 +32,6 @@ alter table llx_menu modify rowid integer AUTO_INCREMENT NOT NULL PRIMARY KEY;
 ALTER TABLE llx_menu_const ADD CONSTRAINT fk_menu_const_fk_menu FOREIGN KEY (fk_menu) REFERENCES llx_menu (rowid);
 
 alter table llx_menu modify user integer NOT NULL default '0';
+alter table llx_menu change `order` position integer NOT NULL;
+alter table llx_menu change `right` perms varchar(255);
 alter table llx_menu add column tms timestamp;
diff --git a/mysql/tables/llx_menu.sql b/mysql/tables/llx_menu.sql
index 2b7c0a67ac6633405a76ffd3c81679f6371a668b..d7bdea13b8bf3a7a57c729c2fede2e94d6181bcb 100644
--- a/mysql/tables/llx_menu.sql
+++ b/mysql/tables/llx_menu.sql
@@ -28,7 +28,7 @@ CREATE TABLE `llx_menu` (
 
 	mainmenu		varchar(100) NOT NULL,				-- Name family/module (home, companies, ...)
 	fk_menu			int(11) NOT NULL,					-- 0 or Id of mother menu line
-	order			tinyint(4) NOT NULL,				-- Order of entry
+	position		integer NOT NULL,				-- Sort order of entry
 
 	url				varchar(255) NOT NULL,				-- Relative (or absolute) url to go
 	target			varchar(100) NULL,					-- Target of Url link
@@ -39,7 +39,7 @@ CREATE TABLE `llx_menu` (
 	level			tinyint(1),							-- Used by auguria menu only. Do not use.
 
 	leftmenu		varchar(100) NULL,					-- Condition to show or hide
-	right			varchar(255),						-- Condition to show enabled or disabled
+	perms			varchar(255),						-- Condition to show enabled or disabled
 	user			integer NOT NULL default '0',	    -- 0 if menu for all users, 1 for external only, 2 for internal only
 	tms				timestamp
 ) type=innodb;