diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index 001b9058b24e656484ae6664cb0e80b6d73cc70e..3bc60390d619a75793d543eb9aab377e7b7e3626 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -1738,7 +1738,7 @@ class Facture extends CommonInvoice
 	 *	@param  string	$close_note	Commentaire renseigne si on classe a payee alors que paiement incomplet (cas escompte par exemple)
 	 *  @return int         		<0 if KO, >0 if OK
 	 */
-	function set_paid($user,$close_code='',$close_note='')
+	function set_paid($user, $close_code='', $close_note='')
 	{
 		$error=0;
 
diff --git a/htdocs/compta/paiement_charge.php b/htdocs/compta/paiement_charge.php
index c8e272cfd5aa8ddd1f5c9e155ecec56e2d66ebaf..3822f9f91f52a0f237f409c73d3cb9bc1c1f3c41 100644
--- a/htdocs/compta/paiement_charge.php
+++ b/htdocs/compta/paiement_charge.php
@@ -29,8 +29,8 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
 
 $langs->load("bills");
 
-$chid=GETPOST("id");
-$action=GETPOST('action');
+$chid=GETPOST("id", 'int');
+$action=GETPOST('action', 'alpha');
 $amounts = array();
 
 // Security check
@@ -45,7 +45,7 @@ if ($user->societe_id > 0)
  * Actions
  */
 
-if ($action == 'add_payment')
+if ($action == 'add_payment' || ($action == 'confirm_paiement' && $confirm=='yes'))
 {
 	$error=0;
 
@@ -109,7 +109,7 @@ if ($action == 'add_payment')
 
     		if (! $error)
     		{
-    		    $paymentid = $paiement->create($user);
+    		    $paymentid = $paiement->create($user, (GETPOST('closepaidcontrib')=='on'?1:0));
                 if ($paymentid < 0)
                 {
                     $errmsg=$paiement->error;
@@ -155,7 +155,7 @@ $form=new Form($db);
 
 
 // Formulaire de creation d'un paiement de charge
-if ($_GET["action"] == 'create')
+if ($action == 'create')
 {
 
 	$charge = new ChargeSociales($db);
@@ -317,8 +317,9 @@ if ($_GET["action"] == 'create')
 
 	print "</table>";
 
-	print '<br><div class="center">';
-	print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
+	// Bouton Save payment
+	print '<br><div class="center"><input type="checkbox" checked name="closepaidcontrib"> '.$langs->trans("ClosePaidContributionsAutomatically");
+	print '<br><input type="submit" class="button" name="save" value="'.$langs->trans('ToMakePayment').'">';
 	print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
 	print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
 	print '</div>';
diff --git a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php
index e3bf17b3418cbfc1531b328786226d6e00a61304..1d553831f99fb97520ca7e0f6c65423179eb0463 100644
--- a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php
+++ b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php
@@ -23,6 +23,7 @@
  */
 
 require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
+require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
 
 
 /**
@@ -64,10 +65,11 @@ class PaymentSocialContribution extends CommonObject
 	 *  Create payment of social contribution into database.
      *  Use this->amounts to have list of lines for the payment
      *
-	 *  @param      User		$user   User making payment
-	 *  @return     int     			<0 if KO, id of payment if OK
+	 *  @param      User	$user   				User making payment
+	 *	@param		int		$closepaidcontrib   	1=Also close payed contributions to paid, 0=Do nothing more
+	 *  @return     int     						<0 if KO, id of payment if OK
 	 */
-	function create($user)
+	function create($user, $closepaidcontrib=0)
 	{
 		global $conf, $langs;
 
@@ -75,7 +77,9 @@ class PaymentSocialContribution extends CommonObject
 
         $now=dol_now();
 
-        // Validate parametres
+		dol_syslog(get_class($this)."::create", LOG_DEBUG);
+        
+		// Validate parametres
 		if (! $this->datepaye)
 		{
 			$this->error='ErrorBadValueForParameterCreatePaymentSocialContrib';
@@ -117,11 +121,40 @@ class PaymentSocialContribution extends CommonObject
 			$sql.= " ".$this->paiementtype.", '".$this->db->escape($this->num_paiement)."', '".$this->db->escape($this->note)."', ".$user->id.",";
 			$sql.= " 0)";
 
-			dol_syslog(get_class($this)."::create", LOG_DEBUG);
 			$resql=$this->db->query($sql);
 			if ($resql)
 			{
 				$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."paiementcharge");
+				
+				// Insere tableau des montants / factures
+				foreach ($this->amounts as $key => $amount)
+				{
+					$contribid = $key;
+					if (is_numeric($amount) && $amount <> 0)
+					{
+						$amount = price2num($amount);
+
+						// If we want to closed payed invoices
+						if ($closepaidcontrib)
+						{
+							
+							$contrib=new ChargeSociales($this->db);
+							$contrib->fetch($contribid);
+							$paiement = $contrib->getSommePaiement();
+							//$creditnotes=$contrib->getSumCreditNotesUsed();
+							$creditnotes=0;
+							//$deposits=$contrib->getSumDepositsUsed();
+							$deposits=0;
+							$alreadypayed=price2num($paiement + $creditnotes + $deposits,'MT');
+							$remaintopay=price2num($contrib->amount - $paiement - $creditnotes - $deposits,'MT');
+							if ($remaintopay == 0)
+							{
+								$result=$contrib->set_paid($user, '', '');
+							}
+							else dol_syslog("Remain to pay for conrib ".$contribid." not null. We do nothing.");
+						}
+					}
+				}
 			}
 			else
 			{
diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php
index aab90ce4b498d463a3d1f6d4aeb6b4caeb7e4743..8a814c492d023209f2923eb4993df3f9fe743899 100644
--- a/htdocs/fourn/class/fournisseur.facture.class.php
+++ b/htdocs/fourn/class/fournisseur.facture.class.php
@@ -856,10 +856,12 @@ class FactureFournisseur extends CommonInvoice
     /**
      *	Tag invoice as a payed invoice
      *
-     *	@param      User	$user       Object user
-     *	@return     int         		<0 si ko, >0 si ok
+     *	@param  User	$user       Object user
+	 *	@param  string	$close_code	Code renseigne si on classe a payee completement alors que paiement incomplet. Not implementd yet.
+	 *	@param  string	$close_note	Commentaire renseigne si on classe a payee alors que paiement incomplet. Not implementd yet.
+     *	@return int         		<0 si ko, >0 si ok
      */
-    function set_paid($user)
+    function set_paid($user, $close_code='', $close_note='')
     {
         global $conf,$langs;
         $error=0;
diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php
index 78bdab0f6c5cf0db34a3ec3530c0990078dc3283..738c0eb716fe04fb63b12f468eb5a0fb7576cafa 100644
--- a/htdocs/fourn/class/paiementfourn.class.php
+++ b/htdocs/fourn/class/paiementfourn.class.php
@@ -130,7 +130,7 @@ class PaiementFourn extends Paiement
 	 *	@param		int		$closepaidinvoices   	1=Also close payed invoices to paid, 0=Do nothing more
 	 *	@return     int         					id of created payment, < 0 if error
 	 */
-	function create($user,$closepaidinvoices=0)
+	function create($user, $closepaidinvoices=0)
 	{
 		global $langs,$conf;
 
@@ -141,6 +141,8 @@ class PaiementFourn extends Paiement
 		$totalamount = 0;
 		$totalamount_converted = 0;
 		
+		dol_syslog(get_class($this)."::create", LOG_DEBUG);
+		
 		if ($way == 'dolibarr')
 		{
 			$amounts = &$this->amounts;
@@ -188,7 +190,6 @@ class PaiementFourn extends Paiement
 			$sql.= " VALUES ('".$this->db->escape($ref)."', ".$conf->entity.", '".$this->db->idate($now)."',";
 			$sql.= " '".$this->db->idate($this->datepaye)."', '".$total."', '".$mtotal."', ".$this->paiementid.", '".$this->num_paiement."', '".$this->db->escape($this->note)."', ".$user->id.", 0)";
 
-			dol_syslog("PaiementFourn::create", LOG_DEBUG);
 			$resql = $this->db->query($sql);
 			if ($resql)
 			{
@@ -220,7 +221,7 @@ class PaiementFourn extends Paiement
 	                            $remaintopay=price2num($invoice->total_ttc - $paiement - $creditnotes - $deposits,'MT');
 	                            if ($remaintopay == 0)
 	                            {
-	    					        $result=$invoice->set_paid($user,'','');
+	    					        $result=$invoice->set_paid($user, '', '');
 	                            }
 	                            else dol_syslog("Remain to pay for invoice ".$facid." not null. We do nothing.");
 							}
diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang
index f07b069e0310bc0cd14ef79176829b252a15c6ba..49402de185c4fe77788ad7d6d53d80af0189cbc0 100644
--- a/htdocs/langs/en_US/bills.lang
+++ b/htdocs/langs/en_US/bills.lang
@@ -429,6 +429,7 @@ CantRemoveConciliatedPayment=Can't remove conciliated payment
 PayedByThisPayment=Paid by this payment
 ClosePaidInvoicesAutomatically=Classify "Paid" all standard, situation or replacement invoices entirely paid.
 ClosePaidCreditNotesAutomatically=Classify "Paid" all credit notes entirely paid back.
+ClosePaidContributionsAutomatically=Classify "Paid" all social or fiscal contributions entirely paid.
 AllCompletelyPayedInvoiceWillBeClosed=All invoice with no remain to pay will be automatically closed to status "Paid".
 ToMakePayment=Pay
 ToMakePaymentBack=Pay back