diff --git a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/PBMessage.java b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/PBMessage.java
new file mode 100644
index 0000000..6996f67
--- /dev/null
+++ b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/PBMessage.java
@@ -0,0 +1,23 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.protobuf;
+
+public interface PBMessage <Bean, Buffer extends MessageBuffer>{
+    public Bean copy();
+    public boolean frozen();
+    public Buffer freeze();
+}
diff --git a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/AltJavaGenerator.java b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/AltJavaGenerator.java
index 9745f71..85024f7 100644
--- a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/AltJavaGenerator.java
+++ b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/AltJavaGenerator.java
@@ -247,8 +247,15 @@
         if( multipleFiles && m.getParent()==null ) {
             staticOption="";
         }
-                
-        p(staticOption+"public interface " + className +" {");
+
+        String extendsClause = " extends org.apache.activemq.protobuf.PBMessage<"+className+"."+beanClassName+", "+className+"."+bufferClassName+">";
+        for (EnumFieldDescriptor enumFeild : m.getAssociatedEnumFieldDescriptors()) {
+            String name = uCamel(enumFeild.getParent().getName());
+            name = name+"."+name+"Creatable";
+            extendsClause += ", "+name; 
+        }
+        
+        p(staticOption+"public interface " + className + extendsClause +" {");
         p();
         indent();
         
@@ -337,6 +344,16 @@
         generateMethodClear(m);
         
         generateReadWriteExternal(m);
+        
+        for (EnumFieldDescriptor enumFeild : m.getAssociatedEnumFieldDescriptors()) {
+            String enumName = uCamel(enumFeild.getParent().getName());
+            p("public "+enumName+" to"+enumName+"() {");
+            indent();
+            p("return "+enumName+"."+enumFeild.getName()+";");
+            unindent();
+            p("}");
+            p();            
+        }        
 
         unindent();
         p("}");
@@ -425,6 +442,22 @@
         
         generateBufferEquals(m, bufferClassName);
 
+        p("public boolean frozen() {");
+        indent();
+        p("return true;");
+        unindent();
+        p("}");
+
+        for (EnumFieldDescriptor enumFeild : m.getAssociatedEnumFieldDescriptors()) {
+            String enumName = uCamel(enumFeild.getParent().getName());
+            p("public "+enumName+" to"+enumName+"() {");
+            indent();
+            p("return "+enumName+"."+enumFeild.getName()+";");
+            unindent();
+            p("}");
+            p();            
+        }        
+        
         unindent();
         p("}");
         p();
@@ -1542,11 +1575,9 @@
             }
         }
         
-        
-        
-        
         unindent();
         p("}");
+        p();            
         
     }
     
@@ -2062,13 +2093,20 @@
         String createMessage = getOption(ed.getOptions(), "java_create_message", null);        
         if( "true".equals(createMessage) ) {
             
-            p("public Object createBean() {");
+            p("public interface "+uname+"Creatable {");
+            indent();
+            p(""+uname+" to"+uname+"();");
+            unindent();
+            p("}");
+            p();
+            
+            p("public "+uname+"Creatable createBean() {");
             indent();
             p("switch (this) {");
             indent();
             for (EnumFieldDescriptor field : ed.getFields().values()) {
                 p("case "+field.getName()+":");
-                String type = constantToUCamelCase(field.getName());
+                String type = field.getAssociatedType().getName();
                 p("   return new "+type+"."+type+"Bean();");
             }
             p("default:");
diff --git a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/EnumDescriptor.java b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/EnumDescriptor.java
index b392fad..3e6e195 100644
--- a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/EnumDescriptor.java
+++ b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/EnumDescriptor.java
@@ -52,9 +52,56 @@
         return protoDescriptor;
     }
 
+    private String getOption(Map<String, OptionDescriptor> options, String optionName, String defaultValue) {
+        OptionDescriptor optionDescriptor = options.get(optionName);
+        if (optionDescriptor == null) {
+            return defaultValue;
+        }
+        return optionDescriptor.getValue();
+    }
+    
+    private String constantToUCamelCase(String name) {
+        boolean upNext=true;
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < name.length(); i++) {
+            char c = name.charAt(i);
+            if( Character.isJavaIdentifierPart(c) && Character.isLetterOrDigit(c)) {
+                if( upNext ) {
+                    c = Character.toUpperCase(c);
+                    upNext=false;
+                } else {
+                    c = Character.toLowerCase(c);
+                }
+                sb.append(c);
+            } else {
+                upNext=true;
+            }
+        }
+        return sb.toString();
+    }
+    
     public void validate(List<String> errors) {
-        // TODO Auto-generated method stub
-        
+        String createMessage = getOption(getOptions(), "java_create_message", null);        
+        if( "true".equals(createMessage) ) {
+            for (EnumFieldDescriptor field : getFields().values()) {
+                String type = constantToUCamelCase(field.getName());
+                
+                TypeDescriptor typeDescriptor=null;
+                // Find the type def for that guy..
+                if( parent!=null ) {
+                    typeDescriptor = parent.getType(type);
+                }
+                if( typeDescriptor == null ) {
+                    typeDescriptor = protoDescriptor.getType(type);
+                }
+                if( typeDescriptor == null ) {
+                    errors.add("ENUM constant '"+field.getName()+"' did not find expected associated message: "+type);
+                } else {
+                    field.associate(typeDescriptor);
+                    typeDescriptor.associate(field);
+                }
+            }
+        }
     }
 
     public MessageDescriptor getParent() {
@@ -81,5 +128,9 @@
         this.options = options;
     }
 
+    public void associate(EnumFieldDescriptor desc) {
+        throw new RuntimeException("not supported.");
+    }
+
 
 }
diff --git a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/EnumFieldDescriptor.java b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/EnumFieldDescriptor.java
index e011c9c..694492a 100644
--- a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/EnumFieldDescriptor.java
+++ b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/EnumFieldDescriptor.java
@@ -21,7 +21,8 @@
     private String name;
     private int value;
     private final EnumDescriptor parent;
-
+    private TypeDescriptor associatedType;
+    
     public EnumFieldDescriptor(EnumDescriptor parent) {
         this.parent = parent;
     }
@@ -46,4 +47,12 @@
         return parent;
     }
 
+    public TypeDescriptor getAssociatedType() {
+        return associatedType;
+    }
+
+    public void associate(TypeDescriptor associatedType) {
+        this.associatedType = associatedType;
+    }
+
 }
diff --git a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java
index e512f48..c407b44 100644
--- a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java
+++ b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java
@@ -35,6 +35,8 @@
     private final ProtoDescriptor protoDescriptor;
     private List<MessageDescriptor> extendsList = new ArrayList<MessageDescriptor>();
     private Map<String, OptionDescriptor> options = new LinkedHashMap<String, OptionDescriptor>();
+    private List<EnumFieldDescriptor> associatedEnumFieldDescriptors = new ArrayList<EnumFieldDescriptor>();
+    
     private final MessageDescriptor parent;
 	private MessageDescriptor baseType;
 
@@ -183,4 +185,12 @@
 		return baseType;
 	}
 
+    public void associate(EnumFieldDescriptor desc) {
+        associatedEnumFieldDescriptors.add(desc);
+    }
+
+    public List<EnumFieldDescriptor> getAssociatedEnumFieldDescriptors() {
+        return associatedEnumFieldDescriptors;
+    }
+
 }
diff --git a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/TypeDescriptor.java b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/TypeDescriptor.java
index e280b50..6e47738 100644
--- a/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/TypeDescriptor.java
+++ b/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/TypeDescriptor.java
@@ -25,4 +25,6 @@
 
     public boolean isEnum();
 
+    public void associate(EnumFieldDescriptor desc);
+    
 }
