diff --git a/htdocs/product/card.php b/htdocs/product/card.php
index c2d7b76dac3fde62e98d218fafe3c90fe4b08660..330e712cf1bc606f73b019e6042f025117a3ebac 100644
--- a/htdocs/product/card.php
+++ b/htdocs/product/card.php
@@ -553,7 +553,7 @@ if (empty($reshook))
     {
         if (($object->type == Product::TYPE_PRODUCT && $user->rights->produit->supprimer) || ($object->type == Product::TYPE_SERVICE && $user->rights->service->supprimer))
         {
-            $result = $object->delete($user);
+            $result = $object->delete($object->id);
         }
 
         if ($result > 0)
diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php
index bba6739ab680edc4df3f401cf10093a32fcdde51..bd5b37194c3c65d875101d6b707048320e02ab1e 100644
--- a/htdocs/product/class/api_products.class.php
+++ b/htdocs/product/class/api_products.class.php
@@ -232,6 +232,7 @@ class Products extends DolibarrApi
      * 
      * @param   int     $id   Product ID
      * @return  array
+     * FIXME Deleting a product/service does not work because the Product::delete() method uses a global $user but it is not set.
      */
     function delete($id)
     {
@@ -247,7 +248,7 @@ class Products extends DolibarrApi
 			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
 		}
         
-        return $this->product->delete(DolibarrApiAccess::$user);
+        return $this->product->delete($id);
     }
     
     /**
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index 908ccea68e96ef94e709621d639bd907aa7a1043..982b109da991b3527ab4ea14f2fa26b87fcb1c00 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -878,19 +878,18 @@ class Product extends CommonObject
 	/**
 	 *  Delete a product from database (if not used)
 	 *
-	 * 	@param	    User	$user		Object user that ask to delete
 	 *	@param      int		$id         Product id (usage of this is deprecated, delete should be called without parameters on a fetched object)
 	 *  @param      int     $notrigger  Do not execute trigger
 	 * 	@return		int					< 0 if KO, 0 = Not possible, > 0 if OK
 	 */
-	function delete($user, $id=0, $notrigger=0)
+	function delete($id=0, $notrigger=0)
 	{
 		// Deprecation warning
 		if ($id > 0) {
 			dol_syslog(__METHOD__ . " with parameter is deprecated", LOG_WARNING);
 		}
 
-		global $conf,$langs;
+		global $conf,$user,$langs;
 		require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
 
 		$error=0;
diff --git a/htdocs/webservices/server_productorservice.php b/htdocs/webservices/server_productorservice.php
index 9da26495f76a223ea2e85a271ce53eabeb4b047e..aa43dbb185c0ed1e3d24d00ab364001cc5f65446 100644
--- a/htdocs/webservices/server_productorservice.php
+++ b/htdocs/webservices/server_productorservice.php
@@ -841,6 +841,10 @@ function deleteProductOrService($authentication,$listofidstring)
     $error=0;
     $fuser=check_authentication($authentication,$error,$errorcode,$errorlabel);
 
+	// User must be defined to user authenticated
+    global $user;
+    $user=$fuser;
+
     $listofid=explode(',',trim($listofidstring));
     $listofiddeleted=array();
 
@@ -869,7 +873,7 @@ function deleteProductOrService($authentication,$listofidstring)
 	        }
 	        else
 			{
-		        $result=$newobject->delete($fuser);
+		        $result=$newobject->delete();
 		        if ($result <= 0)
 		        {
 		            $error++;
diff --git a/test/phpunit/ProductTest.php b/test/phpunit/ProductTest.php
index 87f290593f064d9ce86cb4d744a9994e7cb9a90c..199aace802c0fc940abea00dcdb880be44f1fd24 100644
--- a/test/phpunit/ProductTest.php
+++ b/test/phpunit/ProductTest.php
@@ -232,7 +232,7 @@ class ProductTest extends PHPUnit_Framework_TestCase
         $localobject=new Product($this->savdb);
         $result=$localobject->fetch($id);
 
-        $result=$localobject->delete($user);
+        $result=$localobject->delete($id);
         print __METHOD__." id=".$id." result=".$result."\n";
         $this->assertLessThan($result, 0);