diff --git a/ChangeLog b/ChangeLog
index 26ded2e941d1c4f0cc579d8a8ffd45920a82cf41..b6c474f6f926fed48ddeb46eb8dd387f7887a2a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -17,6 +17,7 @@ For users:
 - Fix: [ bug #1496 ] ACTION_DELETE trigger does not show trigger error
 - Fix: [ bug #1494 ] CATEGORY_CREATE and CATEGORY_MODIFY triggers do not intercept trigger action
 - Fix: [ bug #1502 ] DON_CREATE trigger does not intercept trigger action
+- Fix: [ bug #1505, #1504] Project trigger problem
 
 
 For translators:
diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php
index c2b8b95f608c6ec9ce32ebfd725b17c35ba01abe..82e9dd7287400c28e75d3fe6772889047377a986 100644
--- a/htdocs/projet/class/project.class.php
+++ b/htdocs/projet/class/project.class.php
@@ -130,15 +130,9 @@ class Project extends CommonObject
 
             if (!$notrigger)
             {
-                // Call triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface = new Interfaces($this->db);
-                $result = $interface->run_triggers('PROJECT_CREATE', $this, $user, $langs, $conf);
-                if ($result < 0)
-                {
-                    $error++;
-                    $this->errors = $interface->errors;
-                }
+                // Call trigger
+                $result=$this->call_trigger('PROJECT_CREATE',$user);
+                if ($result < 0) { $error++; }            
                 // End call triggers
             }
         }
@@ -199,6 +193,8 @@ class Project extends CommonObject
 
         if (dol_strlen(trim($this->ref)) > 0)
         {
+            $this->db->begin();
+            
             $sql = "UPDATE " . MAIN_DB_PREFIX . "projet SET";
             $sql.= " ref='" . $this->db->escape($this->ref) . "'";
             $sql.= ", title = '" . $this->db->escape($this->title) . "'";
@@ -216,15 +212,9 @@ class Project extends CommonObject
             {
                 if (!$notrigger)
                 {
-                    // Call triggers
-                    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                    $interface = new Interfaces($this->db);
-                    $result = $interface->run_triggers('PROJECT_MODIFY', $this, $user, $langs, $conf);
-                    if ($result < 0)
-                    {
-                        $error++;
-                        $this->errors = $interface->errors;
-                    }
+                    // Call trigger
+                    $result=$this->call_trigger('PROJECT_MODIFY',$user);
+                    if ($result < 0) { $error++; }            
                     // End call triggers
                 }
 
@@ -259,13 +249,24 @@ class Project extends CommonObject
                 		}
                 	}
                 }
+                if (! $error )
+                {
+                    $this->db->commit();
+                    $result = 1;
+                }
+                else
+                {
+                    $this->db->rollback();
+                    $result = -1;
+                }
 
-                $result = 1;
+                
             }
             else
             {
                 $this->error = $this->db->lasterror();
                 dol_syslog(get_class($this)."::Update error -2 " . $this->error, LOG_ERR);
+                $this->db->rollback();
                 $result = -2;
             }
         }
@@ -528,17 +529,18 @@ class Project extends CommonObject
 
             if (!$notrigger)
             {
-                // Call triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface = new Interfaces($this->db);
-                $result = $interface->run_triggers('PROJECT_DELETE', $this, $user, $langs, $conf);
+                // Call trigger
+                $result=$this->call_trigger('PROJECT_DELETE',$user);
                 if ($result < 0)
                 {
                     $error++;
-            		foreach ($interface->errors as $errmsg ) {
-            			dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR);
-            			$this->errors[] =$errmsg;
-            		}
+                    if (! empty($interface->errors)) 
+                    {
+                		foreach ($interface->errors as $errmsg ) {
+                			dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR);
+                			$this->errors[] =$errmsg;
+                		}
+                    }
                 }
                 // End call triggers
             }
@@ -587,16 +589,10 @@ class Project extends CommonObject
             $resql = $this->db->query($sql);
             if ($resql)
             {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface = new Interfaces($this->db);
-                $result = $interface->run_triggers('PROJECT_VALIDATE', $this, $user, $langs, $conf);
-                if ($result < 0)
-                {
-                    $error++;
-                    $this->errors = $interface->errors;
-                }
-                // Fin appel triggers
+                // Call trigger
+                $result=$this->call_trigger('PROJECT_VALIDATE',$user);
+                if ($result < 0) { $error++; }            
+                // End call triggers
 
                 if (!$error)
                 {
@@ -648,16 +644,10 @@ class Project extends CommonObject
             $resql = $this->db->query($sql);
             if ($resql)
             {
-                // Appel des triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface = new Interfaces($this->db);
-                $result = $interface->run_triggers('PROJECT_CLOSE', $this, $user, $langs, $conf);
-                if ($result < 0)
-                {
-                    $error++;
-                    $this->errors = $interface->errors;
-                }
-                // Fin appel triggers
+                // Call trigger
+                $result=$this->call_trigger('PROJECT_CLOSE',$user);
+                if ($result < 0) { $error++; }            
+                // End call triggers
 
                 if (!$error)
                 {
diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php
index 697d773f02c190e452fb60f9214287e98ec5274b..5dc3a6fd52e0fefa48eb3b46da582c6d9ee590b5 100644
--- a/htdocs/projet/class/task.class.php
+++ b/htdocs/projet/class/task.class.php
@@ -133,11 +133,9 @@ class Task extends CommonObject
 
             if (! $notrigger)
             {
-                // Call triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('TASK_CREATE',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
+                // Call trigger
+                $result=$this->call_trigger('TASK_CREATE',$user);
+                if ($result < 0) { $error++; }            
                 // End call triggers
             }
         }
@@ -303,11 +301,9 @@ class Task extends CommonObject
         {
             if (! $notrigger)
             {
-                // Call triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('TASK_MODIFY',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
+                // Call trigger
+                $result=$this->call_trigger('TASK_MODIFY',$user);
+                if ($result < 0) { $error++; }            
                 // End call triggers
             }
         }
@@ -394,11 +390,9 @@ class Task extends CommonObject
         {
             if (! $notrigger)
             {
-                // Call triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('TASK_DELETE',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
+                // Call trigger
+                $result=$this->call_trigger('TASK_DELETE',$user);
+                if ($result < 0) { $error++; }            
                 // End call triggers
             }
         }
@@ -744,11 +738,12 @@ class Task extends CommonObject
     {
         global $conf,$langs;
 
-		$error=0;
         $ret = 0;
 
         // Clean parameters
         if (isset($this->timespent_note)) $this->timespent_note = trim($this->timespent_note);
+        
+        $this->db->begin();
 
         $sql = "INSERT INTO ".MAIN_DB_PREFIX."projet_task_time (";
         $sql.= "fk_task";
@@ -772,11 +767,9 @@ class Task extends CommonObject
 
             if (! $notrigger)
             {
-                // Call triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('TASK_TIMESPENT_CREATE',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
+                // Call trigger
+                $result=$this->call_trigger('TASK_TIMESPENT_CREATE',$user);
+                if ($result < 0) { $this->db->rollback(); $ret=-1; }            
                 // End call triggers
             }
         }
@@ -784,6 +777,7 @@ class Task extends CommonObject
         {
             $this->error=$this->db->lasterror();
             dol_syslog(get_class($this)."::addTimeSpent error -1 ".$this->error,LOG_ERR);
+            $this->db->rollback();
             $ret = -1;
         }
 
@@ -798,6 +792,7 @@ class Task extends CommonObject
             {
                 $this->error=$this->db->lasterror();
                 dol_syslog(get_class($this)."::addTimeSpent error -2 ".$this->error, LOG_ERR);
+                $this->db->rollback();
                 $ret = -2;
             }
         }
@@ -813,10 +808,12 @@ class Task extends CommonObject
             {
                 $this->error=$this->db->lasterror();
                 dol_syslog(get_class($this)."::addTimeSpent error -2 ".$this->error, LOG_ERR);
+                $this->db->rollback();
                 $ret = -2;
             }
         }
 
+        if ($ret >=0) $this->db->commit();
         return $ret;
     }
 
@@ -879,11 +876,12 @@ class Task extends CommonObject
     {
     	global $conf,$langs;
 
-    	$error=0;
         $ret = 0;
 
         // Clean parameters
         if (isset($this->timespent_note)) $this->timespent_note = trim($this->timespent_note);
+        
+        $this->db->begin();
 
         $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time SET";
         $sql.= " task_date = '".$this->db->idate($this->timespent_date)."',";
@@ -897,19 +895,23 @@ class Task extends CommonObject
         {
             if (! $notrigger)
             {
-                // Call triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('TASK_TIMESPENT_MODIFY',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
+                // Call trigger
+                $result=$this->call_trigger('TASK_TIMESPENT_MODIFY',$user);
+                if ($result < 0) 
+                { 
+                    $this->db->rollback(); 
+                    $ret = -1; 
+                }
+                else $ret = 1;            
                 // End call triggers
             }
-            $ret = 1;
+            else $ret = 1;
         }
         else
         {
             $this->error=$this->db->lasterror();
             dol_syslog(get_class($this)."::updateTimeSpent error -1 ".$this->error,LOG_ERR);
+            $this->db->rollback();
             $ret = -1;
         }
 
@@ -925,11 +927,13 @@ class Task extends CommonObject
             if (! $this->db->query($sql) )
             {
                 $this->error=$this->db->lasterror();
+                $this->db->rollback();
                 dol_syslog(get_class($this)."::addTimeSpent error -2 ".$this->error, LOG_ERR);
                 $ret = -2;
             }
         }
 
+        if ($ret >= 0) $this->db->commit();
         return $ret;
     }
 
@@ -959,11 +963,9 @@ class Task extends CommonObject
         {
             if (! $notrigger)
             {
-                // Call triggers
-                include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-                $interface=new Interfaces($this->db);
-                $result=$interface->run_triggers('TASK_TIMESPENT_DELETE',$this,$user,$langs,$conf);
-                if ($result < 0) { $error++; $this->errors=$interface->errors; }
+                // Call trigger
+                $result=$this->call_trigger('TASK_TIMESPENT_DELETE',$user);
+                if ($result < 0) { $error++; }            
                 // End call triggers
             }
         }
diff --git a/htdocs/projet/fiche.php b/htdocs/projet/fiche.php
index 123b4a611b47a94bace28aa3241571d06005b5af..00fdf65d15a220ec16b5ed9189ef1c0122675c4d 100644
--- a/htdocs/projet/fiche.php
+++ b/htdocs/projet/fiche.php
@@ -340,7 +340,8 @@ if (empty($reshook))
 	    else
 	    {
 	        dol_syslog($object->error,LOG_DEBUG);
-	        $mesg='<div class="error">'.$langs->trans("CantRemoveProject").'</div>';
+	        setEventMessage($object->error,'errors');
+	        setEventMessage($object->errors,'errors');
 	    }
 	}
 
diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php
index 356eed55e6d80137f6beb7939f163656781c77e5..7c94401f86135e0efd4545233b11a76502f5adf4 100644
--- a/htdocs/projet/tasks.php
+++ b/htdocs/projet/tasks.php
@@ -130,6 +130,11 @@ if ($action == 'createtask' && $user->rights->projet->creer)
 			if ($taskid > 0)
 			{
 				$result = $task->add_contact($_POST["userid"], 'TASKEXECUTIVE', 'internal');
+			} 
+			else 
+			{
+			    setEventMessage($task->error,'errors');
+			    setEventMessage($task->errors,'errors');
 			}
 		}
 
@@ -193,6 +198,8 @@ if ($id > 0 || ! empty($ref))
 
 	$head=project_prepare_head($object);
 	dol_fiche_head($head, $tab, $langs->trans("Project"),0,($object->public?'projectpub':'project'));
+	
+	dol_htmloutput_mesg();
 
 	$param=($mode=='mine'?'&mode=mine':'');
 
diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php
index dd83cf57d8f460c3a517141f04668ee6d1411186..14339291c4ca4cbff5d5a51e2023c398aaae1c65 100644
--- a/htdocs/projet/tasks/task.php
+++ b/htdocs/projet/tasks/task.php
@@ -91,6 +91,12 @@ if ($action == 'update' && ! $_POST["cancel"] && $user->rights->projet->creer)
 		$ret = $extrafields->setOptionalsFromPost($extralabels,$object);
 
 		$result=$object->update($user);
+		
+		if ($result < 0)
+		{
+		    setEventMessage($object->error,'errors');
+		    setEventMessage($object->errors,'errors');
+		}
 	}
 	else
 	{
diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php
index f6c5a1840ea56d43a7c1f93b4194e1ff3ccdc26d..f6430ff4f559d3ae0d97dbe1e7cbda5147417027 100644
--- a/htdocs/projet/tasks/time.php
+++ b/htdocs/projet/tasks/time.php
@@ -140,7 +140,7 @@ if ($action == 'confirm_delete' && $confirm == "yes" && $user->rights->projet->c
 	$object->fetchTimeSpent($_GET['lineid']);
 	$result = $object->delTimeSpent($user);
 
-	if (!$result)
+	if ($result < 0)
 	{
 		$langs->load("errors");
 		setEventMessage($langs->trans($object->error),'errors');