diff --git a/dev/skeletons/build_class_from_table.php b/dev/skeletons/build_class_from_table.php
index 3a25cb1b285df0f499ba1f5d0f8b355f0ef9e211..8291daa4c9d5da8353d6c41e46e425eb4beb4d9a 100644
--- a/dev/skeletons/build_class_from_table.php
+++ b/dev/skeletons/build_class_from_table.php
@@ -181,12 +181,12 @@ foreach($property as $key => $prop)
 {
 	if ($prop['field'] != 'rowid' && ! $prop['istime'])
 	{
-		$varprop.="\t\t\$this->".$prop['field']."=trim(\$this->".$prop['field'].");";
+		$varprop.="\t\tif (isset(\$this->".$prop['field'].")) \$this->".$prop['field']."=trim(\$this->".$prop['field'].");";
 		$varprop.="\n";
 	}
 }
-$targetcontent=preg_replace('/\$this->prop1=trim\(\$this->prop1\);/', $varprop, $targetcontent);
-$targetcontent=preg_replace('/\$this->prop2=trim\(\$this->prop2\);/', '', $targetcontent);
+$targetcontent=preg_replace('/if \(isset\(\$this->prop1\)\) \$this->prop1=trim\(\$this->prop1\);/', $varprop, $targetcontent);
+$targetcontent=preg_replace('/if \(isset\(\$this->prop2\)\) \$this->prop2=trim\(\$this->prop2\);/', '', $targetcontent);
 
 // Substitute insert into parameters
 $varprop="\n";
@@ -267,10 +267,12 @@ foreach($property as $key => $prop)
 		}
 		else
 		{
-			$varprop.="'\".";
-			if ($prop['ischar']) $varprop.="addslashes(\$this->".$prop['field'].")";
-			else $varprop.="\$this->".$prop['field'];
-			$varprop.=".\"'";
+			$varprop.="\".";
+			// $sql.= " field1=".(isset($this->field1)?"'".addslashes($this->field1)."'":"null").",";
+			if ($prop['ischar']) $varprop.='(isset($this->'.$prop['field'].')?"\'".addslashes($this->'.$prop['field'].')."\'":"null")';
+			// $sql.= " field1=".(isset($this->field1)?$this->field1:"null").",";
+			else $varprop.='(isset($this->'.$prop['field'].')?$this->'.$prop['field'].':"null")';
+			$varprop.=".\"";
 		}
 
 		if ($i < sizeof($property)) $varprop.=',';
@@ -278,8 +280,8 @@ foreach($property as $key => $prop)
 		$varprop.="\n";
 	}
 }
-$targetcontent=preg_replace('/\$sql.= " field1=\'".addslashes\(\$this->field1\)."\',";/', $varprop, $targetcontent);
-$targetcontent=preg_replace('/\$sql.= " field2=\'".addslashes\(\$this->field2\)."\'";/', '', $targetcontent);
+$targetcontent=preg_replace('/\$sql.= " field1=".\(isset\(\$this->field1\)\?"\'".addslashes\(\$this->field1\)."\'":"null"\).",";/', $varprop, $targetcontent);
+$targetcontent=preg_replace('/\$sql.= " field2=".\(isset\(\$this->field2\)\?"\'".addslashes\(\$this->field2\)."\'":"null"\)."";/', '', $targetcontent);
 
 // Substitute select parameters
 $varprop="\n";
diff --git a/dev/skeletons/skeleton_class.class.php b/dev/skeletons/skeleton_class.class.php
index cd2a71fa57130ae98a28b631698a04da3d643a6a..4e2f697a2a77b2344b7c5ba72ee0666688d97149 100644
--- a/dev/skeletons/skeleton_class.class.php
+++ b/dev/skeletons/skeleton_class.class.php
@@ -74,8 +74,8 @@ class Skeleton_class // extends CommonObject
 		$error=0;
     	
 		// Clean parameters
-        $this->prop1=trim($this->prop1);
-        $this->prop2=trim($this->prop2);
+        if (isset($this->prop1)) $this->prop1=trim($this->prop1);
+        if (isset($this->prop2)) $this->prop2=trim($this->prop2);
 		//...
 
 		// Check parameters
@@ -134,6 +134,49 @@ class Skeleton_class // extends CommonObject
 		}
     }
 
+    
+    /**
+     *    \brief      Load object in memory from database
+     *    \param      id          id object
+     *    \return     int         <0 if KO, >0 if OK
+     */
+    function fetch($id)
+    {
+    	global $langs;
+        $sql = "SELECT";
+		$sql.= " t.rowid,";
+		$sql.= " t.field1,";
+		$sql.= " t.field2";
+		//...
+        $sql.= " FROM ".MAIN_DB_PREFIX."mytable as t";
+        $sql.= " WHERE t.rowid = ".$id;
+    
+    	dolibarr_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG);
+        $resql=$this->db->query($sql);
+        if ($resql)
+        {
+            if ($this->db->num_rows($resql))
+            {
+                $obj = $this->db->fetch_object($resql);
+    
+                $this->id    = $obj->rowid;
+                $this->prop1 = $obj->field1;
+                $this->prop2 = $obj->field2;
+				//...
+            }
+            $this->db->free($resql);
+            
+            return 1;
+        }
+        else
+        {
+      	    $this->error="Error ".$this->db->lasterror();
+            dolibarr_syslog(get_class($this)."::fetch ".$this->error, LOG_ERR);
+            return -1;
+        }
+    }
+    
+
     /**
      *      \brief      Update database
      *      \param      user        	User that modify
@@ -146,8 +189,8 @@ class Skeleton_class // extends CommonObject
 		$error=0;
     	
 		// Clean parameters
-        $this->prop1=trim($this->prop1);
-        $this->prop2=trim($this->prop2);
+        if (isset($this->prop1)) $this->prop1=trim($this->prop1);
+        if (isset($this->prop2)) $this->prop2=trim($this->prop2);
 		//...
 
 		// Check parameters
@@ -155,8 +198,8 @@ class Skeleton_class // extends CommonObject
 
         // Update request
         $sql = "UPDATE ".MAIN_DB_PREFIX."mytable SET";
-        $sql.= " field1='".addslashes($this->field1)."',";
-        $sql.= " field2='".addslashes($this->field2)."'";
+        $sql.= " field1=".(isset($this->field1)?"'".addslashes($this->field1)."'":"null").",";
+        $sql.= " field2=".(isset($this->field2)?"'".addslashes($this->field2)."'":"null")."";
 		//...
         $sql.= " WHERE rowid=".$this->id;
 
@@ -201,48 +244,6 @@ class Skeleton_class // extends CommonObject
     }
   
   
-    /**
-     *    \brief      Load object in memory from database
-     *    \param      id          id object
-     *    \return     int         <0 if KO, >0 if OK
-     */
-    function fetch($id)
-    {
-    	global $langs;
-        $sql = "SELECT";
-		$sql.= " t.rowid,";
-		$sql.= " t.field1,";
-		$sql.= " t.field2";
-		//...
-        $sql.= " FROM ".MAIN_DB_PREFIX."mytable as t";
-        $sql.= " WHERE t.rowid = ".$id;
-    
-    	dolibarr_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG);
-        $resql=$this->db->query($sql);
-        if ($resql)
-        {
-            if ($this->db->num_rows($resql))
-            {
-                $obj = $this->db->fetch_object($resql);
-    
-                $this->id    = $obj->rowid;
-                $this->prop1 = $obj->field1;
-                $this->prop2 = $obj->field2;
-				//...
-            }
-            $this->db->free($resql);
-            
-            return 1;
-        }
-        else
-        {
-      	    $this->error="Error ".$this->db->lasterror();
-            dolibarr_syslog(get_class($this)."::fetch ".$this->error, LOG_ERR);
-            return -1;
-        }
-    }
-    
-    
  	/**
 	*   \brief      Delete object in database
     *	\param      user        	User that delete
diff --git a/dev/skeletons/skeleton_script.php b/dev/skeletons/skeleton_script.php
index a2bb4f7e0045a0e87058853cb9a5d0f5ece59cc9..9285f9f588edfa6e6dcdcf0890044ba3d6a03c60 100644
--- a/dev/skeletons/skeleton_script.php
+++ b/dev/skeletons/skeleton_script.php
@@ -50,7 +50,7 @@ $error=0;
 
 
 // -------------------- START OF YOUR CODE HERE --------------------
-
+@set_time_limit(0);
 print "***** ".$script_file." (".$version.") *****\n";
 
 // Check parameters
@@ -58,53 +58,50 @@ if (! isset($argv[1])) {
     print "Usage: ".$script_file." param1 param2 ...\n";
     exit;
 }
-@set_time_limit(0);
 
 // Show parameters
 print 'Argument 1='.$argv[1]."\n";
 print 'Argument 2='.$argv[2]."\n";
 
 
+// Examples for manipulating class skeleton_class
+require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php");
+$myobject=new Skeleton_class($db);
+
 // Example for inserting creating object in database
 /*
-require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php");
 dolibarr_syslog($script_file." CREATE", LOG_DEBUG);
-$myobject=new Skeleton_class($db);
+$myobject->prop1='value_prop1';
+$myobject->prop2='value_prop2';
 $id=$myobject->create($user);
 if ($id < 0) dolibarr_print_error($db,$myobject->error);
+else print "Object created with id=".$id."\n";
 */
 
-
 // Example for reading object from database
 /*
-require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php");
 dolibarr_syslog($script_file." FETCH", LOG_DEBUG);
-$myobject=new Skeleton_class($db);
-$id=1;
 $result=$myobject->fetch($id);
 if ($result < 0) dolibarr_print_error($db,$myobject->error);
+else print "Object with id=".$id." loaded\n";
 */
 
-
-// Example for updating object in database
+// Example for updating object in database ($myobject must have been loaded by a fetch before)
 /*
-require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php");
 dolibarr_syslog($script_file." UPDATE", LOG_DEBUG);
-$myobject=new Skeleton_class($db);
 $myobject->prop1='newvalue_prop1';
 $myobject->prop2='newvalue_prop2';
 $result=$myobject->update($user);
 if ($result < 0) dolibarr_print_error($db,$myobject->error);
+else print "Object with id ".$myobject->id." updated\n";
 */
 
-
-// Example for deleting object in database
+// Example for deleting object in database ($myobject must have been loaded by a fetch before)
 /*
-require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php");
 dolibarr_syslog($script_file." DELETE", LOG_DEBUG);
-$myobject=new Skeleton_class($db);
 $result=$myobject->delete($user);
 if ($result < 0) dolibarr_print_error($db,$myobject->error);
+else print "Object with id ".$myobject->id." deleted\n";
 */