diff --git a/empire-db/src/main/java/org/apache/empire/data/Record.java b/empire-db/src/main/java/org/apache/empire/data/Record.java
index 362dac1..470d0df 100644
--- a/empire-db/src/main/java/org/apache/empire/data/Record.java
+++ b/empire-db/src/main/java/org/apache/empire/data/Record.java
@@ -146,7 +146,7 @@
      * @param ignoreList list of column to ignore
      * @return the number of fields that have been set    
      */
-    int setBeanValues(Object bean, Collection<Column> ignoreList);
+    int setRecordValues(Object bean, Collection<Column> ignoreList);
 
     /**
      * sets all record values from a particular bean.
@@ -156,6 +156,6 @@
      * @param bean the Java Bean from which to read the value from
      * @return the number of fields that have been set    
      */
-    int setBeanValues(Object bean);
+    int setRecordValues(Object bean);
 
 }
diff --git a/empire-db/src/main/java/org/apache/empire/data/RecordData.java b/empire-db/src/main/java/org/apache/empire/data/RecordData.java
index 101b049..19da930 100644
--- a/empire-db/src/main/java/org/apache/empire/data/RecordData.java
+++ b/empire-db/src/main/java/org/apache/empire/data/RecordData.java
@@ -98,7 +98,7 @@
      * @param bean the Java Bean for which to set the properties
      * @param ignoreList list of columns to skip (optional)
      */
-    int getBeanProperties(Object bean, Collection<ColumnExpr> ignoreList);
+    int setBeanProperties(Object bean, Collection<ColumnExpr> ignoreList);
 
     /**
      * copies all field values into a static Java Bean.
@@ -107,6 +107,6 @@
      * the property name is detected by ColumnExpr.getBeanPropertyName()     
      * @param bean the Java Bean for which to set the properties
      */
-    int getBeanProperties(Object bean);
+    int setBeanProperties(Object bean);
 
 }
diff --git a/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java b/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
index 6cd0b7e..f481f68 100644
--- a/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
+++ b/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
@@ -313,13 +313,13 @@
     // --------------- Bean support ------------------
 
     @Override
-    public int getBeanProperties(Object bean)
+    public int setBeanProperties(Object bean)
     {
-        return getBeanProperties(bean, null);
+        return setBeanProperties(bean, null);
     }
 
     @Override
-    public int getBeanProperties(Object bean, Collection<ColumnExpr> ignoreList)
+    public int setBeanProperties(Object bean, Collection<ColumnExpr> ignoreList)
     {
         // Add all Columns
         int count = 0;
@@ -337,7 +337,7 @@
     }
 
     @Override
-    public int setBeanValues(Object bean, Collection<Column> ignoreList)
+    public int setRecordValues(Object bean, Collection<Column> ignoreList)
     {
         // Add all Columns
         int count = 0;
@@ -356,15 +356,15 @@
         }
         return count;
     }
-
+    
     @Override
-    public int setBeanValues(Object bean)
+    public int setRecordValues(Object bean)
     {
-        return setBeanValues(bean, null);
+        return setRecordValues(bean, null);
     }
 
     // --------------- protected ------------------
-    
+
     protected Object getBeanPropertyValue(Object bean, ColumnExpr column)
     {
         // Check Params
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBReader.java b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
index ec899bc..91f5902 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBReader.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
@@ -675,7 +675,7 @@
                 else
                 {   // Use Property Setters
                     T bean = t.newInstance();
-                    getBeanProperties(bean);
+                    setBeanProperties(bean);
                     c.add(bean);
                 }
                 // Decrease count
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
index ec13ced..942f01e 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
@@ -27,6 +27,7 @@
 import org.apache.commons.beanutils.PropertyUtilsBean;
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.Options;
+import org.apache.empire.commons.StringUtils;
 import org.apache.empire.data.Column;
 import org.apache.empire.data.ColumnExpr;
 import org.apache.empire.data.Record;
@@ -1022,14 +1023,12 @@
      * @param property the name of the property
      * @param column the column for which to set the record value
      */
-    protected void setBeanValue(Object bean, String property, Column column)
+    protected void setRecordValue(Column column, Object bean, String property)
     {
+        if (StringUtils.isEmpty(property))
+            property = column.getBeanPropertyName();
         try
-        {   /*
-            if (log.isTraceEnabled())
-                log.trace(bean.getClass().getName() + ": getting property '" + property + "' for column " + column.getName());
-            */
-            
+        {
             // Get Property Value
             PropertyUtilsBean pub = BeanUtilsBean.getInstance().getPropertyUtils();
             Object value = pub.getSimpleProperty(bean, property);
@@ -1055,7 +1054,7 @@
      * @return true if at least one value has been set successfully 
      */
     @Override
-    public int setBeanValues(Object bean, Collection<Column> ignoreList)
+    public int setRecordValues(Object bean, Collection<Column> ignoreList)
     {
         // Add all Columns
         int count = 0;
@@ -1068,7 +1067,7 @@
                 continue; // ignore this property
             // Get Property Name
             String property = column.getBeanPropertyName();
-            setBeanValue(bean, property, column);
+            setRecordValue(column, bean, property);
             count++;
         }
         return count;
@@ -1079,9 +1078,9 @@
      * @return true if at least one value has been set sucessfully
      */
     @Override
-    public final int setBeanValues(Object bean)
+    public final int setRecordValues(Object bean)
     {
-        return setBeanValues(bean, null);
+        return setRecordValues(bean, null);
     }
     
     /**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java b/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
index 704ff14..173505b 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
@@ -27,6 +27,7 @@
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.StringUtils;
+import org.apache.empire.data.Column;
 import org.apache.empire.data.ColumnExpr;
 import org.apache.empire.data.RecordData;
 import org.apache.empire.exceptions.BeanPropertySetException;
@@ -297,8 +298,11 @@
     /**
      * Set a single property value of a java bean object used by readProperties.
      */
-    protected void getBeanProperty(Object bean, String property, Object value)
+    @SuppressWarnings("rawtypes")
+    protected void setBeanProperty(ColumnExpr column, Object bean, String property, Object value)
     {
+        if (StringUtils.isEmpty(property))
+            property = column.getBeanPropertyName();
         try
         {
             if (bean==null)
@@ -315,6 +319,19 @@
                 value = DateUtils.addDate((Date)value, 0, 0, 0);
             }
             */
+            Object type = column.getAttribute(Column.COLATTR_ENUMTYPE);
+            if (type!=null && value!=null)
+            {
+                String name = value.toString();
+                @SuppressWarnings("unchecked")
+                Class<Enum> enumType = (Class<Enum>)type;
+                for (Enum e : enumType.getEnumConstants())
+                    if (e.name().equals(name))
+                    {
+                        value = e;
+                        break;
+                    }
+            }
             // Set Property Value
             if (value!=null)
             {   // Bean utils will convert if necessary
@@ -348,7 +365,7 @@
      * @return the number of bean properties set on the supplied bean
      */
     @Override
-    public int getBeanProperties(Object bean, Collection<ColumnExpr> ignoreList)
+    public int setBeanProperties(Object bean, Collection<ColumnExpr> ignoreList)
     {
         // Add all Columns
         int count = 0;
@@ -360,7 +377,7 @@
             // Get Property Name
             String property = column.getBeanPropertyName();
             if (property!=null)
-                getBeanProperty(bean, property, this.getValue(i));
+                setBeanProperty(column, bean, property, this.getValue(i));
             count++;
         }
         return count;
@@ -372,9 +389,9 @@
      * @return the number of bean properties set on the supplied bean
      */
     @Override
-    public final int getBeanProperties(Object bean)
+    public final int setBeanProperties(Object bean)
     {
-        return getBeanProperties(bean, null);
+        return setBeanProperties(bean, null);
     }
     
 }
