diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 8dfe80368e976ba3de778a30f71bb4bf57461dc5..3779473eacbb27e3beca3c890c6f38b8188e190e 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -543,7 +543,7 @@ class Form
      *	@param  string	$selected       Preselected type
      *	@param  string	$htmlname       Name of field in html form
      * 	@param	int		$showempty		Add an empty field
-     * 	@param	int		$hidetext		Do not show label before combo box
+     * 	@param	int		$hidetext		Do not show label 'Type' before combo box (used only if there is at least 2 choices to select)
      * 	@param	string	$forceall		Force to show products and services in combo list, whatever are activated modules
      *  @return	void
      */
@@ -577,10 +577,12 @@ class Form
         }
         if (! $forceall && empty($conf->product->enabled) && ! empty($conf->service->enabled))
         {
+        	print $langs->trans("Service");
             print '<input type="hidden" name="'.$htmlname.'" value="1">';
         }
         if (! $forceall && ! empty($conf->product->enabled) && empty($conf->service->enabled))
         {
+        	print $langs->trans("Product");
             print '<input type="hidden" name="'.$htmlname.'" value="0">';
         }
 
diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php
index 719d6c1794c4a86444bfa57e57237651cc9ad2dc..97e6224999f04161d58bd33eb1c72a5ed8b6e26a 100644
--- a/htdocs/core/tpl/objectline_create.tpl.php
+++ b/htdocs/core/tpl/objectline_create.tpl.php
@@ -118,7 +118,12 @@ else {
 		else if (empty($conf->product->enabled) && ! empty($conf->service->enabled)) echo $langs->trans("FreeLineOfType").' '.$langs->trans("Service");
 		else if (! empty($conf->product->enabled) && empty($conf->service->enabled)) echo $langs->trans("FreeLineOfType").' '.$langs->trans("Product");*/
 		echo ' ';
-		echo $form->select_type_of_lines(isset($_POST["type"])?$_POST["type"]:-1,'type',1,1,1);
+		$forceall=1;	// We always force all type for free lines (module product or service means we use predefined product or service)
+		if ($object->element == 'contrat' && empty($conf->global->CONTRACT_SUPPORT_PRODUCTS))
+		{
+			$forceall=0;
+		}
+		echo $form->select_type_of_lines(isset($_POST["type"])?$_POST["type"]:-1,'type',1,1,$forceall);
 //	}
 	echo '</span>';
 
diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php
index dbac3c4230dd8455ef28ce43de13d1061029a0f5..9caef34d84524e722a1f76a308a4822ab7498ff7 100644
--- a/htdocs/fourn/commande/fiche.php
+++ b/htdocs/fourn/commande/fiche.php
@@ -1725,8 +1725,11 @@ elseif (! empty($object->id))
 			}
 			else
 			{
-				print $form->select_type_of_lines($line->product_type,'type',1);
+                $forceall=1;	// For suppliers, we always show all types
+				print $form->select_type_of_lines($line->product_type,'type',1,0,$forceall);
 				if (! empty($conf->product->enabled) && ! empty($conf->service->enabled)) print '<br>';
+                if ($forceall || (! empty($conf->product->enabled) && ! empty($conf->service->enabled))
+                || (empty($conf->product->enabled) && empty($conf->service->enabled))) print '<br>';
 			}
 
 			if (is_object($hookmanager))
diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php
index 4e1c3246effff70bee13a4b90f28a193930f1f4b..d962f30e69f67950d58e06e2d2a05319d0e7dfc1 100644
--- a/htdocs/fourn/facture/fiche.php
+++ b/htdocs/fourn/facture/fiche.php
@@ -311,7 +311,7 @@ elseif ($action == 'add' && $user->rights->fournisseur->facture->creer)
         $object->mode_reglement_id = GETPOST('mode_reglement_id');
         $object->fk_account        = GETPOST('fk_account', 'int');
         $object->fk_project    = ($tmpproject > 0) ? $tmpproject : null;
-		
+
 		// Auto calculation of date due if not filled by user
 		if(empty($object->date_echeance)) $object->date_echeance = $object->calculate_date_lim_reglement();
 
@@ -1648,7 +1648,7 @@ else
         // Local taxes
         if ($societe->localtax1_assuj=="1") $nbrows++;
         if ($societe->localtax2_assuj=="1") $nbrows++;
-        
+
         print '<td rowspan="'.$nbrows.'" valign="top">';
 
         $sql = 'SELECT p.datep as dp, p.num_paiement, p.rowid, p.fk_bank,';
@@ -1968,9 +1968,9 @@ else
                     print '<br>';
                 }
                 else
-                {
+				{
                     $forceall=1;	// For suppliers, we always show all types
-                    print $form->select_type_of_lines($object->lines[$i]->product_type,'type',1);
+                    print $form->select_type_of_lines($object->lines[$i]->product_type,'type',1,0,$forceall);
                     if ($forceall || (! empty($conf->product->enabled) && ! empty($conf->service->enabled))
                     || (empty($conf->product->enabled) && empty($conf->service->enabled))) print '<br>';
                 }
@@ -2252,7 +2252,7 @@ else
             include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
             $fileparams = dol_most_recent_file($conf->fournisseur->facture->dir_output.'/'.get_exdir($object->id,2).$ref, preg_quote($ref,'/'));
             $file=$fileparams['fullname'];
-            
+
             // Define output language
             $outputlangs = $langs;
             $newlang = '';