diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 026be5e..e360fb6 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -46,6 +46,7 @@
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.Options;
 import org.apache.empire.commons.StringUtils;
+import org.apache.empire.commons.Unwrappable;
 import org.apache.empire.data.Column;
 import org.apache.empire.data.ColumnExpr;
 import org.apache.empire.data.DataType;
@@ -88,7 +89,7 @@
      * wraps a ColumnExpr object into a Column interface object
      * @author doebele
      */
-    protected static class ColumnExprWrapper implements Column
+    protected static class ColumnExprWrapper implements Column, Unwrappable<ColumnExpr>
     {
         private final ColumnExpr expr;
 
@@ -164,10 +165,7 @@
 
         @Override
         public ColumnExpr unwrap()
-        {   // unwrap the expression
-            if (expr.isWrapper())
-                return expr.unwrap();
-            // the wrapped expression
+        {   // the wrapped expression
             return expr;
         }
 
diff --git a/empire-db/src/main/java/org/apache/empire/commons/ObjectUtils.java b/empire-db/src/main/java/org/apache/empire/commons/ObjectUtils.java
index 8e13af1..f871f81 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/ObjectUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/ObjectUtils.java
@@ -282,10 +282,10 @@
      */
     public static boolean compareEqual(ColumnExpr expr, ColumnExpr other)
     {
-        if (other.isWrapper() && !expr.isWrapper())
-            return expr.equals(other.unwrap());
-        else if (!other.isWrapper() && expr.isWrapper())
-            return expr.unwrap().equals(other);
+        if (isWrapper(other) && !isWrapper(expr))
+            return expr.equals(unwrap(other));
+        else  if (!isWrapper(other) && isWrapper(expr))
+            return unwrap(expr).equals(other);
         // both wrapped or both unwrapped
         return expr.equals(other);
     }
diff --git a/empire-db/src/main/java/org/apache/empire/data/ColumnExpr.java b/empire-db/src/main/java/org/apache/empire/data/ColumnExpr.java
index 29ed800..2b8feb2 100644
--- a/empire-db/src/main/java/org/apache/empire/data/ColumnExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/data/ColumnExpr.java
@@ -25,7 +25,7 @@
  * The column interface provides methods for accessing metadata that is relevant for managing
  * and displaying data available through the RecordData interface.
  */
-public interface ColumnExpr extends Unwrappable<ColumnExpr>
+public interface ColumnExpr
 {
     /**
      * Returns the column's data type.
diff --git a/empire-db/src/main/java/org/apache/empire/data/bean/BeanProperty.java b/empire-db/src/main/java/org/apache/empire/data/bean/BeanProperty.java
index 9c66574..57a14ed 100644
--- a/empire-db/src/main/java/org/apache/empire/data/bean/BeanProperty.java
+++ b/empire-db/src/main/java/org/apache/empire/data/bean/BeanProperty.java
@@ -25,7 +25,6 @@
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.Options;
 import org.apache.empire.data.Column;
-import org.apache.empire.data.ColumnExpr;
 import org.apache.empire.data.DataType;
 import org.apache.empire.db.exceptions.FieldNotNullException;
 
@@ -214,18 +213,6 @@
         return this;
     }
 
-    @Override
-    public boolean isWrapper()
-    {   // Nope
-        return false; 
-    }
-
-    @Override
-    public ColumnExpr unwrap()
-    {   // Nothing to unwrap
-        return this; 
-    }
-
     // --- Column interface implementation ---
     
     @Override
diff --git a/empire-db/src/main/java/org/apache/empire/data/list/DataListEntry.java b/empire-db/src/main/java/org/apache/empire/data/list/DataListEntry.java
index 20e4f2b..7e25fb0 100644
--- a/empire-db/src/main/java/org/apache/empire/data/list/DataListEntry.java
+++ b/empire-db/src/main/java/org/apache/empire/data/list/DataListEntry.java
@@ -129,7 +129,7 @@
         ColumnExpr[] cols = head.getColumns(); 
         for (int i=0; i<cols.length; i++)
         {
-            ColumnExpr col = cols[i].unwrap();
+            ColumnExpr col = ObjectUtils.unwrap(cols[i]);
             // must be a column!
             if (!(col instanceof Column))
             {   // not a true column
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBColumn.java b/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
index c8e68d4..4a7d814 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
@@ -54,16 +54,6 @@
     // *Deprecated* private static final long serialVersionUID = 1L;
   
     private static final Logger log = LoggerFactory.getLogger(DBColumn.class);
-    
-    /**
-     * Read only column (Boolean)
-     */
-    // private static final String DBCOLATTR_READONLY  = "readonly";
-    
-    /**
-     * Read only column (Boolean)
-     */
-    public static final String DBCOLATTR_SINGLEBYTECHARS  = "singleByteChars";
 
     // basic data
     protected final DBRowSet  rowset; /* transient */
@@ -311,11 +301,11 @@
     }
 
     /**
-     * Returns the name of the column as a value expression
-     * This may be used to reference a parent column in a subquery 
+     * Returns a reference expression for this column
+     * This can be used to reference a parent column in a subquery 
      * @return the column value expression
      */
-    public DBValueExpr value()
+    public DBValueExpr reference()
     {
         return new DBValueExpr(getDatabase(), this, DataType.UNKNOWN);    
     }
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java b/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
index 112817f..d3e440d 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
@@ -119,24 +119,6 @@
     public abstract Element addXml(Element parent, long flags);
 
     /**
-     * @link {#org.apache.empire.commons.Unwrappable#isWrapper()}
-     */
-    @Override
-    public boolean isWrapper()
-    {   // Nope
-        return false;
-    }
-
-    /**
-     * @link {#org.apache.empire.commons.Unwrappable#unwrap()}
-     */
-    @Override
-    public DBColumnExpr unwrap()
-    {   // Noting to unwrap
-        return this;
-    }
-
-    /**
      * returns an expression that renames the column with its alias name
      */
     public DBColumnExpr qualified()
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
index 5547767..b36b1e4 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
@@ -663,7 +663,7 @@
                     return i; // found
             }
         // try unwrap
-        ColumnExpr unwrapped = columnExpr.unwrap();
+        ColumnExpr unwrapped = ObjectUtils.unwrap(columnExpr);
         if (unwrapped!=columnExpr)
             return getColumnIndex(unwrapped);
         // not found
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java b/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
index a4f608e..9ee2f0e 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
@@ -47,6 +47,9 @@
     // *Deprecated* private static final long serialVersionUID = 1L;
     private static final Logger log = LoggerFactory.getLogger(DBTableColumn.class);
     
+    // Additional Attributes
+    public static final String DBCOLATTR_SINGLEBYTECHARS  = "singleByteChars";
+    
     // Column Information
     protected DataType  type;
     protected double    size;
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
index dea582f..e25b18d 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
@@ -22,6 +22,7 @@
 
 // Java
 import org.apache.empire.commons.StringUtils;
+import org.apache.empire.commons.Unwrappable;
 import org.apache.empire.data.DataType;
 import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
@@ -36,7 +37,7 @@
  * There is no need to explicitly create instances of this class.<BR>
  * Instead use {@link DBColumnExpr#as(String) }
  */
-public class DBAliasExpr extends DBColumnExpr
+public class DBAliasExpr extends DBColumnExpr implements Unwrappable<DBColumnExpr>
 {
     // *Deprecated* private static final long serialVersionUID = 1L;
   
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBCoalesceExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBCoalesceExpr.java
index 2c0d136..cbc226c 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBCoalesceExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBCoalesceExpr.java
@@ -6,12 +6,13 @@
 import java.util.Set;
 
 import org.apache.empire.commons.StringUtils;
+import org.apache.empire.commons.Unwrappable;
 import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
 import org.apache.empire.db.DBExpr;
 import org.apache.empire.dbms.DBSqlPhrase;
 
-public class DBCoalesceExpr extends DBAbstractFuncExpr
+public class DBCoalesceExpr extends DBAbstractFuncExpr implements Unwrappable<DBColumnExpr>
 {
     private final Object nullValue;
     
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBParenthesisExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBParenthesisExpr.java
index 699eb0f..df6cce3 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBParenthesisExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBParenthesisExpr.java
@@ -20,6 +20,7 @@
 
 import java.util.Set;
 
+import org.apache.empire.commons.Unwrappable;
 import org.apache.empire.data.DataType;
 import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
@@ -32,7 +33,7 @@
  * There is no need to explicitly create instances of this class.<BR>
  * Instead use {@link DBColumnExpr#as(String) }
  */
-public class DBParenthesisExpr extends DBColumnExpr
+public class DBParenthesisExpr extends DBColumnExpr implements Unwrappable<DBColumnExpr>
 {
     // *Deprecated* private static final long serialVersionUID = 1L;
   
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
index 6d38d99..77f12a3 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
@@ -20,6 +20,7 @@
 
 import java.util.Set;
 
+import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.data.DataType;
 import org.apache.empire.db.DBCmdParam;
 import org.apache.empire.db.DBCmpType;
@@ -300,17 +301,11 @@
     {
         // check type 
     	if (other instanceof DBCompareColExpr)
-    	{   // unwrap
-            DBColumnExpr texpr = expr;
-            if (texpr.isWrapper())
-                texpr = texpr.unwrap();
-            // other
+    	{   // other
             DBCompareColExpr o = (DBCompareColExpr)other;
             DBColumnExpr oexpr = o.getColumnExpr();
-            if (oexpr.isWrapper())
-                oexpr = oexpr.unwrap();
     		// Compare
-    		if (texpr.equals(oexpr))
+    		if (ObjectUtils.compareEqual(expr, oexpr))
     			return true;
     		/*
             // probably not a good idea to do this:
