diff --git a/tapestry-core/src/test/app1/SelectDemo.tml b/tapestry-core/src/test/app1/SelectDemo.tml
index 86ae7e0..25d8ba8 100644
--- a/tapestry-core/src/test/app1/SelectDemo.tml
+++ b/tapestry-core/src/test/app1/SelectDemo.tml
@@ -8,7 +8,10 @@
 			:
 			<t:select t:id="color" validate="required" blankOption="always"
 				model="literal:Red,Green,Blue" />
-
+			<t:label for="number" />
+			:
+			<t:select t:id="number" 
+				model="numbermodel" context="numbercontext" encoder="numberencoder" />
 		</p>
 
 		<p>
@@ -17,5 +20,7 @@
 	</t:form>
 
 	<p> Selected color: ${color}</p>
+	<p> Selected number: ${number}</p>
+	<p> Selected number context: ${selectedNumberContext}</p>
 
 </t:border>
\ No newline at end of file
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java
index 518b623..7a9217d 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectDemo.java
@@ -13,8 +13,12 @@
 // limitations under the License.
 package org.apache.tapestry5.integration.app1.pages;
 
+import java.util.List;
+
+import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 
 public class SelectDemo
 {
@@ -22,5 +26,70 @@ public class SelectDemo
     @Property
     @Persist
     private String color;
+    
+    @Property
+    @Persist
+    private int number;
+    
+    @Property
+    @Persist
+    private int selectedNumberContext;
+    
+    public List<Integer> getNumberModel(){
+      return CollectionFactory.newList(1,2,3,4);
+    }
+    
+    public ValueEncoder<Integer> getNumberEncoder(){
+      return new ValueEncoder<Integer>() {
+
+        @Override
+        public String toClient(Integer value) {
+          if (Integer.valueOf(0).equals(value)){
+            return "zero";
+          }
+          if (Integer.valueOf(1).equals(value)){
+            return "one";
+          }
+          if (Integer.valueOf(2).equals(value)){
+            return "two";
+          }
+          if (Integer.valueOf(3).equals(value)){
+            return "3";
+          }
+          if (Integer.valueOf(4).equals(value)){
+            return "four";
+          }
+          throw new IllegalArgumentException(value + " is not a supported value");
+        }
+
+        @Override
+        public Integer toValue(String clientValue) {
+          if ("zero".equals(clientValue)){
+            return 0;
+          }
+          if ("one".equals(clientValue)){
+            return 1;
+          }
+          if ("two".equals(clientValue)){
+            return 2;
+          }
+          if ("3".equals(clientValue)){
+            return 3;
+          }
+          if ("four".equals(clientValue)){
+            return 4;
+          }
+          throw new IllegalArgumentException(clientValue + " is not a supported value");
+        }
+      };
+    }
+    
+    public Integer getNumberContext(){
+      return 4;
+    }
+    
+    void onValueChangedFromNumber(int number, int context){
+      selectedNumberContext = context;
+    }
 
 }
