diff --git a/htdocs/commande/liste.php b/htdocs/commande/liste.php
index 18e76541ae3e1c14e3aca8b23d94256103352820..93a1fd2eeb7781db46d6e0c7fd59419ba2c0bda8 100644
--- a/htdocs/commande/liste.php
+++ b/htdocs/commande/liste.php
@@ -42,6 +42,7 @@ $sref_client=GETPOST('sref_client','alpha');
 $snom=GETPOST('snom','alpha');
 $sall=GETPOST('sall');
 $socid=GETPOST('socid','int');
+$search_user=GETPOST('search_user','int');
 
 // Security check
 $id = (GETPOST('orderid')?GETPOST('orderid'):GETPOST('id','int'));
@@ -80,6 +81,11 @@ $sql.= ' c.date_valid, c.date_commande, c.date_livraison, c.fk_statut, c.facture
 $sql.= ' FROM '.MAIN_DB_PREFIX.'societe as s';
 $sql.= ', '.MAIN_DB_PREFIX.'commande as c';
 if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
+if ($search_user > 0)
+{
+    $sql.=", ".MAIN_DB_PREFIX."element_contact as ec";
+    $sql.=", ".MAIN_DB_PREFIX."c_type_contact as tc";
+}
 $sql.= ' WHERE c.fk_soc = s.rowid';
 $sql.= ' AND c.entity = '.$conf->entity;
 if ($socid)	$sql.= ' AND s.rowid = '.$socid;
@@ -114,19 +120,29 @@ if ($viewstatut <> '')
 }
 if ($ordermonth > 0)
 {
-	$sql.= " AND date_format(c.date_valid, '%Y-%m') = '".$orderyear."-".$ordermonth."'";    // TODO do not use date_format but a between
+    if ($orderyear > 0 && empty($day))
+    $sql.= " AND c.date_valid BETWEEN '".$db->idate(dol_get_first_day($orderyear,$ordermonth,false))."' AND '".$db->idate(dol_get_last_day($orderyear,$ordermonth,false))."'";
+    else if ($orderyear > 0 && ! empty($day))
+    $sql.= " AND c.date_valid BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $ordermonth, $day, $orderyear))."' AND '".$db->idate(dol_mktime(23, 59, 59, $ordermonth, $day, $orderyear))."'";
+    else
+    $sql.= " AND date_format(c.date_valid, '%m') = '".$ordermonth."'";
 }
-if ($orderyear > 0)
+else if ($orderyear > 0)
 {
-	$sql.= " AND date_format(c.date_valid, '%Y') = '".$orderyear."'";
+    $sql.= " AND c.date_valid BETWEEN '".$db->idate(dol_get_first_day($orderyear,1,false))."' AND '".$db->idate(dol_get_last_day($orderyear,12,false))."'";
 }
 if ($deliverymonth > 0)
 {
-	$sql.= " AND date_format(c.date_livraison, '%Y-%m') = '".$deliveryyear."-".$deliverymonth."'";
+    if ($deliveryyear > 0 && empty($day))
+    $sql.= " AND c.date_livraison BETWEEN '".$db->idate(dol_get_first_day($deliveryyear,$deliverymonth,false))."' AND '".$db->idate(dol_get_last_day($deliveryyear,$deliverymonth,false))."'";
+    else if ($deliveryyear > 0 && ! empty($day))
+    $sql.= " AND c.date_livraison BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $deliverymonth, $day, $deliveryyear))."' AND '".$db->idate(dol_mktime(23, 59, 59, $deliverymonth, $day, $deliveryyear))."'";
+    else
+    $sql.= " AND date_format(c.date_livraison, '%m') = '".$deliverymonth."'";
 }
-if ($deliveryyear > 0)
+else if ($deliveryyear > 0)
 {
-	$sql.= " AND date_format(c.date_livraison, '%Y') = '".$deliveryyear."'";
+    $sql.= " AND c.date_livraison BETWEEN '".$db->idate(dol_get_first_day($deliveryyear,1,false))."' AND '".$db->idate(dol_get_last_day($deliveryyear,12,false))."'";
 }
 if (!empty($snom))
 {
@@ -136,12 +152,16 @@ if (!empty($sref_client))
 {
 	$sql.= ' AND c.ref_client LIKE \'%'.$db->escape($sref_client).'%\'';
 }
+if ($search_user > 0)
+{
+    $sql.= " AND ec.fk_c_type_contact = tc.rowid AND tc.element='commande' AND tc.source='internal' AND ec.element_id = c.rowid AND ec.fk_socpeople = ".$search_user;
+}
 
 $sql.= ' ORDER BY '.$sortfield.' '.$sortorder;
 $sql.= $db->plimit($limit + 1,$offset);
 
+//print $sql;
 $resql = $db->query($sql);
-
 if ($resql)
 {
 	if ($socid)
@@ -172,7 +192,26 @@ if ($resql)
 	$num = $db->num_rows($resql);
 	print_barre_liste($title, $page, 'liste.php','&amp;socid='.$socid.'&amp;viewstatut='.$viewstatut,$sortfield,$sortorder,'',$num);
 	$i = 0;
+
+	// Lignes des champs de filtre
+	print '<form method="GET" action="'.$_SERVER["PHP_SELF"].'">';
+
 	print '<table class="noborder" width="100%">';
+
+	// If the user can view prospects other than his'
+	if ($user->rights->societe->client->voir || $socid)
+	{
+	    $moreforfilter.=$langs->trans('LinkedToSpecificUsers'). ': ';
+	    $moreforfilter.=$form->select_dolusers($search_user,'search_user',1);
+	}
+	if ($moreforfilter)
+	{
+	    print '<tr class="liste_titre">';
+	    print '<td class="liste_titre" colspan="9">';
+	    print $moreforfilter;
+	    print '</td></tr>';
+	}
+
 	print '<tr class="liste_titre">';
 	print_liste_field_titre($langs->trans('Ref'),'liste.php','c.ref','','&amp;socid='.$socid.'&amp;viewstatut='.$viewstatut,'width="25%"',$sortfield,$sortorder);
 	print_liste_field_titre($langs->trans('Company'),'liste.php','s.nom','','&amp;socid='.$socid.'&amp;viewstatut='.$viewstatut,'',$sortfield,$sortorder);
@@ -181,8 +220,6 @@ if ($resql)
 	print_liste_field_titre($langs->trans('DeliveryDate'),'liste.php','c.date_livraison','','&amp;socid='.$socid.'&amp;viewstatut='.$viewstatut, 'align="right"',$sortfield,$sortorder);
 	print_liste_field_titre($langs->trans('Status'),'liste.php','c.fk_statut','','&amp;socid='.$socid.'&amp;viewstatut='.$viewstatut,'align="right"',$sortfield,$sortorder);
 	print '</tr>';
-	// Lignes des champs de filtre
-	print '<form method="get" action="liste.php">';
 	print '<tr class="liste_titre">';
 	print '<td class="liste_titre">';
 	print '<input class="flat" size="10" type="text" name="sref" value="'.$sref.'">';
@@ -195,7 +232,7 @@ if ($resql)
 	print '</td><td align="right" class="liste_titre">';
 	print '<input type="image" class="liste_titre" name="button_search" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png"  value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
 	print '</td></tr>';
-	print '</form>';
+
 	$var=True;
 	$generic_commande = new Commande($db);
 	while ($i < min($num,$limit))
@@ -268,6 +305,9 @@ if ($resql)
 		$i++;
 	}
 	print '</table>';
+
+	print '</form>';
+
 	$db->free($resql);
 }
 else
@@ -275,7 +315,7 @@ else
 	print dol_print_error($db);
 }
 
-$db->close();
-
 llxFooter();
+
+$db->close();
 ?>
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 0a779607eb06c15ed9d26dc68617da521db87e88..a8ea693b3b0a89b46a43c4a2c87c922e0e1e4070 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -3252,7 +3252,7 @@ else
         else $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facturedet as fd ON fd.fk_facture = f.rowid';
         if ($search_user > 0)
         {
-            $sql.=", ".MAIN_DB_PREFIX."element_contact as c";
+            $sql.=", ".MAIN_DB_PREFIX."element_contact as ec";
             $sql.=", ".MAIN_DB_PREFIX."c_type_contact as tc";
         }
         $sql.= ' WHERE f.fk_soc = s.rowid';
@@ -3304,7 +3304,7 @@ else
         }
         if ($search_user > 0)
         {
-            $sql.= " AND c.fk_c_type_contact = tc.rowid AND tc.element='propal' AND tc.source='internal' AND c.element_id = f.rowid AND c.fk_socpeople = ".$search_user;
+            $sql.= " AND ec.fk_c_type_contact = tc.rowid AND tc.element='propal' AND tc.source='internal' AND ec.element_id = f.rowid AND ec.fk_socpeople = ".$search_user;
         }
         if (! $sall)
         {