diff --git a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php
index 90ced6322b714ae5972e4ae511ad738ed7f49d5f..8a274f91ac76f924bf9e01358e40e115b7440b2a 100644
--- a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php
+++ b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php
@@ -408,8 +408,18 @@ class doc_generic_odt extends ModeleThirdPartyDoc
 					}
 				}
 				else {
-					try {
-					$odfHandler->saveToDisk($file);
+				    try {
+					   $odfHandler->creator = $user->getFullName($outputlangs);
+					   $odfHandler->title = $object->builddoc_filename;
+					   $odfHandler->subject = $object->builddoc_filename;
+					   
+					   if (! empty($conf->global->ODT_ADD_DOLIBARR_ID))
+					   {
+    					  $odfHandler->userdefined['dol_id'] = $object->id;
+	   		  		      $odfHandler->userdefined['dol_element'] = $object->element;
+					   }
+					   
+					   $odfHandler->saveToDisk($file);
 					}catch (Exception $e){
 						$this->error=$e->getMessage();
 						return -1;
diff --git a/htdocs/includes/odtphp/Segment.php b/htdocs/includes/odtphp/Segment.php
index 9bcfa0f65d1290717839c2397de5c947f3d07103..c3e23ee9aec63ba108847fed67d5bee0fc119898 100644
--- a/htdocs/includes/odtphp/Segment.php
+++ b/htdocs/includes/odtphp/Segment.php
@@ -6,7 +6,6 @@ class SegmentException extends Exception
  * Class for handling templating segments with odt files
  * You need PHP 5.2 at least
  * You need Zip Extension or PclZip library
- * Encoding : ISO-8859-1
  *
  * @copyright  GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
  * @copyright  GPL License 2012 - Stephen Larroque - lrq3000@gmail.com
diff --git a/htdocs/includes/odtphp/SegmentIterator.php b/htdocs/includes/odtphp/SegmentIterator.php
index 3b0ccecf3ffedb9fdf0e239b0ec48e8eda90dcb2..5f397c5f838353ac8a3bb25af159075538051ab1 100644
--- a/htdocs/includes/odtphp/SegmentIterator.php
+++ b/htdocs/includes/odtphp/SegmentIterator.php
@@ -3,7 +3,6 @@
  * Segments iterator
  * You need PHP 5.2 at least
  * You need Zip Extension or PclZip library
- * Encoding : ISO-8859-1
  *
  * @copyright  GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
diff --git a/htdocs/includes/odtphp/odf.php b/htdocs/includes/odtphp/odf.php
index 26d1c05721915f05901f45fe0ab58dddafdb0b19..351a5969b140e98f0a8b946e509a6b3906f5849a 100644
--- a/htdocs/includes/odtphp/odf.php
+++ b/htdocs/includes/odtphp/odf.php
@@ -6,14 +6,13 @@ class OdfException extends Exception
  * Templating class for odt file
  * You need PHP 5.2 at least
  * You need Zip Extension or PclZip library
- * Encoding : ISO-8859-1
  *
  * @copyright  GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
- * @copyright  GPL License 2010 - Laurent Destailleur - eldy@users.sourceforge.net
- * @copyright  GPL License 2010 -  Vikas Mahajan - http://vikasmahajan.wordpress.com
+ * @copyright  GPL License 2010-2015 - Laurent Destailleur - eldy@users.sourceforge.net
+ * @copyright  GPL License 2010 - Vikas Mahajan - http://vikasmahajan.wordpress.com
  * @copyright  GPL License 2012 - Stephen Larroque - lrq3000@gmail.com
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
- * @version 1.4.6 (last update 2013-04-07)
+ * @version 1.5.0
  */
 class Odf
 {
@@ -25,6 +24,7 @@ class Odf
 	);
 	protected $file;
 	protected $contentXml;			// To store content of content.xml file
+	protected $metaXml;			    // To store content of meta.xml file
 	protected $stylesXml;			// To store content of styles.xml file
 	protected $manifestXml;			// To store content of META-INF/manifest.xml file
 	protected $tmpfile;
@@ -32,6 +32,12 @@ class Odf
 	protected $images = array();
 	protected $vars = array();
 	protected $segments = array();
+	
+	public $creator;
+	public $title;
+	public $subject;
+	public $userdefined=array();
+	
 	const PIXEL_TO_CM = 0.026458333;
 	/**
 	 * Class constructor
@@ -86,6 +92,9 @@ class Odf
 		if (($this->manifestXml = $this->file->getFromName('META-INF/manifest.xml')) === false) {
 			throw new OdfException("Something is wrong with META-INF/manifest.xml in source file '$filename'");
 		}
+		if (($this->metaXml = $this->file->getFromName('meta.xml')) === false) {
+			throw new OdfException("Nothing to parse - Check that the meta.xml file is correctly formed in source file '$filename'");
+		}
 		if (($this->stylesXml = $this->file->getFromName('styles.xml')) === false) {
 			throw new OdfException("Nothing to parse - Check that the styles.xml file is correctly formed in source file '$filename'");
 		}
@@ -187,6 +196,7 @@ class Odf
 	/**
 	 * Evaluating php codes inside the ODT and output the buffer (print, echo) inplace of the code
 	 *
+	 * @return int             0
 	 */
 	public function phpEval()
 	{
@@ -268,13 +278,13 @@ IMG;
 	 * Merge template variables
 	 * Called automatically for a save
 	 *
-	 * @param  string	$type		'content' or 'styles'
+	 * @param  string	$type		'content', 'styles' or 'meta'
 	 * @return void
 	 */
 	private function _parse($type='content')
 	{
 		// Conditionals substitution
-		// Note: must be done before content substitution, else the variable will be replaced by its value and the conditional won't work anymore
+		// Note: must be done before static substitution, else the variable will be replaced by its value and the conditional won't work anymore
 		foreach($this->vars as $key => $value)
 		{
 			// If value is true (not 0 nor false nor null nor empty string)
@@ -300,11 +310,11 @@ IMG;
 			}
 		}
 
-		// Content (variable) substitution
+		// Static substitution
 		if ($type == 'content')	$this->contentXml = str_replace(array_keys($this->vars), array_values($this->vars), $this->contentXml);
-		// Styles substitution
 		if ($type == 'styles')	$this->stylesXml = str_replace(array_keys($this->vars), array_values($this->vars), $this->stylesXml);
-
+		if ($type == 'meta')	$this->metaXml = str_replace(array_keys($this->vars), array_values($this->vars), $this->metaXml);
+		
 	}
 
 	/**
@@ -408,13 +418,21 @@ IMG;
 		$res=$this->file->open($this->tmpfile);    // tmpfile is odt template
 		$this->_parse('content');
 		$this->_parse('styles');
+		$this->_parse('meta');
 
+		$this->setMetaData();
+		//print $this->metaXml;exit;
+		
 		if (! $this->file->addFromString('content.xml', $this->contentXml)) {
-			throw new OdfException('Error during file export addFromString');
+			throw new OdfException('Error during file export addFromString content');
+		}
+		if (! $this->file->addFromString('meta.xml', $this->metaXml)) {
+			throw new OdfException('Error during file export addFromString meta');
 		}
 		if (! $this->file->addFromString('styles.xml', $this->stylesXml)) {
-			throw new OdfException('Error during file export addFromString');
+			throw new OdfException('Error during file export addFromString styles');
 		}
+		
 		foreach ($this->images as $imageKey => $imageValue) {
 			// Add the image inside the ODT document
 			$this->file->addFile($imageKey, 'Pictures/' . $imageValue);
@@ -427,10 +445,37 @@ IMG;
 		$this->file->close();
 	}
 
+	/**
+	 * Update Meta information
+	 * <dc:date>2013-03-16T14:06:25</dc:date>
+	 *
+	 * @return void
+	 */
+	public function setMetaData()
+	{
+	    if (empty($this->creator)) $this->creator='';
+	    
+		$this->metaXml = preg_replace('/<dc:date>.*<\/dc:date>/', '<dc:date>'.gmdate("Y-m-d\TH:i:s").'</dc:date>', $this->metaXml);
+		$this->metaXml = preg_replace('/<dc:creator>.*<\/dc:creator>/', '<dc:creator>'.htmlspecialchars($this->creator).'</dc:creator>', $this->metaXml);
+		$this->metaXml = preg_replace('/<dc:title>.*<\/dc:title>/', '<dc:title>'.htmlspecialchars($this->title).'</dc:title>', $this->metaXml);
+		$this->metaXml = preg_replace('/<dc:subject>.*<\/dc:subject>/', '<dc:subject>'.htmlspecialchars($this->subject).'</dc:subject>', $this->metaXml);
+		
+		if (count($this->userdefined))
+		{
+		    foreach($this->userdefined as $key => $val)
+		    {
+		      $this->metaXml = preg_replace('<meta:user-defined meta:name="'.$key.'"/>', '', $this->metaXml);
+		      $this->metaXml = preg_replace('/<meta:user-defined meta:name="'.$key.'">.*<\/meta:user-defined>/', '', $this->metaXml);
+		      $this->metaXml = str_replace('</office:meta>', '<meta:user-defined meta:name="'.$key.'">'.htmlspecialchars($val).'</meta:user-defined></office:meta>', $this->metaXml);
+		    }
+		}
+	}
+	
 	/**
 	 * Update Manifest file according to added image files
 	 *
 	 * @param string	$file		Image file to add into manifest content
+	 * @return void
 	 */
 	public function addImageToManifest($file)
 	{