diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php
index 93c0e6cf7f004ef30876b623df39d9be2c1992f4..26cdeec151c35b8b8f0d06da1c47c4420b0d9c8b 100644
--- a/htdocs/projet/class/project.class.php
+++ b/htdocs/projet/class/project.class.php
@@ -398,7 +398,7 @@ class Project extends CommonObject
      * 	@param		string		$datefieldname	name of table associated of the type
      *  @param		string		$dates			Start date (at 00:00:00)
      *  @param		string		$datee			End date (at 23:00:00)
-     * 	@return		mixed						List of orders linked to project, < 0 or string if error
+     * 	@return		mixed						Array list of object ids linked to project, < 0 or string if error
      */
     function get_element_list($type, $tablename, $datefieldname='', $dates='', $datee='')
     {
diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php
index 2e447e1556849a1b9a5a3e4ae1b5f254c3241583..cf9ccbcc4ce7a19f63cc4e525a9a8534be578986 100644
--- a/htdocs/projet/element.php
+++ b/htdocs/projet/element.php
@@ -272,6 +272,8 @@ foreach ($listofreferent as $key => $value)
 
 	if ($qualified)
 	{
+		$element = new $classname($db);
+
 		if (! $showdatefilter)
 		{
 			print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$projectid.'" method="post">';
@@ -336,6 +338,9 @@ foreach ($listofreferent as $key => $value)
 			$total_ht_by_third = 0;
 			$total_ttc_by_third = 0;
 
+			$saved_third_id = 0;
+			$breakline = '';
+
 			if (canApplySubtotalOn($tablename)) {
 			   // Appel du mon code de tri :
 			   $elementarray = sortElementsByClientName($elementarray);
@@ -344,11 +349,22 @@ foreach ($listofreferent as $key => $value)
 			$num=count($elementarray);
 			for ($i = 0; $i < $num; $i++)
 			{
-				$element = new $classname($db);
 				$element->fetch($elementarray[$i]);
 				$element->fetch_thirdparty();
 				//print $classname;
 
+				if ($breakline && $saved_third_id != $element->thirdparty->id)
+				{
+					print $breakline;
+					$var = true;
+
+					$saved_third_id = $element->thirdparty->id;
+					$breakline = '';
+
+					$total_ht_by_third=0;
+					$total_ttc_by_third=0;
+				}
+
 				$qualifiedfortotal=true;
 				if ($key == 'invoice')
 				{
@@ -417,34 +433,26 @@ foreach ($listofreferent as $key => $value)
 					$total_ttc_by_third += $element->total_ttc;
 				}
 
-				// Autre partie de mon code :
 				if (canApplySubtotalOn($tablename))
 				{
-					$next_third_id = (isset($elementarray[$i+1])) ? $elementarray[$i+1] : '';
-					$third_id = $element->thirdparty->id;
-					if ($third_id != $next_third_id)
-					{
-						print '<tr class="liste_total">';
-						print     '<td colspan="2">';
-						print    '</td>';
-						print     '<td>';
-						print    '</td>';
-						print    '<td class="right">';
-						print $langs->trans('SubTotal').' : ';
-						if (is_object($element->thirdparty)) print $element->thirdparty->getNomUrl(0,'',48);
-						print    '</td>';
-						print     '<td align="right">'.price($total_ht).'</td>';
-						print     '<td align="right">'.price($total_ttc).'</td>';
-						print     '<td></td>';
-						print '</tr>';
-
-						$total_ht_by_third = 0;
-						$total_ttc_by_third = 0;
-						$var=true;
-					}
+					$breakline='<tr class="liste_total">';
+					$breakline.='<td colspan="2">';
+					$breakline.='</td>';
+					$breakline.='<td>';
+					$breakline.='</td>';
+					$breakline.='<td class="right">';
+					$breakline.=$langs->trans('SubTotal').' : ';
+					if (is_object($element->thirdparty)) $breakline.=$element->thirdparty->getNomUrl(0,'',48);
+					$breakline.='</td>';
+					$breakline.='<td align="right">'.price($total_ht_by_third).'</td>';
+					$breakline.='<td align="right">'.price($total_ttc_by_third).'</td>';
+					$breakline.='<td></td>';
+					$breakline.='</tr>';
 				}
 			}
 
+			if ($breakline) print $breakline;
+
 			print '<tr class="liste_total"><td colspan="4">'.$langs->trans("Number").': '.$i.'</td>';
 			if (empty($value['disableamount'])) print '<td align="right" width="100">'.$langs->trans("TotalHT").' : '.price($total_ht).'</td>';
 			else print '<td></td>';
@@ -524,6 +532,8 @@ foreach ($listofreferent as $key => $value)
 	$margin = $value['margin'];
 	if (isset($margin))
 	{
+		$element = new $classname($db);
+
 		$elementarray = $project->get_element_list($key, $tablename);
 		if (count($elementarray)>0 && is_array($elementarray))
 		{
@@ -533,7 +543,6 @@ foreach ($listofreferent as $key => $value)
 			$num=count($elementarray);
 			for ($i = 0; $i < $num; $i++)
 			{
-				$element = new $classname($db);
 				$element->fetch($elementarray[$i]);
 				$element->fetch_thirdparty();
 				//print $classname;
@@ -607,23 +616,25 @@ function sortElementsByClientName($elementarray)
 	$element = new $classname($db);
 
 	$clientname = array();
-	foreach ($elementarray as $key => $id)
+	foreach ($elementarray as $key => $id)	// id = id of object
 	{
 		if (empty($clientname[$id]))
 		{
-			$element->id = $id;
+			$element->fetch($id);
 			$element->fetch_thirdparty();
+
 			$clientname[$id] = $element->thirdparty->name;
 		}
 	}
 
-	asort($clientname);
+	//var_dump($clientname);
+	asort($clientname);	// sort on name
 
 	$elementarray = array();
-	foreach ($clientname as $id => $name) {
+	foreach ($clientname as $id => $name)
+	{
 		$elementarray[] = $id;
 	}
 
 	return $elementarray;
 }
-