diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php
index 1d07a78604421edc547a2bd4a05956b9cd2010d9..fe9547075b599a4300fb375dd0c41c777220f892 100644
--- a/htdocs/admin/boxes.php
+++ b/htdocs/admin/boxes.php
@@ -279,23 +279,15 @@ if ($resql)
 		{
 			$boxname = $regs[1];
 			$module = $regs[2];
-			
-			if (file_exists(DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php"))
-			{
-				$sourcefile = DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php";
-			}
-			else
-			{
-				$sourcefile = DOL_DOCUMENT_EXTMODULE."/".$module."/inc/boxes/".$boxname.".php";
-			}
+			$sourcefile = "/".$module."/inc/boxes/".$boxname.".php";
 		}
 		else
 		{
 			$boxname=preg_replace('/.php$/i','',$obj->file);
-			$sourcefile = DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php";
+			$sourcefile = "/includes/boxes/".$boxname.".php";
 		}
 
-		include_once($sourcefile);
+		dol_include_once($sourcefile);
 		$box=new $boxname($db,$obj->note);
 
 //		if (in_array($obj->rowid, $actives) && $box->box_multiple <> 1)
@@ -390,23 +382,15 @@ if ($resql)
 		{
 			$boxname = $regs[1];
 			$module = $regs[2];
-			
-			if (file_exists(DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php"))
-			{
-				$sourcefile = DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php";
-			}
-			else
-			{
-				$sourcefile = DOL_DOCUMENT_EXTMODULE."/".$module."/inc/boxes/".$boxname.".php";
-			}
+			$sourcefile = "/".$module."/inc/boxes/".$boxname.".php";
 		}
 		else
 		{
 			$boxname=preg_replace('/.php$/i','',$obj->file);
-			$sourcefile = DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php";
+			$sourcefile = "/includes/boxes/".$boxname.".php";
 		}
 
-		include_once($sourcefile);
+		dol_include_once($sourcefile);
 		$box=new $boxname($db,$obj->note);
 
 		if (preg_match('/^([^@]+)@([^@]+)$/i',$box->boximg))
diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php
index 86c6b0aefa8a13aca4eeb8b9a5d8f37517c595ab..80601ac6547c9d8e6b24d664fc97d392c98cbfcf 100644
--- a/htdocs/admin/modules.php
+++ b/htdocs/admin/modules.php
@@ -376,7 +376,7 @@ if ($mode != 4)
                             {
                             	if (preg_match('/^([^@]+)@([^@]+)$/i',$urlpage,$regs))
                             	{
-                            		if (file_exists(DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1]))
+                            		if (! defined('DOL_URL_EXTMODULE') || ! DOL_URL_EXTMODULE || file_exists(DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1]))
                             		{
                             			print '<a href="'.DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1].'" title="'.$langs->trans("Setup").'">'.img_picto($langs->trans("Setup"),"setup").'</a>&nbsp;';
                             		}
@@ -395,7 +395,7 @@ if ($mode != 4)
                     }
                     else if (preg_match('/^([^@]+)@([^@]+)$/i',$objMod->config_page_url,$regs))
                     {
-                    	if (file_exists(DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1]))
+                    	if (! defined('DOL_URL_EXTMODULE') || ! DOL_URL_EXTMODULE || file_exists(DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1]))
                         {
                         	print '<td align="right" valign="top"><a href="'.DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1].'" title="'.$langs->trans("Setup").'">'.img_picto($langs->trans("Setup"),"setup").'</a></td>';
                         }
diff --git a/htdocs/boxes.php b/htdocs/boxes.php
index 1f7ae1eac64db775a412eda5e8746fa366ec6944..441c73f5b0f71feeb8a1fc3bb83acc81d42db461 100644
--- a/htdocs/boxes.php
+++ b/htdocs/boxes.php
@@ -220,14 +220,7 @@ class InfoBox
 						$boxname = $regs[1];
 						$module = $regs[2];
 						
-						if (file_exists(DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php"))
-						{
-							$sourcefile = DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php";
-						}
-						else
-						{
-							$sourcefile = DOL_DOCUMENT_EXTMODULE."/".$module."/inc/boxes/".$boxname.".php";
-						}
+						dol_include_once("/".$module."/inc/boxes/".$boxname.".php");
 					}
 					else
 					{
@@ -288,23 +281,15 @@ class InfoBox
 					{
 						$boxname = $regs[1];
 						$module = $regs[2];
-						
-						if (file_exists(DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php"))
-						{
-							$sourcefile = DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php";
-						}
-						else
-						{
-							$sourcefile = DOL_DOCUMENT_EXTMODULE."/".$module."/inc/boxes/".$boxname.".php";
-						}
+						$sourcefile = "/".$module."/inc/boxes/".$boxname.".php";
 					}
 					else
 					{
 						$boxname=preg_replace('/.php$/i','',$obj->file);
-						$sourcefile = DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php";
+						$sourcefile = "/includes/boxes/".$boxname.".php";
 					}
 
-					include_once($sourcefile);
+					dol_include_once($sourcefile);
 					$box=new $boxname($db,$obj->note);
 
 					$box->rowid=$obj->rowid;
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 6499e99025c59cf534ed63c4547f6e950525b14e..e9ffe392d4df580c5151899c3262137ab349d642 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -687,11 +687,7 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
 
 				if ($facid > 0)
 				{
-					if (file_exists(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php')) {
-						require_once(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php');
-					} else {
-						require_once(DOL_DOCUMENT_EXTMODULE.'/'.$element.'/class/'.$subelement.'.class.php');
-					}
+					dol_include_once('/'.$element.'/class/'.$subelement.'.class.php');
 
 					$classname = ucfirst($subelement);
 					$srcobject = new $classname($db);
@@ -1397,11 +1393,7 @@ if ($_GET['action'] == 'create')
     		if ($element == 'propal')   { $element = 'comm/propal'; $subelement = 'propal'; }
     		if ($element == 'contract') { $element = $subelement = 'contrat'; }
 
-    		if (file_exists(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php')) {
-    			require_once(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php');
-    		} else {
-    			require_once(DOL_DOCUMENT_EXTMODULE.'/'.$element.'/class/'.$subelement.'.class.php');
-    		}
+    		dol_include_once('/'.$element.'/class/'.$subelement.'.class.php');
 
     		$classname = ucfirst($subelement);
     		$objectsrc = new $classname($db);
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index b367d9c3fd472933a68b054a0cc1b3bd47101a12..5240a60eb429e3fe4617a5ccd179b4899920921b 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -1284,38 +1284,22 @@ class CommonObject
 				$daofile 	= 'dao_'.$module.'.class.php';
 				$pathroot	= '';
 				
-				// Include class and library of thirdparty module
-				if (file_exists(DOL_DOCUMENT_ROOT.$path.$actionfile) &&	file_exists(DOL_DOCUMENT_ROOT.$path.$daofile))
-				{
-					$pathroot = DOL_DOCUMENT_ROOT;
-				}
-				else if (file_exists(DOL_DOCUMENT_EXTMODULE.$path.$actionfile) && file_exists(DOL_DOCUMENT_EXTMODULE.$path.$daofile))
-				{
-					$pathroot = DOL_DOCUMENT_EXTMODULE;
-				}
-				
-				if ($pathroot)
-				{
-					// Include actions class (controller)
-					require_once($pathroot.$path.$actionfile);
+				// Include actions class (controller)
+				dol_include_once($path.$actionfile);
 
-					// Include dataservice class (model)
-					require_once($pathroot.$path.$daofile);
+				// Include dataservice class (model)
+				dol_include_once($path.$daofile);
 
-					// Instantiate actions class (controller)
-					$controlclassname = 'Actions'.ucfirst($module);
-					$objModule = new $controlclassname($this->db);
-					$this->hooks[$objModule->module_number] = $objModule;
+				// Instantiate actions class (controller)
+				$controlclassname = 'Actions'.ucfirst($module);
+				$objModule = new $controlclassname($this->db);
+				$this->hooks[$objModule->module_number] = $objModule;
 
-					// Instantiate dataservice class (model)
-					$modelclassname = 'Dao'.ucfirst($module);
-					$this->hooks[$objModule->module_number]->object = new $modelclassname($this->db);
-				}
+				// Instantiate dataservice class (model)
+				$modelclassname = 'Dao'.ucfirst($module);
+				$this->hooks[$objModule->module_number]->object = new $modelclassname($this->db);
 
-				if (file_exists($pathroot.'/'.$module.'/lib/'.$module.'.lib.php'))
-				{
-					require_once($pathroot.'/'.$module.'/lib/'.$module.'.lib.php');
-				}
+				dol_include_once('/'.$module.'/lib/'.$module.'.lib.php');
 			}
 		}
 	}
@@ -1388,24 +1372,10 @@ class CommonObject
             //print $classfile." - ".$classpath." - ".$tplpath;
             if(!class_exists($classname))
             {
-            	if (file_exists(DOL_DOCUMENT_ROOT."/".$classpath."/".$classfile.".class.php"))
-            	{
-            		require(DOL_DOCUMENT_ROOT."/".$classpath."/".$classfile.".class.php");
-            	}
-            	else
-            	{
-            		require(DOL_DOCUMENT_EXTMODULE."/".$classpath."/".$classfile.".class.php");
-            	}
+            	dol_include_once("/".$classpath."/".$classfile.".class.php");
             }
 			$linkedObjectBlock = new $classname($this->db);
-			if (file_exists(DOL_DOCUMENT_ROOT.'/'.$tplpath.'/tpl/linkedobjectblock.tpl.php'))
-			{
-				include(DOL_DOCUMENT_ROOT.'/'.$tplpath.'/tpl/linkedobjectblock.tpl.php');
-			}
-			else
-			{
-				include(DOL_DOCUMENT_EXTMODULE.'/'.$tplpath.'/tpl/linkedobjectblock.tpl.php');
-			}
+			dol_include_once('/'.$tplpath.'/tpl/linkedobjectblock.tpl.php');
 			
 			return $num;
 		}
diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php
index 623504e8a88df40df94b112f8894e80f5e9816ed..1d4a1abdf42c3ade24667e10f828f998f9efa9ca 100644
--- a/htdocs/core/class/conf.class.php
+++ b/htdocs/core/class/conf.class.php
@@ -143,7 +143,7 @@ class Conf
 						{
 							$modulename = strtolower($reg[1]);
 							if ($value == 1) $this->triggers_modules[] = DOL_DOCUMENT_ROOT.'/'.$modulename.'/inc/triggers/';
-							else if ($value == 2) $this->triggers_modules[] = DOL_DOCUMENT_EXTMODULE.'/'.$modulename.'/inc/triggers/';
+							else if ($value == 2) $this->triggers_modules[] = DOL_DOCUMENT_ROOT_ALT.'/'.$modulename.'/inc/triggers/';
 						}
 						// If this is constant for login method activated by a module
 						elseif (preg_match('/^MAIN_MODULE_([A-Z_]+)_LOGIN_METHOD$/i',$key,$reg))
diff --git a/htdocs/includes/menus/standard/auguria.lib.php b/htdocs/includes/menus/standard/auguria.lib.php
index 514e6089c02b9fe33e1acacbecabb39cac64ad35..313e5df77b6939cc47ed0f89cf1d8b6470cad1cf 100644
--- a/htdocs/includes/menus/standard/auguria.lib.php
+++ b/htdocs/includes/menus/standard/auguria.lib.php
@@ -64,8 +64,8 @@ function print_auguria_menu($db,$atarget,$type_user)
 				else
 				{
 					preg_match('/^([^<]+\.php)/i',$tabMenu[$i]['url'],$regs);
-					if (file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_ROOT.$tabMenu[$i]['url'];
-					else $url=DOL_URL_EXTMODULE.$tabMenu[$i]['url'];
+					$url=DOL_URL_ROOT.$tabMenu[$i]['url'];
+					if (defined('DOL_URL_EXTMODULE') && DOL_URL_EXTMODULE && ! file_exists(DOL_DOCUMENT_ROOT.$tabMenu[$i]['url'])) $url=DOL_URL_EXTMODULE.$tabMenu[$i]['url'];
 					if (! preg_match('/\?/',$url)) $url.='?';
 					else $url.='&';
 					if (! preg_match('/mainmenu/i',$url) || ! preg_match('/leftmenu/i',$url))
@@ -278,8 +278,8 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after)
 
             // Add mainmenu in GET url. This make to go back on correct menu even when using Back on browser.
             preg_match('/^([^<]+\.php)/i',$menu_array[$i]['url'],$regs);
-			if (file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_ROOT.$menu_array[$i]['url'];
-			else $url=DOL_URL_EXTMODULE.$menu_array[$i]['url'];
+			$url=DOL_URL_ROOT.$menu_array[$i]['url'];
+			if (defined('DOL_URL_EXTMODULE') && DOL_URL_EXTMODULE && ! file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_EXTMODULE.$menu_array[$i]['url'];
 			
             if (! preg_match('/mainmenu=/i',$menu_array[$i]['url']))
             {
diff --git a/htdocs/includes/menus/standard/eldy.lib.php b/htdocs/includes/menus/standard/eldy.lib.php
index aa49c3877cfd7576aff0c433471f6df78c9a3546..3942082e26dfa89df391f2efcabf12f99b4d2e4e 100644
--- a/htdocs/includes/menus/standard/eldy.lib.php
+++ b/htdocs/includes/menus/standard/eldy.lib.php
@@ -453,8 +453,8 @@ function print_eldy_menu($db,$atarget,$type_user)
 				}
 				else
 				{
-					if (file_exists(DOL_DOCUMENT_ROOT.$tabMenu[$i]['url'])) $url=DOL_URL_ROOT.$tabMenu[$i]['url'];
-					else $url=DOL_URL_EXTMODULE.$tabMenu[$i]['url'];
+					$url=DOL_URL_ROOT.$tabMenu[$i]['url'];
+					if (defined('DOL_URL_EXTMODULE') && DOL_URL_EXTMODULE && ! file_exists(DOL_DOCUMENT_ROOT.$tabMenu[$i]['url'])) $url=DOL_URL_EXTMODULE.$tabMenu[$i]['url'];
 					if (! preg_match('/\?/',$url)) $url.='?';
 					else $url.='&';
 					if (! preg_match('/mainmenu/i',$url) || ! preg_match('/leftmenu/i',$url))
@@ -1387,8 +1387,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after)
             
             // For external modules
             preg_match('/^([^<]+\.php)/i',$menu_array[$i]['url'],$regs);
-			if (file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_ROOT.$menu_array[$i]['url'];
-			else $url=DOL_URL_EXTMODULE.$menu_array[$i]['url'];
+			$url=DOL_URL_ROOT.$menu_array[$i]['url'];
+			if (defined('DOL_URL_EXTMODULE') && DOL_URL_EXTMODULE && ! file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_EXTMODULE.$menu_array[$i]['url'];
 
             // Menu niveau 0
             if ($menu_array[$i]['level'] == 0)
diff --git a/htdocs/install/inc.php b/htdocs/install/inc.php
index 61d8d1d9ec3fd8bdc3a1fb06c644245308ac615b..88d143863834aa3101c7fb810868f0058e42c161 100644
--- a/htdocs/install/inc.php
+++ b/htdocs/install/inc.php
@@ -125,7 +125,7 @@ define('MAIN_DB_PREFIX',(isset($dolibarr_main_db_prefix)?$dolibarr_main_db_prefi
 
 define('DOL_DATA_ROOT',(isset($dolibarr_main_data_root)?$dolibarr_main_data_root:''));
 define('DOL_CLASS_PATH', 'class/');                             // Filsystem path to class dir
-define('DOL_DOCUMENT_EXTMODULE', (isset($dolibarr_main_document_root_alt)?$dolibarr_main_document_root_alt:''));	// Filesystem path to external modules dir
+define('DOL_DOCUMENT_ROOT_ALT', (isset($dolibarr_main_document_root_alt)?$dolibarr_main_document_root_alt:''));	// Filesystem path to external root dir (external modules)
 define('DOL_MAIN_URL_ROOT', (isset($dolibarr_main_url_root)?$dolibarr_main_url_root:''));           // URL relative root
 $uri=preg_replace('/^http(s?):\/\//i','',constant('DOL_MAIN_URL_ROOT'));  // $uri contains url without http*
 $suburi = strstr ($uri, '/');       // $suburi contains url without domain
diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php
index 9fe2dfd07a5c1510c38b346664c9b819228d2471..a436021aa3354b3e8af0730149f549e2d10669c2 100644
--- a/htdocs/lib/functions.lib.php
+++ b/htdocs/lib/functions.lib.php
@@ -62,6 +62,18 @@ function GETPOST($paramname,$check='',$method=0)
     return $out;
 }
 
+/**
+ *	Make an include_once using default root and alternate root if it fails.
+ * 	@param			relpath		Relative path to file (Ie: mydir/myfile, ../myfile, ...)
+ *  @return         int			Result
+ */
+function dol_include_once($relpath)
+{
+	$res=@include_once(DOL_DOCUMENT_ROOT.$relpath);
+	if (! $res && defined('DOL_DOCUMENT_ROOT_ALT')) $res=@include_once(DOL_DOCUMENT_ROOT_ALT.$relpath);
+	return $res;
+}
+
 /**
  *	Create a clone of instance of object (new instance with same properties)
  * 	This function works for both PHP4 and PHP5.
diff --git a/htdocs/lib/security.lib.php b/htdocs/lib/security.lib.php
index a022a2e4f6fc953fb14b555db136824f3e5c62dd..059c64f4ca637c60f4edfa00c082b85b8aeeed1e 100644
--- a/htdocs/lib/security.lib.php
+++ b/htdocs/lib/security.lib.php
@@ -159,14 +159,7 @@ function dol_loginfunction($langs,$conf,$mysoc)
 	{
 		$rowspan++;
 
-		if(file_exists(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php'))
-		{
-			$res=@include_once(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php');
-		}
-		else
-		{
-			$res=@include_once(DOL_DOCUMENT_EXTMODULE.'/multicompany/class/actions_multicompany.class.php');
-		}
+		$res=dol_include_once('/multicompany/class/actions_multicompany.class.php');
 		if ($res)
 		{
 			$mc = new ActionsMulticompany($db);
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 1b803046dd59e44008742f23ed32d648011d533d..dd70e99e091d759129b0b4ed625a41832cbbf11e 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -1068,15 +1068,8 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a
 	{
 		if ($user->admin && ! $user->entity)
 		{
-			if(file_exists(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php'))
-			{
-				$res=@include_once(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php');
-			}
-			else
-			{
-				$res=@include_once(DOL_DOCUMENT_EXTMODULE.'/multicompany/class/actions_multicompany.class.php');
-			}
-			
+			$res=@dol_include_once('/multicompany/class/actions_multicompany.class.php');
+		
 			if ($res)
 			{
 				//$mc = new ActionsMulticompany($db);
diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php
index a1fce0a13609a43cd02d5a0dcc702850697a0c23..aae5f3b937ad1756825f08078714ee41c72762ea 100644
--- a/htdocs/master.inc.php
+++ b/htdocs/master.inc.php
@@ -104,7 +104,7 @@ if (empty($dolibarr_main_data_root))
 define('DOL_DOCUMENT_ROOT', $dolibarr_main_document_root);			// Filesystem core php (htdocs)
 define('DOL_DATA_ROOT', $dolibarr_main_data_root);					// Filesystem data (documents)
 define('DOL_CLASS_PATH', 'class/');									// Filesystem path to class dir
-define('DOL_DOCUMENT_EXTMODULE', $dolibarr_main_document_root_alt);	// Filesystem path to external modules dir
+define('DOL_DOCUMENT_ROOT_ALT', $dolibarr_main_document_root_alt);	// Filesystem path to external modules dir
 // If dolibarr_main_url_root = auto (Hidden feature for developers only), we try to forge it.
 if ($dolibarr_main_url_root == 'auto' && ! empty($_SERVER["SCRIPT_URL"]) && ! empty($_SERVER["SCRIPT_URI"]))
 {
diff --git a/htdocs/user/passwordforgotten.php b/htdocs/user/passwordforgotten.php
index fc2b07f21dab33ae5cac63e8a322817bc7f5f6ec..6b65b1163cd605843f4c0a339954ce1b4bc6f59e 100644
--- a/htdocs/user/passwordforgotten.php
+++ b/htdocs/user/passwordforgotten.php
@@ -216,15 +216,7 @@ if (! empty($conf->global->MAIN_MODULE_MULTICOMPANY)  && ! $disabled)
 {
 	global $db;
 	
-	if(file_exists(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php'))
-	{
-		$res=@include_once(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php');
-	}
-	else
-	{
-		$res=@include_once(DOL_DOCUMENT_EXTMODULE.'/multicompany/class/actions_multicompany.class.php');
-	}
-
+	$res=dol_include_once('/multicompany/class/actions_multicompany.class.php');
 	if ($res)
 	{
 		$mc = new ActionsMulticompany($db);