diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php
index e4015812e6203d1b70620a117d8a5b0f174c58b0..e028c3cbbd8bf770e5d6358bb40368dce7a68d28 100644
--- a/htdocs/core/lib/project.lib.php
+++ b/htdocs/core/lib/project.lib.php
@@ -177,15 +177,21 @@ function project_timesheet_prepare_head($mode)
 
 	$h = 0;
 
-	$head[$h][0] = DOL_URL_ROOT."/projet/activity/perday.php".($mode?'?mode='.$mode:'');
-	$head[$h][1] = $langs->trans("InputPerDay");
-	$head[$h][2] = 'inputperday';
-	$h++;
+	if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERDAY))
+	{
+		$head[$h][0] = DOL_URL_ROOT."/projet/activity/perday.php".($mode?'?mode='.$mode:'');
+		$head[$h][1] = $langs->trans("InputPerDay");
+		$head[$h][2] = 'inputperday';
+		$h++;
+	}
 
-	$head[$h][0] = DOL_URL_ROOT."/projet/activity/pertime.php".($mode?'?mode='.$mode:'');
-	$head[$h][1] = $langs->trans("InputPerTime");
-	$head[$h][2] = 'inputpertime';
-	$h++;
+	if (empty($conf->global->PROJECT_DISABLE_TIMESHEET_PERTIME))
+	{
+		$head[$h][0] = DOL_URL_ROOT."/projet/activity/pertime.php".($mode?'?mode='.$mode:'');
+		$head[$h][1] = $langs->trans("InputPerTime");
+		$head[$h][2] = 'inputpertime';
+		$h++;
+	}
 
 	complete_head_from_modules($conf,$langs,null,$head,$h,'project_timesheet');
 
@@ -524,20 +530,22 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
 			// If we want all or we have a role on task, we show it
 			if (empty($mine) || ! empty($tasksrole[$lines[$i]->id]))
 			{
-				print "<tr ".$bc[$var].">\n";
-
-				// Project
-				print "<td>";
 				$projectstatic->id=$lines[$i]->fk_project;
 				$projectstatic->ref=$lines[$i]->projectref;
 				$projectstatic->public=$lines[$i]->public;
 				$projectstatic->label=$langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project];
+
+				$taskstatic->id=$lines[$i]->id;
+
+				print "<tr ".$bc[$var].">\n";
+
+				// Project
+				print "<td>";
 				print $projectstatic->getNomUrl(1);
 				print "</td>";
 
 				// Ref
 				print '<td>';
-				$taskstatic->id=$lines[$i]->id;
 				$taskstatic->ref=($lines[$i]->ref?$lines[$i]->ref:$lines[$i]->id);
 				print $taskstatic->getNomUrl(1);
 				print '</td>';
@@ -564,8 +572,9 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
 				print $formother->select_percent($lines[$i]->progress, $lines[$i]->id . 'progress');
 				print '</td>';
 
-				// Time spent
+				// Time spent by everybody
 				print '<td align="right">';
+				// $lines[$i]->duration is a denormalised field = summ of time spent by everybody for task. What we need is time consummed by user
 				if ($lines[$i]->duration)
 				{
 					print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">';
@@ -575,6 +584,13 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
 				else print '--:--';
 				print "</td>\n";
 
+				// Time spent by user
+				print '<td align="right">';
+				$tmptimespent=$taskstatic->getSummaryOfTimeSpent();
+				if ($tmptimespent['total_duration']) print convertSecondToTime($tmptimespent['total_duration'],'allhourmin');
+				else print '--:--';
+				print "</td>\n";
+
 				$disabledproject=1;$disabledtask=1;
 				//print "x".$lines[$i]->fk_project;
 				//var_dump($lines[$i]);
@@ -592,11 +608,13 @@ function projectLinesPerTime(&$inc, $parent, $lines, &$level, &$projectsrole, &$
 				}
 
 				// Form to add new time
-				print '<td class="nowrap" align="right">';
+				print '<td class="nowrap" align="center">';
 				$s='';
-				$s.=$form->select_date('',$lines[$i]->id,0,0,2,"addtime",1,0,1,$disabledtask);
-				$s.='&nbsp;&nbsp;&nbsp;';
-				$s.=$form->select_duration($lines[$i]->id,'',$disabledtask,'text',0,1);
+				$s.=$form->select_date('',$lines[$i]->id,1,1,2,"addtime",1,0,1,$disabledtask);
+				print $s;
+				print '</td><td align="right">';
+				//$s.='&nbsp;&nbsp;&nbsp;';
+				$s=$form->select_duration($lines[$i]->id.'duration','',$disabledtask,'text',0,1);
 				$s.='&nbsp;<input type="submit" class="button"'.($disabledtask?' disabled="disabled"':'').' value="'.$langs->trans("Add").'">';
 				print $s;
 				print '</td>';
@@ -713,9 +731,9 @@ function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$t
 				print $formother->select_percent($lines[$i]->progress, $lines[$i]->id . 'progress');
 				print '</td>';
 
-				// Time spent
-				/*
+				// Time spent by everybody
 				print '<td align="right">';
+				// $lines[$i]->duration is a denormalised field = summ of time spent by everybody for task. What we need is time consummed by user
 				if ($lines[$i]->duration)
 				{
 					print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">';
@@ -724,7 +742,13 @@ function projectLinesPerDay(&$inc, $parent, $lines, &$level, &$projectsrole, &$t
 				}
 				else print '--:--';
 				print "</td>\n";
-				*/
+
+				// Time spent by user
+				print '<td align="right">';
+				$tmptimespent=$taskstatic->getSummaryOfTimeSpent();
+				if ($tmptimespent['total_duration']) print convertSecondToTime($tmptimespent['total_duration'],'allhourmin');
+				else print '--:--';
+				print "</td>\n";
 
 				$disabledproject=1;$disabledtask=1;
 				//print "x".$lines[$i]->fk_project;
diff --git a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql
index 4f3c802a9da8bb7807e972e2bb06453196b47be5..3233022d3f9a5ee40cce82059e6edbd81e6918b4 100755
--- a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql
+++ b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql
@@ -19,6 +19,10 @@
 -- -- VMYSQL4.1 DELETE FROM llx_usergroup_user      WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup);
 
 
+UPDATE llx_projet_task_time SET task_datehour = task_date where task_datehour IS NULL;
+ALTER TABLE llx_projet_task_time ADD COLUMN task_date_withhour integer DEFAULT 0 after task_datehour;
+
+
 ALTER TABLE llx_commande_fournisseur MODIFY COLUMN date_livraison datetime; 
 
 -- Add id commandefourndet in llx_commande_fournisseur_dispatch to correct /fourn/commande/dispatch.php display when several times same product in supplier order
diff --git a/htdocs/install/mysql/tables/llx_projet_task_time.sql b/htdocs/install/mysql/tables/llx_projet_task_time.sql
index d5d89812b4a9f7a665203a4d58217f628a5ad647..d58b35146a7cb4c399d191c62238477b07e7ccd5 100644
--- a/htdocs/install/mysql/tables/llx_projet_task_time.sql
+++ b/htdocs/install/mysql/tables/llx_projet_task_time.sql
@@ -20,8 +20,9 @@ create table llx_projet_task_time
 (
   rowid            integer AUTO_INCREMENT PRIMARY KEY,
   fk_task          integer NOT NULL,
-  task_date        date,				-- only the day
-  task_datehour    datetime,			-- day + hour
+  task_date        date,					-- only the day
+  task_datehour    datetime,				-- day + hour
+  task_date_withhour integer DEFAULT 0;	-- 0 by default, 1 if date was entered with start hour
   task_duration    double,
   fk_user          integer,
   thm			   double(24,8),
diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang
index ba7353b015d8ecac3fe618204b98bcfc87739f68..be893d5256947cf78215bbc183a01578d90a79ac 100644
--- a/htdocs/langs/en_US/main.lang
+++ b/htdocs/langs/en_US/main.lang
@@ -220,6 +220,7 @@ Cards=Cards
 Card=Card
 Now=Now
 Date=Date
+DateAndHour=Date and hour
 DateStart=Date start
 DateEnd=Date end
 DateCreation=Creation date
diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang
index 936e86ad692c759f2f26b79c209b389eca316f82..53e7140be080ec7f4288e6c752ffb70349cb15fe 100644
--- a/htdocs/langs/en_US/projects.lang
+++ b/htdocs/langs/en_US/projects.lang
@@ -31,6 +31,8 @@ NoProject=No project defined or owned
 NbOpenTasks=Nb of opened tasks
 NbOfProjects=Nb of projects
 TimeSpent=Time spent
+TimeSpentByYou=Time spent by you
+TimeSpentByUser=Time spent by user
 TimesSpent=Time spent
 RefTask=Ref. task
 LabelTask=Label task
diff --git a/htdocs/projet/activity/perday.php b/htdocs/projet/activity/perday.php
index 692267d6965c41bb3abf49d9c6957d0f0aa2e101..9ca8f95ac4584edc146305fd9076d229d1173f56 100644
--- a/htdocs/projet/activity/perday.php
+++ b/htdocs/projet/activity/perday.php
@@ -83,8 +83,10 @@ $taskstatic = new Task($db);
 $title=$langs->trans("TimeSpent");
 if ($mine) $title=$langs->trans("MyTimeSpent");
 
+$usertoprocess=$user;
+
 //$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1);
-$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1);  // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project
+$projectsListId = $projectstatic->getProjectsAuthorizedForUser($usertoprocess,0,1);  // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project
 
 if ($id)
 {
@@ -94,8 +96,8 @@ if ($id)
 
 $onlyopened=1;	// or -1
 $tasksarray=$taskstatic->getTasksArray(0,0,($project->id?$project->id:$projectsListId),$socid,0,'',$onlyopened);    // We want to see all task of opened project i am allowed to see, not only mine. Later only mine will be editable later.
-$projectsrole=$taskstatic->getUserRolesForProjectsOrTasks($user,0,($project->id?$project->id:$projectsListId),0);
-$tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$user,($project->id?$project->id:$projectsListId),0);
+$projectsrole=$taskstatic->getUserRolesForProjectsOrTasks($usertoprocess,0,($project->id?$project->id:$projectsListId),0);
+$tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$usertoprocess,($project->id?$project->id:$projectsListId),0);
 //var_dump($tasksarray);
 //var_dump($projectsrole);
 //var_dump($taskrole);
@@ -184,7 +186,9 @@ print '<td>'.$langs->trans("RefTask").'</td>';
 print '<td>'.$langs->trans("LabelTask").'</td>';
 print '<td align="right">'.$langs->trans("PlannedWorkload").'</td>';
 print '<td align="right">'.$langs->trans("ProgressDeclared").'</td>';
-//print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
+print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
+if ($usertoprocess->id == $user->id) print '<td align="right">'.$langs->trans("TimeSpentByYou").'</td>';
+else print '<td align="right">'.$langs->trans("TimeSpentByUser").'</td>';
 
 $startday=dol_mktime(12, 0, 0, $startdayarray['first_month'], $startdayarray['first_day'], $startdayarray['first_year']);
 
@@ -204,7 +208,7 @@ if (count($tasksarray) > 0)
 	projectLinesPerDay($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
 
 	print '<tr class="liste_total">
-                <td class="liste_total" colspan="5" align="right">'.$langs->trans("Total").'</td>
+                <td class="liste_total" colspan="7" align="right">'.$langs->trans("Total").'</td>
                 <td class="liste_total" width="7%" align="center"><div id="totalDay[0]">&nbsp;</div></td>
                 <td class="liste_total" width="7%" align="center"><div id="totalDay[1]">&nbsp;</div></td>
                 <td class="liste_total" width="7%" align="center"><div id="totalDay[2]">&nbsp;</div></td>
diff --git a/htdocs/projet/activity/pertime.php b/htdocs/projet/activity/pertime.php
index 9d2772517729bd7383bbd29a98bbee0f60a726a9..9f2dc3e99ca659633194ce365206a0f69262d570 100644
--- a/htdocs/projet/activity/pertime.php
+++ b/htdocs/projet/activity/pertime.php
@@ -62,8 +62,8 @@ if ($action == 'addtime' && $user->rights->projet->creer)
     {
         if (intval($time) > 0)
         {
-            // Hours or minutes
-            if (preg_match("/([0-9]+)(hour|min)/",$key,$matches))
+            // Hours or minutes of duration
+            if (preg_match("/([0-9]+)duration(hour|min)/",$key,$matches))
             {
                 $id = $matches[1];
 				if ($id > 0)
@@ -86,15 +86,33 @@ if ($action == 'addtime' && $user->rights->projet->creer)
 		    $task->progress = GETPOST($key . 'progress', 'int');
 	        $task->timespent_duration = $val;
 	        $task->timespent_fk_user = $user->id;
-	        $task->timespent_date = dol_mktime(12,0,0,$_POST["{$key}month"],$_POST["{$key}day"],$_POST["{$key}year"]);
-	        $task->addTimeSpent($user);
+	        if (GETPOST($key."hour") != '' && GETPOST($key."hour") >= 0)	// If hour was entered
+	        {
+	        	$task->timespent_date = dol_mktime(GETPOST($key."hour"),GETPOST($key."min"),0,GETPOST($key."month"),GETPOST($key."day"),GETPOST($key."year"));
+	        	$task->timespent_withhour = 1;
+	        }
+	        else
+			{
+	        	$task->timespent_date = dol_mktime(12,0,0,GETPOST($key."month"),GETPOST($key."day"),GETPOST($key."year"));
+			}
+
+			$result=$task->addTimeSpent($user);
+			if ($result < 0)
+			{
+				setEventMessages($task->error, $task->errors, 'errors');
+				$error++;
+				break;
+			}
     	}
 
-    	setEventMessage($langs->trans("RecordSaved"));
+    	if (! $error)
+    	{
+	    	setEventMessage($langs->trans("RecordSaved"));
 
-        // Redirect to avoid submit twice on back
-        header('Location: '.$_SERVER["PHP_SELF"].'?id='.$projectid.($mode?'&mode='.$mode:''));
-        exit;
+    	    // Redirect to avoid submit twice on back
+        	header('Location: '.$_SERVER["PHP_SELF"].($projectid?'?id='.$projectid:'?').($mode?'&mode='.$mode:''));
+        	exit;
+    	}
     }
     else
     {
@@ -116,8 +134,9 @@ $taskstatic = new Task($db);
 $title=$langs->trans("TimeSpent");
 if ($mine) $title=$langs->trans("MyTimeSpent");
 
-//$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1);
-$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1);  // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project
+$usertoprocess = $user;
+
+$projectsListId = $projectstatic->getProjectsAuthorizedForUser($usertoprocess,0,1);  // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project
 
 if ($id)
 {
@@ -127,8 +146,8 @@ if ($id)
 
 $onlyopened=1;	// or -1
 $tasksarray=$taskstatic->getTasksArray(0,0,($project->id?$project->id:$projectsListId),$socid,0,'',$onlyopened);    // We want to see all task of opened project i am allowed to see, not only mine. Later only mine will be editable later.
-$projectsrole=$taskstatic->getUserRolesForProjectsOrTasks($user,0,($project->id?$project->id:$projectsListId),0);
-$tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$user,($project->id?$project->id:$projectsListId),0);
+$projectsrole=$taskstatic->getUserRolesForProjectsOrTasks($usertoprocess,0,($project->id?$project->id:$projectsListId),0);
+$tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0,$usertoprocess,($project->id?$project->id:$projectsListId),0);
 //var_dump($tasksarray);
 //var_dump($projectsrole);
 //var_dump($taskrole);
@@ -184,7 +203,10 @@ print '<td>'.$langs->trans("LabelTask").'</td>';
 print '<td align="right">'.$langs->trans("PlannedWorkload").'</td>';
 print '<td align="right">'.$langs->trans("ProgressDeclared").'</td>';
 print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
-print '<td colspan="2" align="right">'.$langs->trans("NewTimeSpent").'</td>';
+if ($usertoprocess->id == $user->id) print '<td align="right">'.$langs->trans("TimeSpentByYou").'</td>';
+else print '<td align="right">'.$langs->trans("TimeSpentByUser").'</td>';
+print '<td align="center">'.$langs->trans("DateAndHour").'</td>';
+print '<td align="center" colspan="2">'.$langs->trans("Duration").'</td>';
 print "</tr>\n";
 
 // By default, we can edit only tasks we are assigned to
diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php
index 4c3e3995b0350a59a73c8914a61b23a7ea7eb7e7..f9e07ab6e9d7418c234ad5845cdb4028e41ea763 100644
--- a/htdocs/projet/class/task.class.php
+++ b/htdocs/projet/class/task.class.php
@@ -61,6 +61,7 @@ class Task extends CommonObject
     var $timespent_old_duration;
     var $timespent_date;
     var $timespent_datehour;		// More accurate start date (same than timespent_date but includes hours, minutes and seconds)
+    var $timespent_withhour;		// 1 = we entered also start hours for timesheet line
     var $timespent_fk_user;
     var $timespent_note;
 
@@ -780,6 +781,7 @@ class Task extends CommonObject
         $sql.= "fk_task";
         $sql.= ", task_date";
         $sql.= ", task_datehour";
+        $sql.= ", task_date_withhour";
         $sql.= ", task_duration";
         $sql.= ", fk_user";
         $sql.= ", note";
@@ -787,6 +789,7 @@ class Task extends CommonObject
         $sql.= $this->id;
         $sql.= ", '".$this->db->idate($this->timespent_date)."'";
         $sql.= ", '".$this->db->idate($this->timespent_datehour)."'";
+        $sql.= ", ".(empty($this->timespent_withhour)?0:1);
         $sql.= ", ".$this->timespent_duration;
         $sql.= ", ".$this->timespent_fk_user;
         $sql.= ", ".(isset($this->timespent_note)?"'".$this->db->escape($this->timespent_note)."'":"null");
@@ -816,7 +819,6 @@ class Task extends CommonObject
         {
         	// Recalculate amount of time spent for task and update denormalized field
             $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task";
-            //$sql.= " SET duration_effective = (".$this->db->ifsql('duration_effective IS NULL', 0, 'duration_effective').") + ".price2num($this->timespent_duration);
             $sql.= " SET duration_effective = (SELECT SUM(task_duration) FROM ".MAIN_DB_PREFIX."projet_task_time as ptt where ptt.fk_task = ".$this->id.")";
 			if (isset($this->progress)) $sql.= ", progress = " . $this->progress;	// Do not overwrite value if not provided
             $sql.= " WHERE rowid = ".$this->id;
@@ -906,6 +908,8 @@ class Task extends CommonObject
         $sql.= " t.rowid,";
         $sql.= " t.fk_task,";
         $sql.= " t.task_date,";
+        $sql.= " t.task_datehour,";
+        $sql.= " t.task_date_withhour,";
         $sql.= " t.task_duration,";
         $sql.= " t.fk_user,";
         $sql.= " t.note";
@@ -922,7 +926,9 @@ class Task extends CommonObject
 
                 $this->timespent_id			= $obj->rowid;
                 $this->id					= $obj->fk_task;
-                $this->timespent_date		= $obj->task_date;
+                $this->timespent_date		= $this->db->jdate($obj->task_date);
+                $this->timespent_datehour   = $this->db->jdate($obj->task_datehour);
+                $this->timespent_withhour   = $obj->task_date_withhour;
                 $this->timespent_duration	= $obj->task_duration;
                 $this->timespent_fk_user	= $obj->fk_user;
                 $this->timespent_note		= $obj->note;
@@ -961,6 +967,7 @@ class Task extends CommonObject
         $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time SET";
         $sql.= " task_date = '".$this->db->idate($this->timespent_date)."',";
         $sql.= " task_datehour = '".$this->db->idate($this->timespent_datehour)."',";
+        $sql.= " task_date_withhour = ".(empty($this->timespent_withhour)?0:1);
         $sql.= " task_duration = ".$this->timespent_duration.",";
         $sql.= " fk_user = ".$this->timespent_fk_user.",";
         $sql.= " note = ".(isset($this->timespent_note)?"'".$this->db->escape($this->timespent_note)."'":"null");
@@ -995,7 +1002,7 @@ class Task extends CommonObject
             $newDuration = $this->timespent_duration - $this->timespent_old_duration;
 
             $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task";
-            $sql.= " SET duration_effective = duration_effective + '".$newDuration."'";
+            $sql.= " SET duration_effective = (SELECT SUM(task_duration) FROM ".MAIN_DB_PREFIX."projet_task_time as ptt where ptt.fk_task = ".$this->id.")";
             $sql.= " WHERE rowid = ".$this->id;
 
             dol_syslog(get_class($this)."::updateTimeSpent", LOG_DEBUG);
diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php
index 9951902ec5b240764fb5e89eeda941c45caebca3..20ef1714164af0f174fbc0e4de92bc6c9990e501 100644
--- a/htdocs/projet/tasks/time.php
+++ b/htdocs/projet/tasks/time.php
@@ -87,7 +87,15 @@ if ($action == 'addtimespent' && $user->rights->projet->creer)
 			$object->progress = GETPOST('progress', 'int');
 			$object->timespent_duration = $_POST["timespent_durationhour"]*60*60;	// We store duration in seconds
 			$object->timespent_duration+= $_POST["timespent_durationmin"]*60;		// We store duration in seconds
-			$object->timespent_date = dol_mktime(12,0,0,$_POST["timemonth"],$_POST["timeday"],$_POST["timeyear"]);
+	        if (GETPOST("timehour") != '' && GETPOST("timehour") >= 0)	// If hour was entered
+	        {
+				$object->timespent_date = dol_mktime(GETPOST("timehour"),GETPOST("timemin"),0,GETPOST("timemonth"),GETPOST("timeday"),GETPOST("timeyear"));
+				$object->timespent_withhour = 1;
+	        }
+	        else
+			{
+				$object->timespent_date = dol_mktime(12,0,0,GETPOST("timemonth"),GETPOST("timeday"),GETPOST("timeyear"));
+			}
 			$object->timespent_fk_user = $_POST["userid"];
 			$result=$object->addTimeSpent($user);
 			if ($result >= 0)
@@ -126,7 +134,15 @@ if ($action == 'updateline' && ! $_POST["cancel"] && $user->rights->projet->cree
 		$object->timespent_old_duration = $_POST["old_duration"];
 		$object->timespent_duration = $_POST["new_durationhour"]*60*60;	// We store duration in seconds
 		$object->timespent_duration+= $_POST["new_durationmin"]*60;		// We store duration in seconds
-		$object->timespent_date = dol_mktime(12,0,0,$_POST["timelinemonth"],$_POST["timelineday"],$_POST["timelineyear"]);
+        if (GETPOST("timelinehour") != '' && GETPOST("timelinehour") >= 0)	// If hour was entered
+        {
+			$object->timespent_date = dol_mktime(GETPOST("timelinehour"),GETPOST("timelinemin"),0,GETPOST("timelinemonth"),GETPOST("timelineday"),GETPOST("timelineyear"));
+			$object->timespent_withhour = 1;
+        }
+        else
+		{
+			$object->timespent_date = dol_mktime(12,0,0,GETPOST("timelinemonth"),GETPOST("timelineday"),GETPOST("timelineyear"));
+		}
 		$object->timespent_fk_user = $_POST["userid_line"];
 
 		$result=$object->updateTimeSpent($user);
@@ -341,7 +357,7 @@ if ($id > 0 || ! empty($ref))
 
 
 		/*
-		 * Add time spent
+		 * Form to add time spent
 		 */
 		if ($user->rights->projet->creer)
 		{
@@ -367,8 +383,9 @@ if ($id > 0 || ! empty($ref))
 
 			// Date
 			print '<td class="nowrap">';
-			$newdate=dol_mktime(12,0,0,$_POST["timemonth"],$_POST["timeday"],$_POST["timeyear"]);
-			print $form->select_date($newdate,'time','','','',"timespent_date");
+			//$newdate=dol_mktime(12,0,0,$_POST["timemonth"],$_POST["timeday"],$_POST["timeyear"]);
+			$newdate='';
+			print $form->select_date($newdate,'time',1,1,2,"timespent_date");
 			print '</td>';
 
 			// Contributor
@@ -410,13 +427,13 @@ if ($id > 0 || ! empty($ref))
 		/*
 		 *  List of time spent
 		 */
-		$sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note";
+		$sql = "SELECT t.rowid, t.task_date, t.task_datehour, t.task_date_withhour, t.task_duration, t.fk_user, t.note";
 		$sql.= ", u.lastname, u.firstname";
 		$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
 		$sql .= " , ".MAIN_DB_PREFIX."user as u";
 		$sql .= " WHERE t.fk_task =".$object->id;
 		$sql .= " AND t.fk_user = u.rowid";
-		$sql .= " ORDER BY t.task_date DESC";
+		$sql .= " ORDER BY t.task_date DESC, t.task_datehour DESC, t.rowid DESC";
 
 		$var=true;
 		$resql = $db->query($sql);
@@ -459,15 +476,18 @@ if ($id > 0 || ! empty($ref))
 			$var=!$var;
 			print "<tr ".$bc[$var].">";
 
+			$date1=$db->jdate($task_time->task_date);
+			$date2=$db->jdate($task_time->task_datehour);
+
 			// Date
-			print '<td>';
+			print '<td class="nowrap">';
 			if ($_GET['action'] == 'editline' && $_GET['lineid'] == $task_time->rowid)
 			{
-				print $form->select_date($db->jdate($task_time->task_date),'timeline','','','',"timespent_date");
+				print $form->select_date($db->jdate($date2?$date2:$date1),'timeline',1,1,2,"timespent_date");
 			}
 			else
 			{
-				print dol_print_date($db->jdate($task_time->task_date),'day');
+				print dol_print_date($date2?$date2:$date1,($task_time->task_date_withhour?'dayhour':'day'));
 			}
 			print '</td>';
 
@@ -480,6 +500,7 @@ if ($id > 0 || ! empty($ref))
 					$contactsoftask[]=$task_time->fk_user;
 				}
 				if (count($contactsoftask)>0) {
+					print img_object('','user','class="hideonsmartphone"');
 					print $form->select_dolusers($task_time->fk_user,'userid_line',0,'',0,'',$contactsoftask);
 				}else {
 					print img_error($langs->trans('FirstAddRessourceToAllocateTime')).$langs->trans('FirstAddRessourceToAllocateTime');