diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php
index 5167236a8ea9e6388ac454cf6d9821c3c2953614..48ee8dac50b3fb1c75a2e4ebda7797a94af6d595 100644
--- a/htdocs/fourn/commande/fiche.php
+++ b/htdocs/fourn/commande/fiche.php
@@ -99,8 +99,9 @@ if ($_POST['action'] ==	'addligne' && $user->rights->fournisseur->commande->cree
     }
 
     $soc = new Societe($db,	$commande->socid);
-    $soc->fetch($commande->socid);
-    
+    $result=$soc->fetch($commande->socid);
+    //print $result;
+	
     // Ecrase $pu par celui	du produit
     // Ecrase $desc	par	celui du produit
     // Ecrase $txtva  par celui du produit
@@ -116,17 +117,18 @@ if ($_POST['action'] ==	'addligne' && $user->rights->fournisseur->commande->cree
     	
     	$desc = $prod->description;
     	$desc.= $prod->description && $_POST['np_desc'] ? "\n" : "";
-			$desc.= $_POST['np_desc'];
-
-    	$tva_tx	= get_default_tva($soc,$mysoc,$prod->tva_tx);
-	  }
-	  else
-	  {
-	  	$pu=$_POST['pu'];
-	    $tva_tx=$_POST['tva_tx'];
-	    $desc=$_POST['dp_desc'];
-	  }
+		$desc.= $_POST['np_desc'];
 
+    	$tva_tx	= get_default_tva($soc,$mysoc,$prod->tva_tx,$prodfournprice->product_id);
+	}
+	else
+	{
+		$pu=$_POST['pu'];
+		$tva_tx=$_POST['tva_tx'];
+		$desc=$_POST['dp_desc'];
+	}
+	//print "xx".$tva_tx; exit;
+	
     $result=$commande->addline(
 				 $desc,
 				 $pu,
diff --git a/htdocs/fourn/fournisseur.commande.class.php b/htdocs/fourn/fournisseur.commande.class.php
index 26d99cf83e778d45a51df42d26c6a10e537fb880..36a8bd476484dfd191372a39dc8697aa176922e1 100644
--- a/htdocs/fourn/fournisseur.commande.class.php
+++ b/htdocs/fourn/fournisseur.commande.class.php
@@ -662,7 +662,7 @@ class CommandeFournisseur extends Commande
 	*/
 	function addline($desc, $pu, $qty, $txtva, $fk_product=0, $fk_prod_fourn_price=0, $fourn_ref='', $remise_percent=0, $price_base_type='HT')
 	{
-		global $langs;
+		global $langs,$mysoc;
 		
 		// Clean parameters
 		$qty  = price2num($qty);
@@ -670,7 +670,7 @@ class CommandeFournisseur extends Commande
 		$desc = trim($desc);
 		$remise_percent = price2num($remise_percent);
 		
-		dolibarr_syslog("Fournisseur.Commande.class::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent");
+		dolibarr_syslog("Fournisseur.Commande::addline $desc, $pu, $qty, $txtva, $fk_product, $remise_percent");
 
 		if ($qty < 1 && ! $fk_product)
 		{
@@ -691,7 +691,6 @@ class CommandeFournisseur extends Commande
 					if ($result > 0)
 					{
 						$label = $prod->libelle;
-						$txtva = $prod->tva_tx;
 						$pu    = $prod->fourn_pu;
 						$ref   = $prod->ref_fourn;
 					}
@@ -699,14 +698,14 @@ class CommandeFournisseur extends Commande
 					{
 						$this->error="Aucun tarif trouv� pour cette quantit�. Quantit� saisie insuffisante ?";
 						$this->db->rollback();
-						dolibarr_syslog("Fournisseur.commande.class::addline result=".$result." - ".$this->error);
+						dolibarr_syslog("Fournisseur.commande::addline result=".$result." - ".$this->error);
 						return -1;
 					}
 					if ($result < -1)
 					{
 						$this->error=$prod->error;
 						$this->db->rollback();
-						dolibarr_syslog("Fournisseur.commande.class::addline result=".$result." - ".$this->error);
+						dolibarr_syslog("Fournisseur.commande::addline result=".$result." - ".$this->error);
 						return -1;
 					}
 				}
@@ -736,7 +735,7 @@ class CommandeFournisseur extends Commande
 			if ($fk_product) { $sql.= $fk_product.","; }
 			else { $sql.= "null,"; }
 			$sql.= price2num($price,'MU').", '$qty', $txtva, $remise_percent,'".price2num($subprice,'MU')."','".price2num($remise)."','".$ref."') ;";
-			dolibarr_syslog('Fournisseur.commande.class::addline sql='.$sql);
+			dolibarr_syslog('Fournisseur.commande::addline sql='.$sql);
 			$resql=$this->db->query($sql);
 			//print $sql;
 			if ($resql)
@@ -756,10 +755,7 @@ class CommandeFournisseur extends Commande
 	
 	
   /**
-   * Dispatch un element de la commande dans un stock
-   *
-   *
-   *
+   * 	\brief	Dispatch un element de la commande dans un stock
    */
   function DispatchProducts($user, $products, $qtys, $entrepots)
   {
diff --git a/htdocs/lib/functions.inc.php b/htdocs/lib/functions.inc.php
index 393c5a535570cbae93bce49a02c9843e114d86c9..d4f9ef16964aa3ce30a374dd3205648fb662212f 100644
--- a/htdocs/lib/functions.inc.php
+++ b/htdocs/lib/functions.inc.php
@@ -1928,6 +1928,23 @@ function price2num($amount,$rounding='')
 }
 
 
+/**
+*	\brief	Return vat rate of a product in a particular selling country
+*/
+function get_product_vat_for_country($idprod, $countrycode)
+{
+	global $db;
+	
+	$product=new Product($db);
+	$product->fetch($idprod);
+	
+	// \TODO Read rate according to countrycode
+	// For the moment only one rate supported
+
+	return $product->tva_tx;
+}
+
+
 /**
    \brief      	Fonction qui renvoie la tva d'une ligne (en fonction du vendeur, acheteur et taux du produit)
    \remarks    	Si vendeur non assujeti a TVA, TVA par d�faut=0. Fin de r�gle.
@@ -1938,12 +1955,13 @@ function price2num($amount,$rounding='')
 				Sinon TVA propos�e par d�faut=0. Fin de r�gle.
    \param      	societe_vendeuse    	Objet soci�t� vendeuse
    \param      	societe_acheteuse   	Objet soci�t� acheteuse
-   \param      	taux_produit        	Taux par defaut du produit vendu
+   \param      	taux_produit        	Taux par defaut du produit vendu (old way to get product vat rate)
+   \param      	idprod					Id product (new way to get product vat rate)
    \return     	float               	Taux de tva a appliquer, -1 si ne peut etre d�termin�
  */
-function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit)
+function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit, $idprod=0)
 {
-	dolibarr_syslog("get_default_tva vendeur_assujeti=".$societe_vendeuse->tva_assuj." pays_vendeur=".$societe_vendeuse->pays_id.", pays_acheteur=".$societe_acheteuse->pays_id.", taux_produit=".$taux_produit);
+	dolibarr_syslog("get_default_tva vendeur_assujeti=".$societe_vendeuse->tva_assuj." pays_vendeur=".$societe_vendeuse->pays_code.", seller in cee=".$societe_vendeuse->isInEEC().", pays_acheteur=".$societe_acheteuse->pays_code.", buyer in cee=".$societe_acheteuse->isInEEC().", taux_produit(deprecated)=".$taux_produit.", idprod=".$idprod);
 
 	if (!is_object($societe_vendeuse)) return -1;
 	if (!is_object($societe_acheteuse)) return -1;
@@ -1957,8 +1975,9 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit)
 	// Le test ci-dessus ne devrait pas etre necessaire. Me signaler l'exemple du cas juridique concercn� si le test suivant n'est pas suffisant.
 	if ($societe_vendeuse->pays_id == $societe_acheteuse->pays_id)
 	{
+	    if ($idprod) return get_product_vat_for_country($idprod,$societe_vendeuse->pays_code);
 		if (strlen($taux_produit) == 0) return -1;	// Si taux produit = '', on ne peut d�terminer taux tva
-	    return $taux_produit;
+		return $taux_produit;
 	}
 
 	// Si (vendeur et acheteur dans Communaut� europ�enne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par d�faut=0 (La TVA doit �tre pay� par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de r�gle.
@@ -1967,6 +1986,7 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $taux_produit)
  	// Si (vendeur et acheteur dans Communaut� europ�enne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par d�faut=TVA du produit vendu. Fin de r�gle.
 	if (($societe_vendeuse->isInEEC() && $societe_acheteuse->isInEEC()) && ! $societe_acheteuse->tva_intra)
 	{
+	    if ($idprod) return get_product_vat_for_country($idprod,$societe_vendeuse->pays_code);
 		if (strlen($taux_produit) == 0) return -1;	// Si taux produit = '', on ne peut d�terminer taux tva
 	    return $taux_produit;
 	}
diff --git a/htdocs/societe.class.php b/htdocs/societe.class.php
index 3c41b899f2196d3aa5689c6a5759ed692b530381..736988ec18e05f2cc572d4c3b735609b98019707 100644
--- a/htdocs/societe.class.php
+++ b/htdocs/societe.class.php
@@ -126,7 +126,7 @@ class Societe extends CommonObject
   }
 
   /**
-   *    \brief      Cr�e la societe en base
+   *    \brief      Cree la societe en base
    *    \param      user        Objet utilisateur qui demande la cr�ation
    *    \return     int         0 si ok, < 0 si erreur
    */
@@ -160,12 +160,12 @@ class Societe extends CommonObject
 
                 $ret = $this->update($this->id,$user,0,1,1);
                 
-                // si un commercial cr�e un client il lui est affect� automatiquement
+                // si un commercial cree un client il lui est affecte automatiquement
                 if (!$user->rights->societe->client->voir)
                 {
                 	$this->add_commercial($user, $user->id);
                 }
-                // Ajout du commercial affect�
+                // Ajout du commercial affecte
                 else if ($this->commercial_id != '' && $this->commercial_id != -1)
                 {
                 	$this->add_commercial($user, $this->commercial_id);
@@ -1795,7 +1795,7 @@ class Societe extends CommonObject
         }
     }
 
-   /*
+	/**
     *       \brief     Charge les informations d'ordre info dans l'objet societe
     *       \param     id     id de la societe a charger
     */
@@ -1840,19 +1840,50 @@ class Societe extends CommonObject
         }
     }
 
-   /*
+	/**
     *       \brief     Renvoi si pays appartient � CEE
     *       \param     boolean		true = pays dans CEE, false= pays hors CEE
     */
     function isInEEC()
     {
-      // \todo liste code pays � compl�ter
-      $country_code_in_EEC=array('BE','FR','LU','GB','IT');	
-      //print "dd".$this->pays_code;
-      return in_array($this->pays_code,$country_code_in_EEC);
+		// List of all country codes that are in europe for european vat rules
+		$country_code_in_EEC=array(
+			'AT',	// Austria
+			'BE',	// Belgium
+			'BG',	// Bulgaria
+			'CY',	// Cyprus
+			'CZ',	// Czech republic
+			'DK',	// Danemark
+			'EE',	// Estonia
+			'FI',	// Finland
+			'FR',	// France
+			'DE',	// Germany
+			'GB',	// Royaume-uni
+			'GR',	// Greece
+			'NL',	// Holland
+			'HU',	// Hungary
+			'IE',	// Ireland
+			'IT',	// Italy
+			'LV',	// Latvia
+			'LT',	// Lithuania
+			'LU',	// Luxembourg
+			'MT',	// Malta
+			'NO',	// Norway
+			'PL',	// Poland
+			'PT',	// Portugal
+			'RO',	// Romania
+			'SK',	// Slovakia
+			'SI',	// Slovenia
+			'ES',	// Spain
+			'SE',	// Sweden
+			'CH',	// Switzerland 		
+		);	
+		//print "dd".$this->pays_code;
+		return in_array($this->pays_code,$country_code_in_EEC);
     }
-   /*
-    *  \brief     Charge la liste des categories fournisseurs
+	
+	/**
+    *  	\brief     Charge la liste des categories fournisseurs
     *   \return    0 in success, <> 0 in error
     */
     function LoadSupplierCateg()
@@ -1876,6 +1907,7 @@ class Societe extends CommonObject
 	  return -1;
 	}
     }
+	
   /*
    *  \brief     Charge la liste des categories fournisseurs
    *   \return    0 in success, <> 0 in error