diff --git a/htdocs/admin/facture.php b/htdocs/admin/facture.php
index 73025cf4443ba653733b153dbc73cc9e6cad4cda..0c9e739bb33a73128349f69e060b268bfdd70063 100644
--- a/htdocs/admin/facture.php
+++ b/htdocs/admin/facture.php
@@ -21,10 +21,10 @@
  */
 
 /**
-        \file       htdocs/admin/facture.php
-		\ingroup    facture
-		\brief      Page d'administration/configuration du module Facture
-		\version    $Id$
+ *      \file       htdocs/admin/facture.php
+ *		\ingroup    facture
+ *		\brief      Page d'administration/configuration du module Facture
+ *		\version    $Id$
 */
 
 require("./pre.inc.php");
@@ -167,11 +167,6 @@ if ($_POST["action"] == 'setforcedate')
     dolibarr_set_const($db, "FAC_FORCE_DATE_VALIDATION",$_POST["forcedate"]);
 }
 
-if ($_POST["action"] == 'set_disable_repeatable')
-{
-    dolibarr_set_const($db, "FACTURE_DISABLE_RECUR",$_POST["disable_repeatable"]);
-}
-
 if ($_POST["action"] == 'set_enable_editdelete')
 {
     dolibarr_set_const($db, "FACTURE_ENABLE_EDITDELETE",$_POST["enable_editdelete"]);
@@ -581,20 +576,7 @@ print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'
 print "</td></tr>\n";
 print '</form>';
 
-// Active facture r�currentes
-$var=! $var;
-print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
-print '<input type="hidden" name="action" value="set_disable_repeatable">';
-print '<tr '.$bc[$var].'><td>';
-print $langs->trans("DisableRepeatable");
-print '</td><td width="60" align="center">';
-print $html->selectyesno("disable_repeatable",$conf->global->FACTURE_DISABLE_RECUR,1);
-print '</td><td align="right">';
-print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
-print "</td></tr>\n";
-print '</form>';
-
-// Active la possibilit� d'�diter/supprimer une facture valid�e sans paiement
+// Active la possibilite d'editer/supprimer une facture validee sans paiement
 $var=! $var;
 print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
 print '<input type="hidden" name="action" value="set_enable_editdelete">';
diff --git a/htdocs/comm/mailing/fiche.php b/htdocs/comm/mailing/fiche.php
index d85becc23c04ec8535269e19ce4ce870d11d49c7..96073eb1df06f08413d1a367c9b37eac4869ac58 100644
--- a/htdocs/comm/mailing/fiche.php
+++ b/htdocs/comm/mailing/fiche.php
@@ -51,8 +51,8 @@ $substitutionarrayfortest=array(
 
 
 
-// Action envoi mailing pour tous
-if ($_POST["action"] == 'confirm_clone')
+// Action clone object
+if ($_POST["action"] == 'confirm_clone' && $_POST['confirm'] == 'yes')
 {
 	if (empty($_REQUEST["clone_content"]) && empty($_REQUEST["clone_receivers"]))
 	{
@@ -60,13 +60,19 @@ if ($_POST["action"] == 'confirm_clone')
 	}
 	else
 	{
-		$mil=new Mailing($db);
-		$result=$mil->createFromClone($_REQUEST['id'],$_REQUEST["clone_content"],$_REQUEST["clone_receivers"]);
+		$object=new Mailing($db);
+		$result=$object->createFromClone($_REQUEST['id'],$_REQUEST["clone_content"],$_REQUEST["clone_receivers"]);
 		if ($result > 0)
 		{
-			header("Location: ".DOL_URL_ROOT.'/comm/mailing/fiche.php?id='.$result);
+			header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result);
 			exit;
 		}
+		else
+		{
+			$mesg=$object->error;
+			$_GET['action']='';
+			$_GET['id']=$_REQUEST['id'];
+		}
 	}
 }
 
@@ -566,11 +572,11 @@ else
         	// Clone confirmation
 			if ($_GET["action"] == 'clone')
 			{
-				// Crée un tableau formulaire
+				// Create an array for form
 				$formquestion=array(
-				'text' => $langs->trans("ConfirmClone"),
-				array('type' => 'checkbox', 'name' => 'clone_content',   'label' => $langs->trans("CloneContent"),   'value' => 1),
-				array('type' => 'checkbox', 'name' => 'clone_receviers', 'label' => $langs->trans("CloneReceivers").' ('.$langs->trans("FeatureNotYetAvailable").')', 'value' => 0, 'disabled' => true)
+					'text' => $langs->trans("ConfirmClone"),
+					array('type' => 'checkbox', 'name' => 'clone_content',   'label' => $langs->trans("CloneContent"),   'value' => 1),
+					array('type' => 'checkbox', 'name' => 'clone_receviers', 'label' => $langs->trans("CloneReceivers").' ('.$langs->trans("FeatureNotYetAvailable").')', 'value' => 0, 'disabled' => true)
 				);
 				// Paiement incomplet. On demande si motif = escompte ou autre
 				$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$mil->id,$langs->trans('CloneEMailing'),$langs->trans('ConfirmCloneEMailing',$mil->ref),'confirm_clone',$formquestion,'yes');
@@ -599,31 +605,31 @@ else
 
                 if ($mil->statut == 0 && $user->rights->mailing->creer)
                 {
-                    print '<a class="butAction" href="fiche.php?action=edit&amp;id='.$mil->id.'">'.$langs->trans("EditMailing").'</a>';
+                    print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=edit&amp;id='.$mil->id.'">'.$langs->trans("EditMailing").'</a>';
                 }
 
                 //print '<a class="butAction" href="fiche.php?action=test&amp;id='.$mil->id.'">'.$langs->trans("PreviewMailing").'</a>';
 
-                print '<a class="butAction" href="fiche.php?action=test&amp;id='.$mil->id.'">'.$langs->trans("TestMailing").'</a>';
+                print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=test&amp;id='.$mil->id.'">'.$langs->trans("TestMailing").'</a>';
 
                 if ($mil->statut == 0 && $mil->nbemail > 0 && $user->rights->mailing->valider)
                 {
-                    print '<a class="butAction" href="fiche.php?action=valide&amp;id='.$mil->id.'">'.$langs->trans("ValidMailing").'</a>';
+                    print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=valide&amp;id='.$mil->id.'">'.$langs->trans("ValidMailing").'</a>';
                 }
 
                 if (($mil->statut == 1 || $mil->statut == 2) && $mil->nbemail > 0 && $user->rights->mailing->valider)
                 {
-                    print '<a class="butAction" href="fiche.php?action=sendall&amp;id='.$mil->id.'">'.$langs->trans("SendMailing").'</a>';
+                    print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=sendall&amp;id='.$mil->id.'">'.$langs->trans("SendMailing").'</a>';
                 }
 
                 if ($user->rights->mailing->creer)
                 {
-                    print '<a class="butAction" href="'.DOL_URL_ROOT.'/comm/mailing/fiche.php?action=clone&amp;object=emailing&amp;id='.$mil->id.'">'.$langs->trans("ToClone").'</a>';
+                    print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=clone&amp;object=emailing&amp;id='.$mil->id.'">'.$langs->trans("ToClone").'</a>';
                 }
 
                 if ($mil->statut <= 1 && $user->rights->mailing->supprimer)
                 {
-                    print '<a class="butActionDelete" href="fiche.php?action=delete&amp;id='.$mil->id.'">'.$langs->trans("DeleteMailing").'</a>';
+                    print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?action=delete&amp;id='.$mil->id.'">'.$langs->trans("DeleteMailing").'</a>';
                 }
 
                 print '<br /><br /></div>';
diff --git a/htdocs/comm/mailing/mailing.class.php b/htdocs/comm/mailing/mailing.class.php
index 14892fc87430d8271d3e6a6f89fe5e3a8211618d..55d67c91b51d3a3f6e40f58c92258e03cd8226ec 100644
--- a/htdocs/comm/mailing/mailing.class.php
+++ b/htdocs/comm/mailing/mailing.class.php
@@ -213,7 +213,7 @@ class Mailing
 
 
 	/**
-	 *		\brief      Get object from database
+	 *		\brief      Load an object from its id and create a new one in database
 	 *		\param      fromid     	Id of object to clone
 	 *		\return		int			New id of clone
 	 */
@@ -231,27 +231,29 @@ class Mailing
 		$object->fetch($fromid);
 		$object->id=0;
 		$object->statut=0;
+
+		// Clear fields
 		$object->titre=$langs->trans("CopyOf").' '.$object->titre;
 
 		// If no option copy content
 		if (empty($option1))
 		{
 			// Clear values	
-			$this->nbemail            = 0;
-			$this->titre              = $langs->trans("Draft").' '.mktime();
-			$this->sujet              = '';
-			$this->body               = '';
+			$object->nbemail            = 0;
+			$object->titre              = $langs->trans("Draft").' '.mktime();
+			$object->sujet              = '';
+			$object->body               = '';
 
-			$this->email_from         = '';
-			$this->email_replyto      = '';
-			$this->email_errorsto     = '';
+			$object->email_from         = '';
+			$object->email_replyto      = '';
+			$object->email_errorsto     = '';
 
-			$this->user_creat         = $user->id;
-			$this->user_valid         = '';
+			$object->user_creat         = $user->id;
+			$object->user_valid         = '';
 
-			$this->date_creat         = '';
-			$this->date_valid         = '';
-			$this->date_envoi         = '';
+			$object->date_creat         = '';
+			$object->date_valid         = '';
+			$object->date_envoi         = '';
 		}
 
 		// Create clone
diff --git a/htdocs/compta/commande/pre.inc.php b/htdocs/compta/commande/pre.inc.php
index 0bf7bc706a6867ed1aa46aa82475879946538785..3c198be51c268828094a5d21597b352c7d1c9857 100644
--- a/htdocs/compta/commande/pre.inc.php
+++ b/htdocs/compta/commande/pre.inc.php
@@ -70,7 +70,7 @@ function llxHeader($head = "", $title="", $help_url='')
         $menu->add_submenu(DOL_URL_ROOT."/compta/facture/impayees.php",$langs->trans("Unpayed"));
         $menu->add_submenu(DOL_URL_ROOT."/compta/paiement/liste.php",$langs->trans("Payments"));
 
-	if (! $conf->global->FACTURE_DISABLE_RECUR)
+	if ($conf->global->FACTURE_ENABLE_RECUR)
         {
             $menu->add_submenu(DOL_URL_ROOT."/compta/facture/fiche-rec.php", $langs->trans("Repeatable"));
         }
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 896c9e14ac4850e3a6e96eebda86ecec38893aa0..32f527af5997d15f61f0fc9aa978e7ec78be321b 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -69,6 +69,31 @@ $usehm=$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE;
 /*                     Actions                                                */
 /******************************************************************************/
 
+// Action clone object
+if ($_POST["action"] == 'confirm_clone' && $_POST['confirm'] == 'yes')
+{
+	if (1==0 && empty($_REQUEST["clone_content"]) && empty($_REQUEST["clone_receivers"]))
+	{
+		$mesg='<div class="error">'.$langs->trans("NoCloneOptionsSpecified").'</div>';
+	}
+	else
+	{
+		$object=new Facture($db);
+		$result=$object->createFromClone($_REQUEST['facid']);
+		if ($result > 0)
+		{
+			header("Location: ".$_SERVER['PHP_SELF'].'?facid='.$result);
+			exit;
+		}
+		else
+		{
+			$mesg=$object->error;
+			$_GET['action']='';
+			$_GET['id']=$_REQUEST['id'];
+		}
+	}
+}
+
 if ($_GET['action'] == 'reopen' && $user->rights->facture->creer)
 {
 	$fac = new Facture($db);
@@ -203,6 +228,15 @@ if ($_POST['action'] == 'setconditions')
 	if ($result < 0) dolibarr_print_error($facture->db,$facture->error);
 }
 
+if ($_POST['action'] == 'setpaymentterm')
+{
+	$facture = new Facture($db);
+	$facture->fetch($_GET['facid']);
+	$date_lim_reglement=dolibarr_mktime(12,0,0,$_POST['paymenttermmonth'],$_POST['paymenttermday'],$_POST['paymenttermyear']);
+	$result=$facture->cond_reglement($facture->cond_reglement_id,$date_lim_reglement);
+	if ($result < 0) dolibarr_print_error($facture->db,$facture->error);
+}
+
 if ($_REQUEST['action'] == 'setremisepercent' && $user->rights->facture->creer)
 {
 	$fac = new Facture($db);
@@ -444,7 +478,7 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
 
 	$db->begin();
 
-	// Facture remplacement
+	// Replacement invoice
 	if ($_POST['type'] == 1)
 	{
 		$datefacture = dolibarr_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
@@ -462,8 +496,7 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
 
 		if (! $error)
 		{
-			// Si facture remplacement
-
+			// This is a replacement invoice
 			$result=$facture->fetch($_POST['fac_replacement']);
 
 			$facture->date           = $datefacture;
@@ -481,7 +514,7 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
 			$facture->fk_facture_source = $_POST['fac_replacement'];
 			$facture->type              = 1;
 
-			$facid=$facture->create_clone($user);
+			$facid=$facture->createFromCurrent($user);
 		}
 	}
 
@@ -1373,6 +1406,41 @@ if ($_GET['action'] == 'create')
 		print '</td></tr>';
 	}
 
+	// Factures pr�d�finnies	
+	// TODO Use instead invoice in llx_facture table with a particular status
+	if ($conf->global->FACTURE_ENABLE_RECUR)
+	{
+		if ($_GET['propalid'] == 0 && $_GET['commandeid'] == 0 && $_GET['contratid'] == 0)
+		{
+			$sql = 'SELECT r.rowid, r.titre, r.amount FROM '.MAIN_DB_PREFIX.'facture_rec as r';
+			$sql.= ' WHERE r.fk_soc = '.$soc->id;
+			$resql=$db->query($sql);
+			if ($resql)
+			{
+				$num = $db->num_rows($resql);
+				$i = 0;
+
+				if ($num > 0)
+				{
+					print '<tr><td>'.$langs->trans('CreateFromRepeatableInvoice').'</td><td><select class="flat" name="fac_rec">';
+					print '<option value="0" selected="true"></option>';
+					while ($i < $num)
+					{
+						$objp = $db->fetch_object($resql);
+						print '<option value="'.$objp->rowid.'">'.$objp->titre.' : '.$objp->amount.'</option>';
+						$i++;
+					}
+					print '</select></td></tr>';
+				}
+				$db->free();
+			}
+			else
+			{
+				dolibarr_print_error($db);
+			}
+		}
+	}
+
 	// Tiers
 	print '<tr><td>'.$langs->trans('Company').'</td><td colspan="2">';
 	print $soc->getNomUrl(1);
@@ -1664,41 +1732,6 @@ if ($_GET['action'] == 'create')
 		}
 	}
 
-	/*
-	 * Factures r�currentes
-	 */
-	if (! $conf->global->FACTURE_DISABLE_RECUR)
-	{
-		if ($_GET['propalid'] == 0 && $_GET['commandeid'] == 0 && $_GET['contratid'] == 0)
-		{
-			$sql = 'SELECT r.rowid, r.titre, r.amount FROM '.MAIN_DB_PREFIX.'facture_rec as r';
-			$sql .= ' WHERE r.fk_soc = '.$soc->id;
-			if ( $db->query($sql) )
-			{
-				$num = $db->num_rows();
-				$i = 0;
-
-				if ($num > 0)
-				{
-					print '<tr><td colspan="3">'.$langs->trans('CreateFromRepeatableInvoice').' : <select class="flat" name="fac_rec">';
-					print '<option value="0" selected="true"></option>';
-					while ($i < $num)
-					{
-						$objp = $db->fetch_object();
-						print '<option value="'.$objp->rowid.'">'.$objp->titre.' : '.$objp->amount.'</option>';
-						$i++;
-					}
-					print '</select></td></tr>';
-				}
-				$db->free();
-			}
-			else
-			{
-				dolibarr_print_error($db);
-			}
-		}
-	}
-
 	// Bouton "Create Draft"
 	print '<tr><td colspan="3" align="center"><input type="submit" class="button" name="bouton" value="'.$langs->trans('CreateDraft').'"></td></tr>';
 	print "</table>\n";
@@ -1885,9 +1918,7 @@ else
 
 			dolibarr_fiche_head($head, 'compta', $langs->trans('InvoiceCustomer'));
 
-			/*
-			 * Confirmation de la conversion de l'avoir en reduc
-			 */
+			// Confirmation de la conversion de l'avoir en reduc
 			if ($_GET['action'] == 'converttoreduc')
 			{
 				$text=$langs->trans('ConfirmConvertToReduc');
@@ -1895,9 +1926,7 @@ else
 				print '<br />';
 			}
 
-			/*
-			 * Confirmation de la suppression de la facture
-			 */
+			// Confirmation de la suppression de la facture
 			if ($_GET['action'] == 'delete')
 			{
 				$text=$langs->trans('ConfirmDeleteBill');
@@ -1905,9 +1934,7 @@ else
 				print '<br />';
 			}
 
-			/*
-			 * Confirmation de la validation
-			 */
+			// Confirmation de la validation
 			if ($_GET['action'] == 'valid')
 			{
 				// on v�rifie si la facture est en num�rotation provisoire
@@ -1934,9 +1961,7 @@ else
 				print '<br />';
 			}
 
-			/*
-			 * Confirmation du classement pay�
-			 */
+			// Confirmation du classement pay�
 			if ($_GET['action'] == 'payed' && $resteapayer <= 0)
 			{
 				$html->form_confirm($_SERVER["PHP_SELF"].'?facid='.$fac->id,$langs->trans('ClassifyPayed'),$langs->trans('ConfirmClassifyPayedBill',$fac->ref),'confirm_payed');
@@ -1970,12 +1995,10 @@ else
 				);
 				// Paiement incomplet. On demande si motif = escompte ou autre
 				$html->form_confirm($_SERVER["PHP_SELF"].'?facid='.$fac->id,$langs->trans('ClassifyPayed'),$langs->trans('ConfirmClassifyPayedPartially',$fac->ref),'confirm_payed_partially',$formquestion);
-				print '<br />';
+				print '<br>';
 			}
 
-			/*
-			 * Confirmation du classement abandonne
-			 */
+			// Confirmation du classement abandonne
 			if ($_GET['action'] == 'canceled')
 			{
 				// S'il y a une facture de remplacement pas encore valid�e (etat brouillon),
@@ -2013,22 +2036,32 @@ else
 					);
 
 					$html->form_confirm($_SERVER['PHP_SELF'].'?facid='.$fac->id,$langs->trans('CancelBill'),$langs->trans('ConfirmCancelBill',$fac->ref),'confirm_canceled',$formquestion);
-					print '<br />';
+					print '<br>';
 				}
 			}
 
-			/*
-			 * Confirmation de la suppression d'une ligne produit
-			 */
+			// Confirmation de la suppression d'une ligne produit
 			if ($_GET['action'] == 'delete_product_line' && $conf->global->PRODUIT_CONFIRM_DELETE_LINE)
 			{
 				$html->form_confirm($_SERVER["PHP_SELF"].'?facid='.$fac->id.'&amp;rowid='.$_GET["rowid"], $langs->trans('DeleteProductLine'), $langs->trans('ConfirmDeleteProductLine'), 'confirm_deleteproductline');
-				print '<br />';
+				print '<br>';
 			}
 
-			/*
-			 *   Facture
-			 */
+        	// Clone confirmation
+			if ($_GET["action"] == 'clone')
+			{
+				// Create an array for form
+				$formquestion=array(
+					//'text' => $langs->trans("ConfirmClone"),
+					//array('type' => 'checkbox', 'name' => 'clone_content',   'label' => $langs->trans("CloneMainAttributes"),   'value' => 1)
+				);
+				// Paiement incomplet. On demande si motif = escompte ou autre
+				$html->form_confirm($_SERVER["PHP_SELF"].'?facid='.$fac->id,$langs->trans('CloneInvoice'),$langs->trans('ConfirmCloneInvoice',$fac->ref),'confirm_clone',$formquestion,'yes');
+				print '<br>';
+			}
+			
+			
+			// Invoice content
 
 			print '<table class="border" width="100%">';
 
@@ -2307,13 +2340,24 @@ else
 			print '</td></tr>';
 
 			// Date limite reglement
-			print '<tr>';
-			print '<td>'.$langs->trans('DateMaxPayment').'</td>';
-			print '<td colspan="3">';
+			print '<tr><td>';
+			print '<table class="nobordernopadding" width="100%"><tr><td>';
+			print $langs->trans('DateMaxPayment');
+			print '</td>';
+			if ($fac->type != 2 && $_GET['action'] != 'editpaymentterm' && $fac->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editpaymentterm&amp;facid='.$fac->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
+			print '</tr></table>';
+			print '</td><td colspan="3">';
 			if ($fac->type != 2)
 			{
-				print dolibarr_print_date($fac->date_lim_reglement,'daytext');
-				if ($fac->date_lim_reglement < (time() - $conf->facture->client->warning_delay) && ! $fac->paye && $fac->statut == 1 && ! $fac->am) print img_warning($langs->trans('Late'));
+				if ($_GET['action'] == 'editpaymentterm')
+				{
+					$html->form_date($_SERVER['PHP_SELF'].'?facid='.$fac->id,$fac->date_lim_reglement,'paymentterm');
+				}
+				else
+				{
+					print dolibarr_print_date($fac->date_lim_reglement,'daytext');
+					if ($fac->date_lim_reglement < (time() - $conf->facture->client->warning_delay) && ! $fac->paye && $fac->statut == 1 && ! $fac->am) print img_warning($langs->trans('Late'));
+				}
 			}
 			else
 			{
@@ -2667,7 +2711,7 @@ else
 						else print '&nbsp;';
 						print '</td>';
 						print '<td align="center" rowspan="1" colspan="5" valign="middle"><input type="submit" class="button" name="save" value="'.$langs->trans('Save').'">';
-						print '<br /><input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'"></td>';
+						print '<br><input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'"></td>';
 						print '</tr>' . "\n";
 						if ($conf->service->enabled)
 						{
@@ -2868,15 +2912,6 @@ else
 						}
 					}
 						
-					// R�currente
-					if (! $conf->global->FACTURE_DISABLE_RECUR && $fac->type == 0)
-					{
-						if (! $facidnext)
-						{
-							print '<a class="butAction" href="facture/fiche-rec.php?facid='.$fac->id.'&amp;action=create">'.$langs->trans("ChangeIntoRepeatableInvoice").'</a>';
-						}
-					}
-
 					// Valider
 					if ($fac->statut == 0 && $num_lignes > 0 && (($fac->type < 2 && $fac->total_ttc >= 0) || ($fac->type == 2 && $fac->total_ttc <= 0)))
 					{
@@ -2988,12 +3023,27 @@ else
 						}
 					}
 
+					// Clone
+					if ($fac->type == 0 && $user->rights->facture->creer)
+					{
+						print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?facid='.$fac->id.'&amp;action=clone&amp;object=invoice">'.$langs->trans("ToClone").'</a>';
+					}
+					
+					// Clone as predefined
+					if ($conf->global->FACTURE_ENABLE_RECUR && $fac->type == 0 && $fac->statut == 0 && $user->rights->facture->creer)
+					{
+						if (! $facidnext)
+						{
+							print '<a class="butAction" href="facture/fiche-rec.php?facid='.$fac->id.'&amp;action=create">'.$langs->trans("ChangeIntoRepeatableInvoice").'</a>';
+						}
+					}
+
 					// Supprimer
 					if ($fac->is_erasable() && $user->rights->facture->supprimer && $_GET['action'] != 'delete')
 					{
 						if ($facidnext)
 						{
-							print '<span class="butActionDeleteRefused" title="'.$langs->trans("DisabledBecauseReplacedInvoice").'">'.$langs->trans('Delete').'</span>';
+							print '<a class="butActionRefused" href="#" title="'.$langs->trans("DisabledBecauseReplacedInvoice").'">'.$langs->trans('Delete').'</a>';
 						}
 						else
 						{
@@ -3190,7 +3240,7 @@ else
 				$formmail->withto=$liste;
 				$formmail->withtocc=1;
 				$formmail->withtoccc=$conf->global->FACTURE_EMAIL_USECCC;
-				$formmail->withtopic=$langs->trans('SendBillRef','__FACREF__');
+				$formmail->withtopic=$langs->transnoentities('SendBillRef','__FACREF__');
 				$formmail->withfile=2;
 				$formmail->withbody=1;
 				$formmail->withdeliveryreceipt=1;
@@ -3254,7 +3304,7 @@ else
 				$formmail->withfrom=1;
 				$formmail->withto=$liste;
 				$formmail->withtocc=1;
-				$formmail->withtopic=$langs->trans('SendReminderBillRef','__FACREF__');
+				$formmail->withtopic=$langs->transnoentities('SendReminderBillRef','__FACREF__');
 				$formmail->withfile=2;
 				$formmail->withbody=1;
 				$formmail->withdeliveryreceipt=1;
diff --git a/htdocs/compta/pre.inc.php b/htdocs/compta/pre.inc.php
index 65fa3423f2da37e7f7b86409a0fbdcb693e76211..34199b06f73c395a672fb1d546620404eb1f36a0 100644
--- a/htdocs/compta/pre.inc.php
+++ b/htdocs/compta/pre.inc.php
@@ -67,7 +67,7 @@ function llxHeader($head = "", $title="", $help_url='')
         $menu->add_submenu(DOL_URL_ROOT."/compta/facture/impayees.php",$langs->trans("Unpayed"));
         $menu->add_submenu(DOL_URL_ROOT."/compta/paiement/liste.php",$langs->trans("Payments"));
 
-	if (! $conf->global->FACTURE_DISABLE_RECUR)
+	if ($conf->global->FACTURE_ENABLE_RECUR)
         {
             $menu->add_submenu(DOL_URL_ROOT."/compta/facture/fiche-rec.php", $langs->trans("Repeatable"));
         }
diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php
index 46ae5cb380318ee45f19baf83be62b7787f75b35..9319897cdd52d512a18dd97076ffdf8ed2ad65af 100644
--- a/htdocs/facture.class.php
+++ b/htdocs/facture.class.php
@@ -125,11 +125,11 @@ class Facture extends CommonObject
 	}
 
 	/**
-		\brief     	Cr�ation de la facture en base
-		\param     	user       		Object utilisateur qui cr�e
-		\param      notrigger		1 ne declenche pas les triggers, 0 sinon
-		\return		int				<0 si ko, >0 si ok
-		*/
+	 *	\brief     	Create invoice in database
+	 *	\param     	user       		Object uset that create
+	 *	\param      notrigger		1 ne declenche pas les triggers, 0 sinon
+	 *	\return		int				<0 si ko, >0 si ok
+	 */
 	function create($user,$notrigger=0)
 	{
 		global $langs,$conf,$mysoc;
@@ -337,12 +337,12 @@ class Facture extends CommonObject
 
 
 	/**
-	 \brief      Create a new invoice in database from current invoice
-	 \param      user    		Object user that ask creation
-	 \param		invertdetail	Reverse sign of amounts for lines
-	 \return		int				<0 si ko, >0 si ok
+	 *	\brief      Create a new invoice in database from current invoice
+	 *	\param      user    		Object user that ask creation
+	 *	\param		invertdetail	Reverse sign of amounts for lines
+	 *	\return		int				<0 si ko, >0 si ok
 	 */
-	function create_clone($user,$invertdetail=0)
+	function createFromCurrent($user,$invertdetail=0)
 	{
 		// Charge facture source
 		$facture=new Facture($this->db);
@@ -376,8 +376,7 @@ class Facture extends CommonObject
 			}
 		}
 
-		dolibarr_syslog("Facture::create_clone invertdetail=".$invertdetail." socid=".$this->socid." nboflines=".sizeof($facture->lignes));
-
+		dolibarr_syslog("Facture::createFromCurrent invertdetail=".$invertdetail." socid=".$this->socid." nboflines=".sizeof($facture->lignes));
 
 		$facid = $facture->create($user);
 
@@ -385,6 +384,68 @@ class Facture extends CommonObject
 	}
 
 
+	/**
+	 *		\brief      Load an object from its id and create a new one in database
+	 *		\param      fromid     		Id of object to clone
+	 *		\param		invertdetail	Reverse sign of amounts for lines
+	 * 	 	\return		int				New id of clone
+	 */
+	function createFromClone($fromid,$invertdetail=0)
+	{
+		global $user,$langs;
+		
+		$error=0;
+		
+		$object=new Facture($this->db);
+
+		$this->db->begin();
+
+		// Load source object
+		$object->fetch($fromid);
+		$object->id=0;
+		$object->statut=0;
+
+		// Clear fields
+		$object->user_author        = $user->id;
+		$object->user_valid         = '';
+		$object->fk_facture_source  = 0;
+		$object->date_creation      = '';
+		$object->date_validation    = '';
+		$object->ref_client         = '';
+		$object->close_code         = '';
+		$object->close_note         = '';
+		$object->products = $object->lignes;	// Tant que products encore utilis�
+		
+		// Create clone
+		$result=$object->create($user);
+
+		// Other options
+		if ($result < 0) 
+		{
+			$this->error=$object->error;
+			$error++;
+		}
+		
+		if (! $error)
+		{
+			
+			
+			
+		}
+		
+		// End
+		if (! $error)
+		{
+			$this->db->commit();
+			return $object->id;
+		}
+		else
+		{
+			$this->db->rollback();
+			return -1;
+		}
+	}
+
 	/**
 	 *	\brief      Renvoie nom clicable (avec eventuellement le picto)
 	 *	\param		withpicto		0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul
@@ -436,7 +497,7 @@ class Facture extends CommonObject
 		$sql.= ','.$this->db->pdate('f.date_lim_reglement').' as dlr';
 		$sql.= ','.$this->db->pdate('f.datec').' as datec';
 		$sql.= ','.$this->db->pdate('f.date_valid').' as datev';
-		$sql.= ', f.note, f.note_public, f.fk_statut, f.paye, f.close_code, f.close_note, f.fk_user_author, f.model_pdf';
+		$sql.= ', f.note, f.note_public, f.fk_statut, f.paye, f.close_code, f.close_note, f.fk_user_author, f.fk_user_valid, f.model_pdf';
 		$sql.= ', f.fk_facture_source';
 		$sql.= ', f.fk_mode_reglement, f.fk_cond_reglement, f.fk_projet';
 		$sql.= ', p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
@@ -489,8 +550,11 @@ class Facture extends CommonObject
 				$this->note                   = $obj->note;
 				$this->note_public            = $obj->note_public;
 				$this->user_author            = $obj->fk_user_author;
+				$this->user_valid             = $obj->fk_user_valid;
 				$this->modelpdf               = $obj->model_pdf;
+
 				$this->commande_id            = $obj->fk_commande;
+
 				$this->lignes                 = array();
 
 				if ($this->commande_id)
@@ -607,6 +671,128 @@ class Facture extends CommonObject
 		}
 	}
 
+
+	/**
+	 *      \brief      Update database
+	 *      \param      user        	User that modify
+	 *      \param      notrigger	    0=launch triggers after, 1=disable triggers
+	 *      \return     int         	<0 if KO, >0 if OK
+	 */
+	function update($user=0, $notrigger=0)
+	{
+		global $conf, $langs;
+		$error=0;
+		 
+		// Clean parameters
+
+		if (isset($this->facnumber)) $this->facnumber=trim($this->ref);
+		if (isset($this->type)) $this->type=trim($this->type);
+		if (isset($this->ref_client)) $this->ref_client=trim($this->ref_client);
+		if (isset($this->increment)) $this->increment=trim($this->increment);
+		if (isset($this->socid)) $this->socid=trim($this->socid);
+		if (isset($this->paye)) $this->paye=trim($this->paye);
+		if (isset($this->amount)) $this->amount=trim($this->amount);
+		if (isset($this->remise_percent)) $this->remise_percent=trim($this->remise_percent);
+		if (isset($this->remise_absolue)) $this->remise_absolue=trim($this->remise_absolue);
+		if (isset($this->remise)) $this->remise=trim($this->remise);
+		if (isset($this->close_code)) $this->close_code=trim($this->close_code);
+		if (isset($this->close_note)) $this->close_note=trim($this->close_note);
+		if (isset($this->total_tva)) $this->tva=trim($this->total_tva);
+		if (isset($this->total_ht)) $this->total_ht=trim($this->total_ht);
+		if (isset($this->total_ttc)) $this->total_ttc=trim($this->total_ttc);
+		if (isset($this->statut)) $this->statut=trim($this->statut);
+		if (isset($this->user_author)) $this->user_author=trim($this->user_author);
+		if (isset($this->fk_user_valid)) $this->fk_user_valid=trim($this->fk_user_valid);
+		if (isset($this->fk_facture_source)) $this->fk_facture_source=trim($this->fk_facture_source);
+		if (isset($this->projetid)) $this->projetid=trim($this->projetid);
+		if (isset($this->cond_reglement_id)) $this->cond_reglement_id=trim($this->cond_reglement_id);
+		if (isset($this->mode_reglement_id)) $this->mode_reglement_id=trim($this->mode_reglement_id);
+		if (isset($this->note)) $this->note=trim($this->note);
+		if (isset($this->note_public)) $this->note_public=trim($this->note_public);
+		if (isset($this->modelpdf)) $this->modelpdf=trim($this->modelpdf);
+		if (isset($this->import_key)) $this->import_key=trim($this->import_key);
+		 
+		// Check parameters
+		// Put here code to add control on parameters values
+
+		// Update request
+		$sql = "UPDATE ".MAIN_DB_PREFIX."facture SET";
+
+		$sql.= " facnumber=".(isset($this->ref)?"'".addslashes($this->ref)."'":"null").",";
+		$sql.= " type=".(isset($this->type)?$this->type:"null").",";
+		$sql.= " ref_client=".(isset($this->ref_client)?"'".addslashes($this->ref_client)."'":"null").",";
+		$sql.= " increment=".(isset($this->increment)?"'".addslashes($this->increment)."'":"null").",";
+		$sql.= " fk_soc=".(isset($this->socid)?$this->socid:"null").",";
+		$sql.= " datec=".(strval($this->date_creation)!='' ? "'".$this->db->idate($this->date_creation)."'" : 'null').",";
+		$sql.= " datef=".(strval($this->date)!='' ? "'".$this->db->idate($this->date)."'" : 'null').",";
+		$sql.= " date_valid=".(strval($this->date_validation)!='' ? "'".$this->db->idate($this->date_validation)."'" : 'null').",";
+		$sql.= " paye=".(isset($this->paye)?$this->paye:"null").",";
+		$sql.= " amount=".(isset($this->amount)?$this->amount:"null").",";
+		$sql.= " remise_percent=".(isset($this->remise_percent)?$this->remise_percent:"null").",";
+		$sql.= " remise_absolue=".(isset($this->remise_absolue)?$this->remise_absolue:"null").",";
+		$sql.= " remise=".(isset($this->remise)?$this->remise:"null").",";
+		$sql.= " close_code=".(isset($this->close_code)?"'".addslashes($this->close_code)."'":"null").",";
+		$sql.= " close_note=".(isset($this->close_note)?"'".addslashes($this->close_note)."'":"null").",";
+		$sql.= " tva=".(isset($this->total_tva)?$this->total_tva:"null").",";
+		$sql.= " total=".(isset($this->total_ht)?$this->total_ht:"null").",";
+		$sql.= " total_ttc=".(isset($this->total_ttc)?$this->total_ttc:"null").",";
+		$sql.= " fk_statut=".(isset($this->statut)?$this->statut:"null").",";
+		$sql.= " fk_user_author=".(isset($this->user_author)?$this->user_author:"null").",";
+		$sql.= " fk_user_valid=".(isset($this->fk_user_valid)?$this->fk_user_valid:"null").",";
+		$sql.= " fk_facture_source=".(isset($this->fk_facture_source)?$this->fk_facture_source:"null").",";
+		$sql.= " fk_projet=".(isset($this->projetid)?$this->projetid:"null").",";
+		$sql.= " fk_cond_reglement=".(isset($this->cond_reglement_id)?$this->cond_reglement_id:"null").",";
+		$sql.= " fk_mode_reglement=".(isset($this->mode_reglement_id)?$this->mode_reglement_id:"null").",";
+		$sql.= " date_lim_reglement=".(strval($this->date_lim_reglement)!='' ? "'".$this->db->idate($this->date_lim_reglement)."'" : 'null').",";
+		$sql.= " note=".(isset($this->note)?"'".addslashes($this->note)."'":"null").",";
+		$sql.= " note_public=".(isset($this->note_public)?"'".addslashes($this->note_public)."'":"null").",";
+		$sql.= " model_pdf=".(isset($this->modelpdf)?"'".addslashes($this->modelpdf)."'":"null").",";
+		$sql.= " import_key=".(isset($this->import_key)?"'".addslashes($this->import_key)."'":"null")."";
+
+
+		$sql.= " WHERE rowid=".$this->id;
+
+		$this->db->begin();
+
+		dolibarr_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG);
+		$resql = $this->db->query($sql);
+		if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
+
+		if (! $error)
+		{
+			if (! $notrigger)
+			{
+				// Uncomment this and change MYOBJECT to your own tag if you
+				// want this action call a trigger.
+
+				//// Call triggers
+				//include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
+				//$interface=new Interfaces($this->db);
+				//$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
+				//if ($result < 0) { $error++; $this->errors=$interface->errors; }
+				//// End call triggers
+			}
+		}
+
+		// Commit or rollback
+		if ($error)
+		{
+			foreach($this->errors as $errmsg)
+			{
+				dolibarr_syslog(get_class($this)."::update ".$errmsg, LOG_ERR);
+				$this->error.=($this->error?', '.$errmsg:$errmsg);
+			}
+			$this->db->rollback();
+			return -1*$error;
+		}
+		else
+		{
+			$this->db->commit();
+			return 1;
+		}
+	}
+
+
 	/**
 	 *    \brief     Ajout en base d'une ligne remise fixe en ligne de facture
 	 *    \param     idremise			Id de la remise fixe
@@ -1971,36 +2157,49 @@ class Facture extends CommonObject
 	}
 
 	/**
-	 *   \brief      Change les conditions de r�glement de la facture
-	 *   \param      cond_reglement_id      Id de la nouvelle condition de r�glement
-	 *   \return     int                    >0 si ok, <0 si ko
+	 *  \brief      Change les conditions de r�glement de la facture
+	 *  \param      cond_reglement_id      	Id de la nouvelle condition de r�glement
+	 * 	\param		date					Date to force payment term
+	 *  \return     int                    	>0 si ok, <0 si ko
 	 */
-	function cond_reglement($cond_reglement_id)
+	function cond_reglement($cond_reglement_id,$date='')
 	{
-		dolibarr_syslog('Facture::cond_reglement '.$cond_reglement_id, LOG_DEBUG);
 		if ($this->statut >= 0 && $this->paye == 0)
 		{
-			$datelim=$this->calculate_date_lim_reglement($cond_reglement_id);
+			// Define cond_reglement_id and datelim
+			if (strval($date) != '') 
+			{
+				$datelim=$date;
+				$cond_reglement_id=0;
+			}
+			else
+			{
+				$datelim=$this->calculate_date_lim_reglement($cond_reglement_id);
+				$cond_reglement_id=$cond_reglement_id;
+			}
+
 			$sql = 'UPDATE '.MAIN_DB_PREFIX.'facture';
-			$sql .= ' SET fk_cond_reglement = '.$cond_reglement_id;
-			$sql .= ', date_lim_reglement='.$this->db->idate($datelim);
-			$sql .= ' WHERE rowid='.$this->id;
+			$sql.= ' SET fk_cond_reglement = '.$cond_reglement_id.',';
+			$sql.= ' date_lim_reglement='.$this->db->idate($datelim);
+			$sql.= ' WHERE rowid='.$this->id;
+
+			dolibarr_syslog('Facture::cond_reglement sql='.$sql, LOG_DEBUG);
 			if ( $this->db->query($sql) )
-	  {
-	  	$this->cond_reglement_id = $cond_reglement_id;
-	  	return 1;
-	  }
-	  else
-	  {
-	  	dolibarr_syslog('Facture::cond_reglement Erreur '.$sql.' - '.$this->db->error());
-	  	$this->error=$this->db->error();
-	  	return -1;
-	  }
+			{
+				$this->cond_reglement_id = $cond_reglement_id;
+				return 1;
+			}
+			else
+			{
+				dolibarr_syslog('Facture::cond_reglement Erreur '.$sql.' - '.$this->db->error());
+				$this->error=$this->db->error();
+				return -1;
+			}
 		}
 		else
 		{
 			dolibarr_syslog('Facture::cond_reglement, etat facture incompatible');
-			$this->error='Etat facture incompatible '.$this->statut.' '.$this->paye;
+			$this->error='Entity status not compatible '.$this->statut.' '.$this->paye;
 			return -2;
 		}
 	}
@@ -2143,7 +2342,7 @@ class Facture extends CommonObject
 		{
 			while ($obj=$this->db->fetch_object($resql))
 			{
-			  	$return[$obj->rowid]=array(	'id' => $obj->rowid,
+				$return[$obj->rowid]=array(	'id' => $obj->rowid,
 			  	'ref' => $obj->facnumber,
 			  	'status' => $obj->fk_statut);
 			}
diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php
index 66393537303aebcba16ac2cd1a0df123236baeff..4e6e429691e9acafd0dd6d0e880430d5d04d860b 100644
--- a/htdocs/html.form.class.php
+++ b/htdocs/html.form.class.php
@@ -1605,7 +1605,7 @@ class Form
 	 *    	\brief      Affiche formulaire de selection de conditions de paiement
 	 *    	\param      page        	Page
 	 *    	\param      selected    	Id condition pr�-s�lectionn�
-	 *    	\param      htmlname    	Nom du formulaire select
+	 *    	\param      htmlname    	Name of select html field
 	 *		\param		addempty		Ajoute entr�e vide
 	 */
 	function form_conditions_reglement($page, $selected='', $htmlname='cond_reglement_id', $addempty=0)
@@ -1635,11 +1635,45 @@ class Form
 	}
 
 
+	/**
+	 *    \brief      Affiche formulaire de selection d'une date
+	 *    \param      page        Page
+	 *    \param      selected    Date preselected
+	 *    \param      htmlname    Name of input html field
+	 */
+	function form_date($page, $selected='', $htmlname)
+	{
+		global $langs;
+		
+		if ($htmlname != "none")
+		{
+			print '<form method="post" action="'.$page.'" name="form'.$htmlname.'">';
+			print '<input type="hidden" name="action" value="set'.$htmlname.'">';
+			print '<table class="noborder" cellpadding="0" cellspacing="0">';
+			print '<tr><td>';
+			print $this->select_date($selected,$htmlname,0,0,1,'form'.$htmlname);
+			print '</td>';
+			print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
+			print '</tr></table></form>';
+		}
+		else
+		{
+			if ($selected)
+			{
+				$this->load_cache_types_paiements();
+				print $this->cache_types_paiements[$selected]['label'];
+			} else {
+				print "&nbsp;";
+			}
+		}
+	}
+	
+
 	/**
 	 *    \brief      Affiche formulaire de selection des modes de reglement
 	 *    \param      page        Page
 	 *    \param      selected    Id mode pr�-s�lectionn�
-	 *    \param      htmlname    Nom du formulaire select
+	 *    \param      htmlname    Name of select html field
 	 */
 	function form_modes_reglement($page, $selected='', $htmlname='mode_reglement_id')
 	{
@@ -1992,7 +2026,7 @@ class Form
 	 *		@param	h				1=Affiche aussi les heures
 	 *		@param	m				1=Affiche aussi les minutes
 	 *		@param	empty			0=Champ obligatoire, 1=Permet une saisie vide
-	 *		@param	form_name 		Nom du formulaire de provenance. Utilis� pour les dates en popup style andre.
+	 *		@param	form_name 		Nom du formulaire de provenance. Utilis� pour les dates en popup.
 	 *		@param	d				1=Affiche aussi les jours, mois, annees
 	 */
 	function select_date($set_time='', $prefix='re', $h=0, $m=0, $empty=0, $form_name="", $d=1)
diff --git a/htdocs/html.formmail.class.php b/htdocs/html.formmail.class.php
index c7672f766ddfb25a686f4dcefd457fdeb9545358..6ae6b7525c0d496032f495fecab330a0fbce9a30 100644
--- a/htdocs/html.formmail.class.php
+++ b/htdocs/html.formmail.class.php
@@ -312,7 +312,7 @@ class FormMail
 			print "</td></tr>\n";
 		}
 
-		// CC
+		// CCC
 		if ($this->withtoccc || is_array($this->withtoccc))
 		{
 			print '<tr><td width="180">'.$langs->trans("MailCCC").'</td><td>';
@@ -332,7 +332,7 @@ class FormMail
 			print "</td></tr>\n";
 		}
 		
-		// Accus� r�ception
+		// Ask delivery receipt
 		if ($this->withdeliveryreceipt)
 		{
 			print '<tr><td width="180">'.$langs->trans("DeliveryReceipt").'</td><td>';
@@ -403,12 +403,12 @@ class FormMail
 		{
 			$defaultmessage="";
 
-			// \todo    A partir du type, proposer liste de messages dans table llx_models
-			if ($this->param["models"]=='body') { $defaultmessage=$this->withbody; }
-			if ($this->param["models"]=='facture_send')    { $defaultmessage="Veuillez trouver ci-joint la facture __FACREF__\n\nCordialement\n\n"; }
-			if ($this->param["models"]=='facture_relance') { $defaultmessage="Nous apportons � votre connaissance que la facture  __FACREF__ ne semble pas avoir �t� r�gl�e. La voici donc, pour rappel, en pi�ce jointe.\n\nCordialement\n\n"; }
-			if ($this->param["models"]=='propal_send') { $defaultmessage="Veuillez trouver ci-joint la proposition commerciale __PROPREF__\n\nCordialement\n\n"; }
-			if ($this->param["models"]=='order_send') { $defaultmessage="Veuillez trouver ci-joint la commande __ORDERREF__\n\nCordialement\n\n"; }
+			// \TODO    A partir du type, proposer liste de messages dans table llx_models
+			if ($this->param["models"]=='body') 			{ $defaultmessage=$this->withbody; }
+			if ($this->param["models"]=='facture_send')    	{ $defaultmessage=$langs->transnoentities("PredefinedMailContentSendInvoice"); }
+			if ($this->param["models"]=='facture_relance') 	{ $defaultmessage=$langs->transnoentities("PredefinedMailContentSendInvoiceReminder"); }
+			if ($this->param["models"]=='propal_send') 		{ $defaultmessage=$langs->transnoentities("PredefinedMailContentSendProposal"); }
+			if ($this->param["models"]=='order_send') 		{ $defaultmessage=$langs->transnoentities("PredefinedMailContentSendOrder"); }
 
 			$defaultmessage=make_substitutions($defaultmessage,$this->substit);
 
diff --git a/htdocs/includes/menus/barre_left/eldy_backoffice.php b/htdocs/includes/menus/barre_left/eldy_backoffice.php
index be19fe9854d1837b1a78d65749df0dd8cf4b3881..eda0369dc07e40a1116757d662d13097c58e57c1 100644
--- a/htdocs/includes/menus/barre_left/eldy_backoffice.php
+++ b/htdocs/includes/menus/barre_left/eldy_backoffice.php
@@ -429,7 +429,7 @@ class MenuLeft {
 					{
 						if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/clients.php?action=facturer&amp;leftmenu=customers_bills",$langs->trans("NewBill"),2,$user->rights->facture->creer);
 					}
-					if (! $conf->global->FACTURE_DISABLE_RECUR)
+					if ($conf->global->FACTURE_ENABLE_RECUR)
 					{
 						if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/facture/fiche-rec.php?leftmenu=customers_bills",$langs->trans("Repeatables"),2,$user->rights->facture->lire);
 					}
diff --git a/htdocs/includes/menus/barre_left/eldy_frontoffice.php b/htdocs/includes/menus/barre_left/eldy_frontoffice.php
index 03d94b64763af7c69cfe85cb15e70436606b6758..d01ddd806c25e88259f5ede32ef381cb8d7b9ad8 100644
--- a/htdocs/includes/menus/barre_left/eldy_frontoffice.php
+++ b/htdocs/includes/menus/barre_left/eldy_frontoffice.php
@@ -411,7 +411,7 @@ class MenuLeft {
 					{
 						if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/clients.php?action=facturer&amp;leftmenu=customers_bills",$langs->trans("NewBill"),2,$user->rights->facture->creer);
 					}
-					if (! $conf->global->FACTURE_DISABLE_RECUR)
+					if ($conf->global->FACTURE_ENABLE_RECUR)
 					{
 						if (eregi("customers_bills",$leftmenu)) $newmenu->add_submenu(DOL_URL_ROOT."/compta/facture/fiche-rec.php?leftmenu=customers_bills",$langs->trans("Repeatable"),2,$user->rights->facture->lire);
 					}
diff --git a/htdocs/includes/menus/init_menu_auguria.sql b/htdocs/includes/menus/init_menu_auguria.sql
index 2ccd0703c83eb7a2c1e3dcb8456fe9b67de4def9..8e6fcc6b91e8b712105374c00887ea2294ec30fc 100644
--- a/htdocs/includes/menus/init_menu_auguria.sql
+++ b/htdocs/includes/menus/init_menu_auguria.sql
@@ -298,7 +298,7 @@ insert into `llx_menu_constraint` (`rowid`, `action`) values (10, '$conf->contra
 insert into `llx_menu_constraint` (`rowid`, `action`) values (11, '$conf->fichinter->enabled');
 insert into `llx_menu_constraint` (`rowid`, `action`) values (12, '$conf->societe->enabled');
 insert into `llx_menu_constraint` (`rowid`, `action`) values (13, '$conf->facture->enabled');
-insert into `llx_menu_constraint` (`rowid`, `action`) values (14, '! $conf->global->FACTURE_DISABLE_RECUR');
+insert into `llx_menu_constraint` (`rowid`, `action`) values (14, '$conf->global->FACTURE_ENABLE_RECUR');
 insert into `llx_menu_constraint` (`rowid`, `action`) values (15, '$conf->don->enabled');
 insert into `llx_menu_constraint` (`rowid`, `action`) values (16, '$conf->deplacement->enabled');
 insert into `llx_menu_constraint` (`rowid`, `action`) values (17, '$conf->tax->enabled');
diff --git a/htdocs/includes/modules/facture/pdf_crabe.modules.php b/htdocs/includes/modules/facture/pdf_crabe.modules.php
index 52ca4e0fc15dca9b632cf04c8b6c20ab4b7676a8..bca7030cc4689c42c1e08da5e24ab1c3dc83d0de 100644
--- a/htdocs/includes/modules/facture/pdf_crabe.modules.php
+++ b/htdocs/includes/modules/facture/pdf_crabe.modules.php
@@ -239,7 +239,7 @@ class pdf_crabe extends ModelePDFFactures
 					
 					// Description de la ligne produit
 					$libelleproduitservice=dol_htmlentitiesbr($fac->lignes[$i]->libelle,1);
-					if ($fac->lignes[$i]->desc&&$fac->lignes[$i]->desc!=$fac->lignes[$i]->libelle)
+					if ($fac->lignes[$i]->desc && $fac->lignes[$i]->desc != $fac->lignes[$i]->libelle)
 					{
 						if ($libelleproduitservice) $libelleproduitservice.="<br>";
 						
diff --git a/htdocs/includes/modules/facture/pdf_huitre.modules.php b/htdocs/includes/modules/facture/pdf_huitre.modules.php
index 6aa46715275d900f1d3cc0caa4fee1b751ce5ed5..6f81bffa0723a799daf9e705d82e1d2df3c96bae 100644
--- a/htdocs/includes/modules/facture/pdf_huitre.modules.php
+++ b/htdocs/includes/modules/facture/pdf_huitre.modules.php
@@ -254,13 +254,17 @@ class pdf_huitre extends ModelePDFFactures
 					$pdf->MultiCell(110, 3, $note, 0, 'J');
 				}
 
-				$pdf->SetFont('Arial','U',11);
 				$pdf->SetXY(10, 225);
-				$titre = $outputlangs->transnoentities("PaymentConditions").' : ';
-				$lib_condition_paiement=$outputlangs->transnoentities("PaymentCondition".$fac->cond_reglement_code)!=('PaymentCondition'.$fac->cond_reglement_code)?$outputlangs->transnoentities("PaymentCondition".$fac->cond_reglement_code):$fac->cond_reglement;
-				$titre.=$lib_condition_paiement;
-				$pdf->MultiCell(190, 5, $titre, 0, 'J');
 
+		        // Show payments conditions
+		        if ($fac->type != 2 && ($fac->cond_reglement_code || $fac->cond_reglement))
+		        {
+					$titre = $outputlangs->transnoentities("PaymentConditions").' : ';
+					$lib_condition_paiement=$outputlangs->transnoentities("PaymentCondition".$fac->cond_reglement_code)!=('PaymentCondition'.$fac->cond_reglement_code)?$outputlangs->transnoentities("PaymentCondition".$fac->cond_reglement_code):$fac->cond_reglement;
+					$titre.=$lib_condition_paiement;
+					$pdf->MultiCell(190, 5, $titre, 0, 'J');
+		        }
+		        
 				$this->_pagefoot($pdf, $fac, $outputlangs);
 				$pdf->AliasNbPages();
 				//----
diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang
index 5e67f5f422b11cbdc7b02be98881fda6032eb6fd..8f74302a28861a04b6f56060b79f6cae95ac9d7a 100644
--- a/htdocs/langs/en_US/bills.lang
+++ b/htdocs/langs/en_US/bills.lang
@@ -196,13 +196,13 @@ NonPercuRecuperable=Non-recoverable
 SetConditions=Set payment conditions
 SetMode=Set payment mode
 Billed=Billed
-RepeatableInvoice=Repeatable invoice
-RepeatableInvoices=Repeatable invoices
-Repeatable=Repeatable
-Repeatables=Repeatable
-ChangeIntoRepeatableInvoice=Change into repeatable
-CreateRepeatableInvoice=Create repeatable invoice
-CreateFromRepeatableInvoice=Create from repeatable invoice
+RepeatableInvoice=Pre-defined invoice
+RepeatableInvoices=Pre-defined invoices
+Repeatable=Pre-defined
+Repeatables=Pre-defined
+ChangeIntoRepeatableInvoice=Convert into pre-defined
+CreateRepeatableInvoice=Create pre-defined invoice
+CreateFromRepeatableInvoice=Create from pre-defined invoice
 CustomersInvoicesAndInvoiceLines=Customer invoices and invoices' lines
 CustomersInvoicesAndPayments=Customer invoices and payments
 ExportDataset_invoice_1=Customer invoices list and invoices' lines
@@ -240,6 +240,10 @@ InvoicePayed=Invoice payed
 PaymentNumber=Payment number
 RemoveDiscount=Remove discount
 WatermarkOnDraftBill=Watermark on draft invoices (nothing if empty)
+CloneInvoice=Clone invoice
+CloneMainAttributes=Clone object with its main attributes
+ConfirmCloneInvoice=Are you sure you want to clone this invoice ?
+DisabledBecauseReplacedInvoice=Action disabled because invoice has been replaced
 
 # PaymentConditions
 PaymentConditionShortRECEP=Immediate
diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang
index ae788067c15f87595f15c064993082f62d5fb4ec..e009ec2623336ba71829c62c4e9b3e34e7da8fbc 100644
--- a/htdocs/langs/en_US/other.lang
+++ b/htdocs/langs/en_US/other.lang
@@ -34,6 +34,11 @@ Miscellanous=Miscellanous
 NbOfActiveNotifications=Number of notifications
 WarningInstallDirExists=Warning, install directory (%s) still exists. This is a serious security hole. You should removed it as soon as possible.
 WarningUntilDirRemoved=This warning will remain active as long as this directory is present (Shown only to admin users).
+PredefinedMailContentSendInvoice=Veuillez trouver ci-joint la facture __FACREF__\n\nCordialement\n\n
+PredefinedMailContentSendInvoiceReminder=Nous apportons � votre connaissance que la facture  __FACREF__ ne semble pas avoir �t� r�gl�e. La voici donc, pour rappel, en pi�ce jointe.\n\nCordialement\n\n
+PredefinedMailContentSendProposal=Veuillez trouver ci-joint la proposition commerciale __PROPREF__\n\nCordialement\n\n
+PredefinedMailContentSendOrder=Veuillez trouver ci-joint la commande __ORDERREF__\n\nCordialement\n\n
+##### Bookmark #####
 Bookmark=Bookmark
 Bookmarks=Bookmarks
 NewBookmark=New bookmark
diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang
index 93bc7e847864aa31a9a53f2b22c27eb114990717..b5761ea0a66c2f9606cf8468f4c8cc33f0b38423 100644
--- a/htdocs/langs/fr_FR/bills.lang
+++ b/htdocs/langs/fr_FR/bills.lang
@@ -195,13 +195,13 @@ NonPercuRecuperable=Non per
 SetConditions=D�finir conditions de r�glement
 SetMode=D�finir mode de r�glement
 Billed=Factur�
-RepeatableInvoice=Facture r�currente
-RepeatableInvoices=Factures r�currentes
-Repeatable=R�currente
-Repeatables=R�currentes
-ChangeIntoRepeatableInvoice=Convertir en r�currente
-CreateRepeatableInvoice=Cr�er facture r�currente
-CreateFromRepeatableInvoice=Cr�er depuis facture r�currente
+RepeatableInvoice=Facture pr�d�finie
+RepeatableInvoices=Factures pr�d�finies
+Repeatable=Pr�d�finie
+Repeatables=Pr�d�finies
+ChangeIntoRepeatableInvoice=Convertir en pr�d�finie
+CreateRepeatableInvoice=Cr�er facture pr�d�finie
+CreateFromRepeatableInvoice=Cr�er depuis facture pr�d�finie
 CustomersInvoicesAndInvoiceLines=Factures clients et lignes de factures
 CustomersInvoicesAndPayments=Factures clients et r�glements
 ExportDataset_invoice_1=Factures clients et lignes de facture
@@ -240,6 +240,10 @@ PaymentNumber=Num
 RemoveDiscount=Supprimer remise
 WatermarkOnDraftBill=Filigrane sur les brouillons de factures (aucun si vide)
 UnpayedNotChecked=Aucune facture impay�es n'a �t� s�lectionn�e
+CloneInvoice=Cloner facture
+CloneMainAttributes=Cloner l'objet avec ces attributs principaux
+ConfirmCloneInvoice=Etes-vous sur de vouloir cloner cette facture ?
+DisabledBecauseReplacedInvoice=Action d�sactiv�e car facture remplac�e
 
 # PaymentConditions
 PaymentConditionShortRECEP=A r�ception
diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang
index 6ca19a4deef33f11717132d6fb6a59fa89b9ddac..049e44cfd9a06088b46860e701cee0ade64c64b1 100644
--- a/htdocs/langs/fr_FR/other.lang
+++ b/htdocs/langs/fr_FR/other.lang
@@ -34,6 +34,10 @@ Miscellanous=Divers
 NbOfActiveNotifications=Nombre de notifications
 WarningInstallDirExists=Attention, le r�pertoire install (%s) existe toujours. Une fois l'install termin�e, sa pr�sence n'est plus n�cessaire et repr�sente une faille s�rieuse de s�curit�. Vous devriez l'effacer d�s que possible.
 WarningUntilDirRemoved=Cette alerte restera active tant que le r�pertoire existera (alerte visible pour les utilisateurs admin uniquement).
+PredefinedMailContentSendInvoice=Veuillez trouver ci-joint la facture __FACREF__\n\nCordialement\n\n
+PredefinedMailContentSendInvoiceReminder=Nous apportons � votre connaissance que la facture  __FACREF__ ne semble pas avoir �t� r�gl�e. La voici donc, pour rappel, en pi�ce jointe.\n\nCordialement\n\n
+PredefinedMailContentSendProposal=Veuillez trouver ci-joint la proposition commerciale __PROPREF__\n\nCordialement\n\n
+PredefinedMailContentSendOrder=Veuillez trouver ci-joint la commande __ORDERREF__\n\nCordialement\n\n
 ##### Bookmark #####
 Bookmark=Marque page
 Bookmarks=Marque pages