diff --git a/examples/RAA.rb b/examples/RAA.rb
index 8d42598bc94a646e7dcbb720ef000bfecb02b759..cc5065c58f56c72dd92d7aaf72e6a6efe987dfeb 100755
--- a/examples/RAA.rb
+++ b/examples/RAA.rb
@@ -1,5 +1,11 @@
-require 'soap/rpc/driver'
-require 'iRAA'
+begin
+  require 'soap/rpc/driver'
+  require 'iRAA'
+rescue LoadError
+  warn("Sorry, at the moment this example is not working.")
+  sleep(5)
+  exit(false)
+end
 
 module RAA
   extend SOAP
diff --git a/examples/babelfish.rb b/examples/babelfish.rb
index 7184429fa2ab9c204d5847b16c31a99cb2a5c380..e9d41a5d975a419f19eee03e9cacdb5c28210757 100755
--- a/examples/babelfish.rb
+++ b/examples/babelfish.rb
@@ -1,7 +1,14 @@
 #!/usr/bin/env ruby
 
 require 'fox16'
-require 'tranexp'
+
+begin
+  require 'tranexp'
+rescue LoadError
+  warn("LoadError: To execute this app you need to have 'tranexp' gem installed.")
+  sleep(5)
+  exit(false)
+end
 
 include Fox
 
diff --git a/examples/canvasdemo.rb b/examples/canvasdemo.rb
index 17175aa61d95284b82ca374c7695026d17625415..06b05e82a42b00e0f36488f04d91505c6c24f4b5 100755
--- a/examples/canvasdemo.rb
+++ b/examples/canvasdemo.rb
@@ -10,7 +10,7 @@ class CanvasDemo < FXMainWindow
     super(app, "Canvas Demo", nil, nil, DECOR_ALL, 0, 0, 800, 600)
 
     # Menu bar
-    menu_bar = FXMenubar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
+    menu_bar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
 
     # File menu
     file_menu = FXMenuPane.new(self)
@@ -53,7 +53,7 @@ class CanvasDemo < FXMainWindow
     FXMenuTitle.new(menu_bar, "&Help", nil, help_menu)
 
     # Status bar
-    FXStatusbar.new(self,
+    FXStatusBar.new(self,
       LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)
 
     # Shapes canvas fills the remainder
diff --git a/examples/charts.rb b/examples/charts.rb
index b3e172067f0f1c95f90a487b7590a1bc4bf7d091..730f1f8bd99d1e98ffba4a9c81986fbe6d43c193 100644
--- a/examples/charts.rb
+++ b/examples/charts.rb
@@ -1,6 +1,13 @@
 require 'fox16'
-require 'google_chart'
-require 'open-uri'
+
+begin
+  require 'google_chart'
+  require 'open-uri'
+rescue LoadError
+  warn("LoadError: To execute this app you need to have 'google_chart' gem installed.")
+  sleep(5)
+  exit(false)
+end
 
 include Fox
 
diff --git a/examples/iRAA.rb b/examples/iRAA.rb
index 72c23473e4a2d6bce5040c6b64558515d133e159..61510e8e9dee20593538e301763997fa7a8a008f 100755
--- a/examples/iRAA.rb
+++ b/examples/iRAA.rb
@@ -1,4 +1,10 @@
-require 'soap/mapping'
+begin
+  require 'soap/mapping'
+rescue LoadError
+  warn("Sorry, at the moment this example is not working.")
+  sleep(5)
+  exit(false)
+end
 
 
 module RAA; extend SOAP
diff --git a/examples/raabrowser.rb b/examples/raabrowser.rb
index 4ba7888e2db88ee5e905fb9f314ef06f739e99c6..34073d6f4483d54ae84b2742d5cc46536969403a 100755
--- a/examples/raabrowser.rb
+++ b/examples/raabrowser.rb
@@ -1,6 +1,12 @@
 require 'fox16'
-require 'cgi'
-require 'soap/wsdlDriver'
+begin
+  require 'cgi'
+  require 'soap/wsdlDriver'
+rescue LoadError
+  warn("Sorry, at the moment this example is not working.")
+  sleep(5)
+  exit(false)
+end
 
 include Fox
 
diff --git a/examples/rmagick.rb b/examples/rmagick.rb
index 5bde55e0462526ac0339dfbcc104869ce5e61731..f1c221b7bb708309bbc21646223697507e0c4d9d 100755
--- a/examples/rmagick.rb
+++ b/examples/rmagick.rb
@@ -1,5 +1,11 @@
 require 'fox16'
-require 'RMagick'
+begin
+  require 'RMagick'
+rescue LoadError
+  warn("LoadError: To execute this app you need to have 'RMagick' gem installed.")
+  sleep(5)
+  exit(false)
+end
 
 include Fox
 
diff --git a/examples/textedit/textedit.rb b/examples/textedit/textedit.rb
index 55f07135181f25ba25914e0dd68588b0ecce53fa..75cf6345eb3596a5d496519da708461b57318563 100755
--- a/examples/textedit/textedit.rb
+++ b/examples/textedit/textedit.rb
@@ -3,9 +3,9 @@
 require 'fox16'
 require 'fox16/responder'
 require 'fox16/undolist'
-require 'prefdialog'
-require 'helpwindow'
-require 'commands'
+require_relative 'prefdialog'
+require_relative 'helpwindow'
+require_relative 'commands'
 
 include Fox
 
diff --git a/ext/fox16_c/include/FXRbTreeList.h b/ext/fox16_c/include/FXRbTreeList.h
index 9d12e1ab12c671ab3230415b28e0828f9bd972d5..608ebcc18f9de2036912c3d73af02544fcb96b18 100644
--- a/ext/fox16_c/include/FXRbTreeList.h
+++ b/ext/fox16_c/include/FXRbTreeList.h
@@ -129,11 +129,11 @@ protected:
 #include "FXRbObjectVirtuals.h"
 #include "FXRbTreeItemVirtuals.h"
 public:
-  // Pointer to this tree item's owner (if any)
-  FXWindow *owner;
+  // Is this tree item owned by an FXTreeList yet?
+  FXbool owned;
 public:
   // Constructor
-  FXRbTreeItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL) : FXTreeItem(text,oi,ci,ptr),owner(0){}
+  FXRbTreeItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL) : FXTreeItem(text,oi,ci,ptr),owned(FALSE){}
 
   // Mark dependencies for the GC
   static void markfunc(FXTreeItem* self);
diff --git a/ext/fox16_c/markfuncs.cpp b/ext/fox16_c/markfuncs.cpp
index 040ea3b81263b492537b11a38350b127332b20c2..e001bbb3da2c5df972a1a0dccc2069e1ecd43ef6 100644
--- a/ext/fox16_c/markfuncs.cpp
+++ b/ext/fox16_c/markfuncs.cpp
@@ -18,7 +18,7 @@ static void delete_if_not_owned(BASECLASS* self,SUBCLASS*){
         if(!dynamic_cast<SUBCLASS*>(self)->owned){
           delete self; // also unregisters it
           }
-	}
+        }
       }
     FXRbUnregisterRubyObj(self);
     }
@@ -33,7 +33,7 @@ static void delete_if_not_owned_by_app(BASECLASS* self,SUBCLASS*){
         if(!dynamic_cast<SUBCLASS*>(self)->ownedByApp){
           delete self; // also unregisters it
           }
-	}
+        }
       }
     FXRbUnregisterRubyObj(self);
     }
@@ -419,26 +419,7 @@ void FXRbTreeItem::markfunc(FXTreeItem* self){
 
 
 void FXRbTreeItem::freefunc(FXTreeItem* self){
-  if(self!=0){
-    if(!FXRbIsBorrowed(self)){
-      if(self->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        FXRbTreeItem* treeItem=dynamic_cast<FXRbTreeItem*>(self);
-        FXASSERT(treeItem);
-        FXTreeList* treeList=dynamic_cast<FXTreeList*>(treeItem->owner);
-        if(treeList){
-          FXRbUnregisterRubyObj(self); // MAYBE
-          treeList->removeItem(self,TRUE);
-          }
-        else{
-          FXTreeListBox* treeListBox=dynamic_cast<FXTreeListBox*>(treeItem->owner);
-          if(treeListBox){
-            treeListBox->removeItem(self);
-            }
-          }
-        }
-      }
-    FXRbUnregisterRubyObj(self);
-    }
+  delete_if_not_owned(self,reinterpret_cast<FXRbTreeItem*>(0));
   }
 
 
diff --git a/ext/fox16_c/unregisterOwnedObjects.cpp b/ext/fox16_c/unregisterOwnedObjects.cpp
index 5cad30f7cd8211b555c703666d085c9dcd95bfeb..157025d45093fb2ed6421117164fe5611abc7f49 100644
--- a/ext/fox16_c/unregisterOwnedObjects.cpp
+++ b/ext/fox16_c/unregisterOwnedObjects.cpp
@@ -96,7 +96,7 @@ void FXRbTable::unregisterOwnedObjects(FXTable *self)
     FXRbUnregisterRubyObj(self->getColumnHeader());
     for(r=0; r<self->getNumRows(); r++){
       for(c=0; c<self->getNumColumns(); c++){
-	FXRbUnregisterRubyObj(self->getItem(r,c));
+        FXRbUnregisterRubyObj(self->getItem(r,c));
         }
       }
 }
@@ -117,4 +117,3 @@ void FXRbTreeList::unregisterOwnedObjects(FXTreeList *self)
     // Now zero-out pointers held by still-alive Ruby objects
     for (FXint i = 0; i < items.no(); i++) FXRbUnregisterRubyObj(items[i]);
 }
-
diff --git a/lib/fox16/version.rb b/lib/fox16/version.rb
index 5b46c8cc790e30f36acdeadf8ac23a8ac0917c0d..9b6237ad886152ce4f0654c63faff514fbe1f86e 100755
--- a/lib/fox16/version.rb
+++ b/lib/fox16/version.rb
@@ -1,5 +1,5 @@
 module Fox
   def Fox.fxrubyversion
-    "1.6.28"
+    "1.6.29"
   end
 end
diff --git a/swig-interfaces/FXFoldingList.i b/swig-interfaces/FXFoldingList.i
index 22892f859f5772910c93114f412ec2db2b12e323..cbefbd491df3b47f7bb282fac9fef8031668a645 100644
--- a/swig-interfaces/FXFoldingList.i
+++ b/swig-interfaces/FXFoldingList.i
@@ -233,11 +233,11 @@ public:
       if(FXMALLOC(&strings,FXchar*,len+1)){
         for(long i=0;i<len;i++){
           VALUE s=rb_ary_entry(stringArray,i);
-	  strings[i]=StringValuePtr(s);
+          strings[i]=StringValuePtr(s);
           }
-	strings[len]=0;
+        strings[len]=0;
         self->setHeaders(strings,size);
-	FXFREE(&strings);
+        FXFREE(&strings);
         }
       }
   }
@@ -296,7 +296,7 @@ public:
     FXFoldingItem* insertItem(FXFoldingItem* other,FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE){
       if(item->isMemberOf(FXMETACLASS(FXRbFoldingItem))){
         dynamic_cast<FXRbFoldingItem*>(item)->owned=TRUE;
-	}
+        }
       return self->insertItem(other,father,item,notify);
       }
   }
@@ -309,7 +309,7 @@ public:
     FXFoldingItem* appendItem(FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE){
       if(item->isMemberOf(FXMETACLASS(FXRbFoldingItem))){
         dynamic_cast<FXRbFoldingItem*>(item)->owned=TRUE;
-	}
+        }
       return self->appendItem(father,item,notify);
       }
   }
@@ -322,7 +322,7 @@ public:
     FXFoldingItem* prependItem(FXFoldingItem* father,FXFoldingItem* item,FXbool notify=FALSE){
       if(item->isMemberOf(FXMETACLASS(FXRbFoldingItem))){
         dynamic_cast<FXRbFoldingItem*>(item)->owned=TRUE;
-	}
+        }
       return self->prependItem(father,item,notify);
       }
   }
diff --git a/swig-interfaces/FXTreeList.i b/swig-interfaces/FXTreeList.i
index b11e2dcf35456c5dd458dfd4c2b8d75a25c7c052..43bc2dcc9e7559b1328afed44316adf995d83602 100644
--- a/swig-interfaces/FXTreeList.i
+++ b/swig-interfaces/FXTreeList.i
@@ -260,55 +260,41 @@ public:
     /// Insert [possibly subclassed] item under father before other item
     FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE){
       if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
+        dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE;
+        }
       return self->insertItem(other,father,item,notify);
       }
+  }
 
-    /// Insert item with given text and optional icons, and user-data pointer under father before other item
-    FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE){
-      FXTreeItem* item=self->insertItem(other,father,text,oi,ci,ITEMDATA,notify);
-      if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
-      return item;
-      }
+  /// Insert item with given text and optional icons, and user-data pointer under father before other item
+  FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE);
 
+  %extend {
     /// Append [possibly subclassed] item as last child of father
     FXTreeItem* appendItem(FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE){
       if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
+        dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE;
+        }
       return self->appendItem(father,item,notify);
       }
+  }
 
-    /// Append item with given text and optional icons, and user-data pointer as last child of father
-    FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE){
-      FXTreeItem* item=self->appendItem(father,text,oi,ci,ITEMDATA,notify);
-      if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
-      return item;
-      }
+  /// Append item with given text and optional icons, and user-data pointer as last child of father
+  FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE);
 
+  %extend {
     /// Prepend [possibly subclassed] item as first child of father
     FXTreeItem* prependItem(FXTreeItem* father,FXTreeItem* item,FXbool notify=FALSE){
       if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
+        dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE;
+        }
       return self->prependItem(father,item,notify);
       }
-
-    /// Prepend item with given text and optional icons, and user-data pointer as first child of father
-    FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE){
-      FXTreeItem* item=self->prependItem(father,text,oi,ci,ITEMDATA,notify);
-      if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
-      return item;
-      }
   }
 
+  /// Prepend item with given text and optional icons, and user-data pointer as first child of father
+  FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL,FXbool notify=FALSE);
+
   /// Move item under father before other item
   FXTreeItem *moveItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item);
 
@@ -360,7 +346,7 @@ public:
         FXRbUnregisterRubyObj(items[i]);
         }
       }
-  }
+    }
 
   /// Return item width
   FXint getItemWidth(const FXTreeItem* item) const;
diff --git a/swig-interfaces/FXTreeListBox.i b/swig-interfaces/FXTreeListBox.i
index d98303b38e0dd4cdb4cc08317fb66fdf4aebc268..0eb0cf648f56bc7cbaec8727fcbfa673b26e3dc2 100644
--- a/swig-interfaces/FXTreeListBox.i
+++ b/swig-interfaces/FXTreeListBox.i
@@ -93,55 +93,42 @@ public:
     /// Insert [possibly subclassed] item under father before other item
     FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,FXTreeItem* item){
       if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
+        dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE;
+        }
       return self->insertItem(other,father,item);
       }
+  }
 
+  /// Insert item with given text and optional icons, and user-data pointer under father before other item
+  FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL);
 
-    /// Insert item with given text and optional icons, and user-data pointer under father before other item
-    FXTreeItem* insertItem(FXTreeItem* other,FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL){
-      FXTreeItem* item=self->insertItem(other,father,text,oi,ci,ITEMDATA);
-      if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
-      return item;
-      }
-
+  %extend {
     /// Append [possibly subclassed] item as last child of father
     FXTreeItem* appendItem(FXTreeItem* father,FXTreeItem* item){
       if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
+        dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE;
+        }
       return self->appendItem(father,item);
       }
+  }
 
-    /// Append item with given text and optional icons, and user-data pointer as last child of father
-    FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL){
-      FXTreeItem* item=self->appendItem(father,text,oi,ci,ITEMDATA);
-      if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
-      return item;
-      }
+  /// Append item with given text and optional icons, and user-data pointer as last child of father
+  FXTreeItem* appendItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL);
 
+  %extend {
     /// Prepend [possibly subclassed] item as first child of father
     FXTreeItem* prependItem(FXTreeItem* father,FXTreeItem* item){
       if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
+        dynamic_cast<FXRbTreeItem*>(item)->owned=TRUE;
+        }
       return self->prependItem(father,item);
       }
+  }
 
-    /// Prepend item with given text and optional icons, and user-data pointer as first child of father
-    FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL){
-      FXTreeItem* item=self->prependItem(father,text,oi,ci,ITEMDATA);
-      if(item->isMemberOf(FXMETACLASS(FXRbTreeItem))){
-        dynamic_cast<FXRbTreeItem*>(item)->owner=self;
-	}
-      return item;
-      }
+  /// Prepend item with given text and optional icons, and user-data pointer as first child of father
+  FXTreeItem* prependItem(FXTreeItem* father,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL);
 
+  %extend {
     /// Remove item
     void removeItem(FXTreeItem* item){
       // Save pointer(s) to the soon-to-be-destroyed items