diff --git a/htdocs/includes/modules/facture/doc/doc_generic_odt.modules.php b/htdocs/includes/modules/facture/doc/doc_generic_odt.modules.php
new file mode 100644
index 00000000000..08273fe7925
--- /dev/null
+++ b/htdocs/includes/modules/facture/doc/doc_generic_odt.modules.php
@@ -0,0 +1,384 @@
+
+
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * or see http://www.gnu.org/
+ */
+
+/**
+ * \file htdocs/includes/modules/facture/doc/doc_generic_odt.modules.php
+ * \ingroup societe
+ * \brief File of class to build ODT documents for third parties
+ * \author Laurent Destailleur
+ * \version $Id$
+ */
+
+require_once(DOL_DOCUMENT_ROOT."/includes/modules/facture/modules_facture.php");
+require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
+require_once(DOL_DOCUMENT_ROOT."/lib/company.lib.php");
+require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php");
+require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php");
+
+
+/**
+ * \class doc_generic_odt
+ * \brief Class to build documents using ODF templates generator
+ */
+class doc_generic_odt extends ModelePDFFactures
+{
+ var $emetteur; // Objet societe qui emet
+
+ var $phpmin = array(5,2,0); // Minimum version of PHP required by module
+
+
+ /**
+ * \brief Constructor
+ * \param db Database handler
+ */
+ function doc_generic_odt($db)
+ {
+ global $conf,$langs,$mysoc;
+
+ $langs->load("main");
+ $langs->load("companies");
+
+ $this->db = $db;
+ $this->name = "ODT templates";
+ $this->description = $langs->trans("DocumentModelOdt");
+ $this->scandir = 'FACTURE_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan
+
+ // Dimension page pour format A4
+ $this->type = 'odt';
+ $this->page_largeur = 0;
+ $this->page_hauteur = 0;
+ $this->format = array($this->page_largeur,$this->page_hauteur);
+ $this->marge_gauche=0;
+ $this->marge_droite=0;
+ $this->marge_haute=0;
+ $this->marge_basse=0;
+
+ $this->option_logo = 1; // Affiche logo
+
+ // Recupere emmetteur
+ $this->emetteur=$mysoc;
+ if (! $this->emetteur->pays_code) $this->emetteur->pays_code=substr($langs->defaultlang,-2); // Par defaut, si n'etait pas defini
+ }
+
+
+ /**
+ * Define array with couple subtitution key => subtitution value
+ *
+ * @param unknown_type $mysoc
+ */
+ function get_substitutionarray_mysoc($mysoc)
+ {
+ global $conf;
+
+ if (empty($mysoc->forme_juridique) && ! empty($mysoc->forme_juridique_code))
+ {
+ $mysoc->forme_juridique=getFormeJuridiqueLabel($mysoc->forme_juridique_code);
+ }
+
+ $logotouse=$conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small;
+
+ return array(
+ 'mycompany_logo'=>$logotouse,
+ 'mycompany_name'=>$mysoc->name,
+ 'mycompany_email'=>$mysoc->email,
+ 'mycompany_phone'=>$mysoc->phone,
+ 'mycompany_fax'=>$mysoc->fax,
+ 'mycompany_address'=>$mysoc->address,
+ 'mycompany_zip'=>$mysoc->zip,
+ 'mycompany_town'=>$mysoc->town,
+ 'mycompany_country'=>$mysoc->country,
+ 'mycompany_web'=>$mysoc->url,
+ 'mycompany_juridicalstatus'=>$mysoc->forme_juridique,
+ 'mycompany_capital'=>$mysoc->capital,
+ 'mycompany_barcode'=>$mysoc->gencode,
+ 'mycompany_idprof1'=>$mysoc->idprof1,
+ 'mycompany_idprof2'=>$mysoc->idprof2,
+ 'mycompany_idprof3'=>$mysoc->idprof3,
+ 'mycompany_idprof4'=>$mysoc->idprof4,
+ 'mycompany_vatnumber'=>$mysoc->tva_intra,
+ 'mycompany_note'=>$mysoc->note
+ );
+ }
+
+
+ /**
+ * Define array with couple subtitution key => subtitution value
+ *
+ * @param unknown_type $object
+ */
+ function get_substitutionarray_object($object)
+ {
+ global $conf;
+
+ return array(
+ 'company_name'=>$object->name,
+ 'company_email'=>$object->email,
+ 'company_phone'=>$object->phone,
+ 'company_fax'=>$object->fax,
+ 'company_address'=>$object->address,
+ 'company_zip'=>$object->zip,
+ 'company_town'=>$object->town,
+ 'company_country'=>$object->country,
+ 'company_web'=>$object->url,
+ 'company_barcode'=>$object->gencode,
+ 'company_vatnumber'=>$object->tva_intra,
+ 'company_customercode'=>$object->code_client,
+ 'company_suppliercode'=>$object->code_fournisseur,
+ 'company_customeraccountancycode'=>$object->code_compta,
+ 'company_supplieraccountancycode'=>$object->code_compta_fournisseur,
+ 'company_juridicalstatus'=>$object->forme_juridique,
+ 'company_capital'=>$object->capital,
+ 'company_idprof1'=>$object->idprof1,
+ 'company_idprof2'=>$object->idprof2,
+ 'company_idprof3'=>$object->idprof3,
+ 'company_idprof4'=>$object->idprof4,
+ 'company_note'=>$object->note
+ );
+ }
+
+ /** \brief Return description of a module
+ * \return string Description
+ */
+ function info($langs)
+ {
+ global $conf,$langs;
+
+ $langs->load("companies");
+ $langs->load("errors");
+
+ $form = new Form($db);
+
+ $texte = $this->description.".
\n";
+ $texte.= '