diff --git a/ChangeLog b/ChangeLog
index 2e1556ae3e6208bd85c9d80c87cdaca94b2624cb..5c5ad383d7aa4272a4e2b033d33a77d44cb9d188 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -39,13 +39,11 @@ For users:
 - New: [ task #165 ] Add import/export of multiprices.
 - New: Add Maghreb regions and departments.
 - New: A more responsive desgin for statistic box of home page.
-- Qual: Implement same rule for return value of all command line scripts (0 when success, <>0 if error).
 - New: [ task #1005 ] Adapting to Spanish legislation bill numbering
 - New: [ task #1011 ] Now supplier order and invoice deal with payment terms and mode.
 - New: [ task #1014 ] Add option to recursivly add parent category.
 - New: [ task #1016 ] Can define a specific numbering for deposits.
 - New: [ task #918 ] Stock replenishment.
-- Fix: [ bug #992 ] Proforma invoices don't have a separated numeric count.
 - New : Add pdf link into supplier invoice list and supplier order list.
 - New : Genrate auto the PDF for supplier invoice.
 - New : Add category into filter webservice thirdparty method getListOfThirdParties.
@@ -60,12 +58,15 @@ For users:
 - New: Add hidden option MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS.
 - New: Can send an email from thirdparty card.
 - New: Can cancel holidays that were previously validated.
-- Fix: [bug #1022] correct margin calculation for credit notes.
 - New: Can choose contact on event (action com) creation, and filtred by thirdparty.
 - New: Add hidden option MAIN_FORCE_DEFAULT_STATE_ID.
 - New: Add page to make mass stock movement.
 - New: Add field oustanding limit into thirdparty properties.
 - New: Can enter a vat payment of zero.
+- New: Add path to installed dir of external modules + Name and web of module provider.
+- Qual: Implement same rule for return value of all command line scripts (0 when success, <>0 if error).
+- Fix: [ bug #992 ] Proforma invoices don't have a separated numeric count.
+- Fix: [ bug #1022 ] correct margin calculation for credit notes.
 
 For translators:
 - Qual: Normalized sort order of all languages files with english reference files.
@@ -86,7 +87,6 @@ For developers:
   MAIN_MOTD_SETUPPAGE, MAIN_MOTD_SETUPPAGE, MAIN_HOME now accept "|langfile" into translation
   key to use a specific language file.
 - New: Make some changes to allow usage of several alternative $dolibarr_main_url_root variables.
-  Fix also several bugs with old code. 
 - Qual: All nowrap properties are now using CSS class nowrap.
 - Qual: Move hardcoded code of module mailmanspip into trigger.
 - New: Into POST forms, if you can add a parameter DOL_AUTOSET_COOKIE with a vlue that is list name,
@@ -97,6 +97,7 @@ For developers:
 - New: A trigger can return an array of error strings instead of one error string.
 - New: Add method to use a dictionnary as a combo box.
 - New: Add update method for web service product.
+- Fix also several bugs with old code. 
 
 WARNING: Following change may create regression for some external modules, but was necessary to make
 Dolibarr better:
diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php
index 4aca54817e816483c8530013fd6c5433d7ac2137..b4e6ff2f628e1459a5a626b25473e88d8744d36b 100644
--- a/htdocs/admin/modules.php
+++ b/htdocs/admin/modules.php
@@ -1,7 +1,7 @@
 <?php
 /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  * Copyright (C) 2003      Jean-Louis Bergamo   <jlb@j1b.org>
- * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
  * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
  * Copyright (C) 2011	   Juanjo Menent        <jmenent@2byte.es>
@@ -154,22 +154,21 @@ foreach ($modulesdir as $dir)
     					$const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',get_class($objMod)));
     					if ($objMod->version == 'development'  && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 2))) $modulequalified=0;
     					if ($objMod->version == 'experimental' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 1))) $modulequalified=0;
-						// We discard modules according to property disabled						
+						// We discard modules according to property disabled
     					if (isset($objMod->hidden) && $objMod->hidden) $modulequalified=false;
-    					
+
     					// Define array $categ with categ with at least one qualified module
     					if ($modulequalified)
     					{
     						$modules[$i] = $objMod;
     			            $filename[$i]= $modName;
     			            $orders[$i]  = $objMod->family."_".$j;   // Sort by family, then by module number
-    			            $special     = isset($specialtostring[$objMod->special])?$specialtostring[$objMod->special]:'unknown';
+    						$dirmod[$i]  = $dir;
+    			            // Set categ[$i]
+    						$special     = isset($specialtostring[$objMod->special])?$specialtostring[$objMod->special]:'unknown';
     			            if ($objMod->version == 'development' || $objMod->version == 'experimental') $special='expdev';
-
-    						//print "x".$modName." ".$orders[$i]." ".$special."\n<br>";
     						if (isset($categ[$special])) $categ[$special]++;					// Array of all different modules categories
     			            else $categ[$special]=1;
-    						$dirmod[$i] = $dir;
     						$j++;
     			            $i++;
     					}
@@ -337,7 +336,7 @@ if ($mode != 'marketplace')
         // Print a separator if we change family
         //print "<tr><td>xx".$oldfamily."-".$family."-".$atleastoneforfamily."<br></td><tr>";
         //if ($oldfamily && $family!=$oldfamily && $atleastoneforfamily) {
-        if ($family!=$oldfamily) 
+        if ($family!=$oldfamily)
         {
             print '<tr class="liste_titre">'."\n";
             print '<td colspan="5">';
@@ -391,7 +390,16 @@ if ($mode != 'marketplace')
 
         // Version
         print '<td align="center" valign="top" class="nowrap">';
-        print $objMod->getVersion();
+        $version=$objMod->getVersion();
+        $dirofmodule=$dirmod[$key];
+        if ($objMod->isCoreOrExternalModule() == 'external')
+        {
+        	$text=$langs->trans("ExternalModule",$dirofmodule);
+        	if (! empty($objMod->editor_name) && $objMod->editor_name != 'dolibarr') $text.=' - '.$objMod->editor_name;
+        	if (! empty($objMod->editor_web) && $objMod->editor_web != 'www.dolibarr.org') $text.=' - '.$objMod->editor_web;
+        	print $form->textwithpicto($version, $text, 1, 'help');
+        }
+        else print $version;
         print "</td>\n";
 
         // Activate/Disable and Setup (2 columns)
@@ -401,7 +409,6 @@ if ($mode != 'marketplace')
 
         	print '<td align="center" valign="middle">';
 
-        	// Module actif
         	if (! empty($objMod->always_enabled) || ((! empty($conf->multicompany->enabled) && $objMod->core_enabled) && ($user->entity || $conf->entity!=1)))
         	{
         		print $langs->trans("Required");
@@ -459,7 +466,7 @@ if ($mode != 'marketplace')
 
         }
         else
-        {
+		{
         	print '<td align="center" valign="middle">';
 
         	if (! empty($objMod->always_enabled))
diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php
index 12f739331b8d6ce7706fb4fee0aacf64ad5a8a27..79e515b05e5d70e37667acaafbce750d8a0a0dd1 100644
--- a/htdocs/core/modules/DolibarrModules.class.php
+++ b/htdocs/core/modules/DolibarrModules.class.php
@@ -262,7 +262,7 @@ abstract class DolibarrModules
 
 
     /**
-     *  Retourne la version du module.
+     *  Return module version.
      *  Pour les modules a l'etat 'experimental', retourne la traduction de 'experimental'
      *  Pour les modules 'dolibarr', retourne la version de Dolibarr
      *  Pour les autres modules, retourne la version du module
@@ -282,6 +282,20 @@ abstract class DolibarrModules
     }
 
 
+    /**
+     *  Return if a module is a core or external module
+     *
+     *  @return     string      'core', 'external' or 'unknown'
+     */
+    function isCoreOrExternalModule()
+    {
+        if ($this->version == 'dolibarr') return 'core';
+        if (! empty($this->version) && ! in_array($this->version,array('experimental','development'))) return 'external';
+        if (! empty($this->editor_name) || ! empty($this->editor_web)) return 'external';
+        return 'unknown';
+    }
+
+
     /**
      *  Return list of lang files related to module
      *
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index c800925fa2f6bc296b348491d6d776f5988a5f44..e723501126317c7df2374a771d15d6735f5e9836 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -379,6 +379,7 @@ LinkToTest=Clickable link generated for user <strong>%s</strong> (click phone nu
 KeepEmptyToUseDefault=Keep empty to use default value
 DefaultLink=Default link
 ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
+ExternalModule=External module - Installed into directory %s
 
 # Modules
 Module0Name=Users & groups
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 70987dbc5ddb71b2f7b0c590128f17eceb035c1a..9984beaf50324ac81182de3c3f8465856ea7a33f 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -379,6 +379,7 @@ LinkToTest=Lien cliquable généré pour l'utilisateur <strong>%s</strong> (cliq
 KeepEmptyToUseDefault=Laisser ce champ vide pour utiliser la valeur par défaut
 DefaultLink=Lien par défaut
 ValueOverwrittenByUserSetup=Attention, cette valeur peut être écrasée par une valeur spécifique à la configuration de l'utilisateur (chaque utilisateur pouvant avoir sa propre URL « clicktodial »)
+ExternalModule=Module externe - Installé dans le répertoire %s
 
 # Modules
 Module0Name=Utilisateurs & groupes