diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php
index fdd61727069e76e9468d95f5a5798ff9ac1a8b98..c07b275aaef8c9d6446f1f9605f2082efbccd515 100644
--- a/htdocs/compta/paiement/cheque/card.php
+++ b/htdocs/compta/paiement/cheque/card.php
@@ -221,7 +221,26 @@ if ($action == 'confirm_valide' && $confirm == 'yes' && $user->rights->banque->c
 	}
 	else
 	{
-		setEventMessage($paiement->error, 'errors');
+		setEventMessage($object->error, 'errors');
+	}
+}
+
+if ($action == 'confirm_reject_check' && $confirm == 'yes' && $user->rights->banque->cheque)
+{
+	$reject_date = dol_mktime(0, 0, 0, GETPOST('rejectdate_month'), GETPOST('rejectdate_day'), GETPOST('rejectdate_year'));
+	$rejected_check = GETPOST('bankid');
+	
+	$object->fetch($id);
+	$paiement_id = $object->reject_check($rejected_check, $reject_date);
+	if ($paiement_id > 0)
+	{
+		setEventMessage($langs->trans("CheckRejectedAndInvoicesReopened"));
+		header("Location: ".DOL_URL_ROOT.'/compta/paiement/card.php?id='.$paiement_id);
+		exit;
+	}
+	else
+	{
+		setEventMessage($object->error, 'errors');
 	}
 }
 
@@ -334,6 +353,18 @@ else
 		print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans("ValidateCheckReceipt"), $langs->trans("ConfirmValidateCheckReceipt"), 'confirm_valide','','',1);
 
 	}
+	
+	/*
+	 * Confirm check rejection
+	 */
+	if ($action == 'reject_check')
+	{
+		$formquestion = array(
+			array('type' => 'hidden','name' => 'bankid','value' => GETPOST('lineid')),
+			array('type' => 'date','name' => 'rejectdate_','label' => $langs->trans("RejectCheckDate"),'value' => dol_now())
+		);
+		print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans("RejectCheck"), $langs->trans("ConfirmRejectCheck"), 'confirm_reject_check',$formquestion,'',1);
+	}
 }
 
 $accounts = array();
@@ -377,10 +408,9 @@ if ($action == 'new')
 
 	$sql = "SELECT ba.rowid as bid, b.datec as datec, b.dateo as date, b.rowid as chqid, ";
 	$sql.= " b.amount, ba.label, b.emetteur, b.num_chq, b.banque";
-	$sql.= " FROM ".MAIN_DB_PREFIX."bank as b,";
-	$sql.= " ".MAIN_DB_PREFIX."bank_account as ba";
+	$sql.= " FROM ".MAIN_DB_PREFIX."bank as b";
+	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_account as ba ON (b.fk_account = ba.rowid)";
 	$sql.= " WHERE b.fk_type = 'CHQ'";
-	$sql.= " AND b.fk_account = ba.rowid";
 	$sql.= " AND ba.entity IN (".getEntity('bank_account', 1).")";
 	$sql.= " AND b.fk_bordereau = 0";
 	$sql.= " AND b.amount > 0";
@@ -599,12 +629,11 @@ else
 	// Liste des cheques
 	$sql = "SELECT b.rowid, b.amount, b.num_chq, b.emetteur,";
 	$sql.= " b.dateo as date, b.datec as datec, b.banque,";
-	$sql.= " p.rowid as pid, ba.rowid as bid";
+	$sql.= " p.rowid as pid, ba.rowid as bid, p.statut";
 	$sql.= " FROM ".MAIN_DB_PREFIX."bank_account as ba";
-	$sql.= ", ".MAIN_DB_PREFIX."bank as b";
+	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank as b ON (b.fk_account = ba.rowid)";
 	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement as p ON p.fk_bank = b.rowid";
-	$sql.= " WHERE ba.rowid = b.fk_account";
-	$sql.= " AND ba.entity IN (".getEntity('bank_account', 1).")";
+	$sql.= " WHERE ba.entity IN (".getEntity('bank_account', 1).")";
 	$sql.= " AND b.fk_type= 'CHQ'";
 	$sql.= " AND b.fk_bordereau = ".$object->id;
 	$sql.= " ORDER BY $sortfield $sortorder";
@@ -625,7 +654,9 @@ else
 		print_liste_field_titre($langs->trans("Bank"),$_SERVER["PHP_SELF"],"b.banque", "",$param,"",$sortfield,$sortorder);
 		print_liste_field_titre($langs->trans("Amount"),$_SERVER["PHP_SELF"],"b.amount", "",$param,'align="right"',$sortfield,$sortorder);
 		print_liste_field_titre($langs->trans("LineRecord"),$_SERVER["PHP_SELF"],"b.rowid", "",$param,'align="center"',$sortfield,$sortorder);
+		print_liste_field_titre($langs->trans("Payment"),$_SERVER["PHP_SELF"],"p.rowid", "",$param,'align="center"',$sortfield,$sortorder);
 		print_liste_field_titre('');
+
 		print "</tr>\n";
 		$i=1;
 		$var=false;
@@ -654,13 +685,31 @@ else
 				print '&nbsp;';
 			}
 			print '</td>';
+			print '<td align="center">';
+			$paymentstatic->id=$objp->pid;
+			$paymentstatic->ref=$objp->pid;
+			if ($paymentstatic->id)
+			{
+				print $paymentstatic->getNomUrl(1);
+			}
+			else
+			{
+				print '&nbsp;';
+			}
+			print '</td>';
 			if ($object->statut == 0)
 			{
 				print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=remove&amp;lineid='.$objp->rowid.'">'.img_delete().'</a></td>';
 			}
 			else
 			{
-				print '<td>&nbsp;</td>';
+				if($objp->statut == 0)
+				{
+					print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=reject_check&amp;lineid='.$objp->rowid.'">'.img_picto($langs->trans("RejectCheck"),'disable').'</a></td>';
+				}
+				else if($objp->statut == 2) {
+					print '<td align="right">'.img_picto($langs->trans('CheckRejected'),'statut8').'</a></td>';
+				}
 			}
 			print '</tr>';
 			$var=!$var;
diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php
index 2dc1efe04b40395e7f07f21386efbade22230a4c..82047342d35376c06982056973001499b5ed5dce 100644
--- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php
+++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php
@@ -25,6 +25,7 @@
  *	\brief      File with class to manage cheque delivery receipts
  */
 require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
+require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
 
 
 /**
@@ -647,17 +648,82 @@ class RemiseCheque extends CommonObject
 
 			$resql = $this->db->query($sql);
 			if ($resql)
-	  {
-	  	$this->updateAmount();
-	  }
-	  else
-	  {
-	  	$this->errno = -1032;
-	  	dol_syslog("RemiseCheque::removeCheck ERREUR UPDATE ($this->errno)");
-	  }
+			{
+				$this->updateAmount();
+			}
+			else
+			{
+				$this->errno = -1032;
+				dol_syslog("RemiseCheque::removeCheck ERREUR UPDATE ($this->errno)");
+			}
 		}
 		return 0;
 	}
+	
+	/**
+	 *	Check rejection management
+	 *	Reopen linked invoices and saves a new negative payment
+	 *
+	 *	@param	int		$bank_id 		Id of bank line concerned
+	 *	@param	date	$rejection_date	Date to use on the negative payment
+	 * 	@return	int
+	 */
+	function reject_check($bank_id, $rejection_date)
+	{
+		global $db, $user;
+		
+		$payment = new Paiement($db);
+		$payment->fetch(0,$bank_id);
+		
+		$bankaccount = $payment->fk_account;
+		
+		// Get invoice list to reopen them
+		$sql = 'SELECT pf.fk_facture, pf.amount';
+		$sql.= ' FROM '.MAIN_DB_PREFIX.'paiement_facture as pf';
+		$sql.= ' WHERE pf.fk_paiement = '.$payment->id;
+		
+		$resql=$db->query($sql);
+		if ($resql)
+		{
+			$rejectedPayment = new Paiement($db);
+			$rejectedPayment->amounts = array();
+			$rejectedPayment->datepaye = $rejection_date;
+			$rejectedPayment->paiementid = 7; // type of payment: check
+			$rejectedPayment->num_paiement = $payment->numero;
+			
+			while($obj = $db->fetch_object($resql)) {
+				$invoice = new Facture($db);
+				$invoice->fetch($obj->fk_facture);
+				$invoice->set_unpaid($user);
+				
+				$rejectedPayment->amounts[$obj->fk_facture] = price2num($obj->amount) * -1;
+			}
+			
+			if ($rejectedPayment->create($user) > 0)
+			{
+				$result=$rejectedPayment->addPaymentToBank($user,'payment','(CheckRejected)',$bankaccount,'','');
+				if ($result > 0)
+				{
+					$payment->reject();
+					return $rejectedPayment->id;
+				}
+				else
+				{
+					return -1;
+				}
+			}
+			else
+			{
+				return -1;
+			}
+		}
+		else
+		{
+			$this->error=$this->db->error();
+			return -1;
+		}
+	}
+	
 	/**
 	 *	Charge les proprietes ref_previous et ref_next
 	 *
diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php
index 60d669fcacfb7b29da7665a12c9f89768d113696..dc4be17aa07b23307121e2ea7c75c1d114d79f2b 100644
--- a/htdocs/compta/paiement/class/paiement.class.php
+++ b/htdocs/compta/paiement/class/paiement.class.php
@@ -78,11 +78,11 @@ class Paiement extends CommonObject
 	/**
 	 *    Load payment from database
 	 *
-	 *    @param	int		$id     Id of payment to get
-	 *    @param	int		$ref    Ref of payment to get (same as $id)
-	 *    @return   int     		<0 if KO, 0 if not found, >0 if OK
+	 *    @param	int		$id			Id of payment to get
+	 *    @param	int		$fk_bank	Id of bank line associated to payment
+	 *    @return   int		<0 if KO, 0 if not found, >0 if OK
 	 */
-	function fetch($id, $ref='')
+	function fetch($id, $fk_bank='')
 	{
 		$sql = 'SELECT p.rowid, p.datep as dp, p.amount, p.statut, p.fk_bank,';
 		$sql.= ' c.code as type_code, c.libelle as type_libelle,';
@@ -91,8 +91,8 @@ class Paiement extends CommonObject
 		$sql.= ' FROM '.MAIN_DB_PREFIX.'c_paiement as c, '.MAIN_DB_PREFIX.'paiement as p';
 		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid ';
 		$sql.= ' WHERE p.fk_paiement = c.id';
-		if ($ref)
-			$sql.= ' AND p.rowid = '.$ref;
+		if ($fk_bank)
+			$sql.= ' AND p.fk_bank = '.$fk_bank;
 		else
 			$sql.= ' AND p.rowid = '.$id;
 
@@ -116,7 +116,8 @@ class Paiement extends CommonObject
 				$this->type_code      = $obj->type_code;
 				$this->statut         = $obj->statut;
 
-				$this->bank_account   = $obj->fk_account;
+				$this->bank_account   = $obj->fk_account; // deprecated
+				$this->fk_account     = $obj->fk_account;
 				$this->bank_line      = $obj->fk_bank;
 
 				$this->db->free($result);
@@ -669,6 +670,29 @@ class Paiement extends CommonObject
 			return -1;
 		}
 	}
+	
+	/**
+	 *    Reject payment
+	 *
+	 *    @return     int     <0 if KO, >0 if OK
+	 */
+	function reject()
+	{
+		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET statut = 2 WHERE rowid = '.$this->id;
+
+		dol_syslog(get_class($this).'::reject', LOG_DEBUG);
+		$result = $this->db->query($sql);
+		if ($result)
+		{
+			return 1;
+		}
+		else
+		{
+			$this->error=$this->db->lasterror();
+			dol_syslog(get_class($this).'::reject '.$this->error);
+			return -1;
+		}
+	}
 
 	/*
 	 *    \brief      Information sur l'objet
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 74188b069fac157a7bf5fd5464f1679b03bcd586..d5f0c367c221fe09ecf0e1c992ba7f4f6e030c49 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -3167,6 +3167,18 @@ class Form
                             $i++;
                         }
                     }
+					else if ($input['type'] == 'date')
+					{
+						$more.='<tr><td>'.$input['label'].'</td>';
+						$more.='<td colspan="2" align="left">';
+						$more.=$this->select_date($input['value'],$input['name'],0,0,0,'',1,0,1);
+						$more.='</td></tr>'."\n";
+						$formquestion[] = array('name'=>$input['name'].'day');
+						$formquestion[] = array('name'=>$input['name'].'month');
+						$formquestion[] = array('name'=>$input['name'].'year');
+						$formquestion[] = array('name'=>$input['name'].'hour');
+						$formquestion[] = array('name'=>$input['name'].'min');
+					}
                     else if ($input['type'] == 'other')
                     {
                         $more.='<tr><td>';
diff --git a/htdocs/core/js/lib_head.js b/htdocs/core/js/lib_head.js
index ba3dc38da9e2467b912e390f124309b5e284c79b..6ddfa529beec0e90c722d41991fc563536a5c633 100644
--- a/htdocs/core/js/lib_head.js
+++ b/htdocs/core/js/lib_head.js
@@ -57,7 +57,8 @@ function showDP(base,dateFieldID,format,codelang)
 
 	showDP.box=document.createElement("div");
 	showDP.box.className="bodyline";
-	showDP.box.style.siplay="block";
+	showDP.box.style.display="block";
+	showDP.box.style.zIndex="1000";
 	showDP.box.style.position="absolute";
 	showDP.box.style.top=thetop + "px";
 	showDP.box.style.left=theleft + "px";
diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang
index d12f45387d6b4649f2face75d8646935a7c16c33..f98f02ccef0dd9a7ef06c0534c1fb6f45a662ac7 100644
--- a/htdocs/langs/en_US/banks.lang
+++ b/htdocs/langs/en_US/banks.lang
@@ -165,3 +165,8 @@ DeleteARib=Delete BAN record
 ConfirmDeleteRib=Are you sure you want to delete this BAN record ?
 StartDate=Start date
 EndDate=End date
+RejectCheck=Check rejection
+ConfirmRejectCheck=Are you sure you want to mark this check as rejected ?
+RejectCheckDate=Check rejection date
+CheckRejected=Check rejected
+CheckRejectedAndInvoicesReopened=Check rejected and invoices reopened