diff --git a/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java b/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
index 85d4d00..bfd9999 100644
--- a/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
+++ b/tapestry-beanvalidator/src/test/java/org/apache/tapestry5/beanvalidator/integration/TapestryBeanValidationIntegrationTests.java
@@ -281,5 +281,24 @@
                 getText(String.format(locatorTemplate, "minValue")));
 
     }
+    
+    //TAP5-1981
+    @Test
+    public void validate_with_radiogroup() throws Exception
+    {
+        openLinks("Radio Group with Validation");
+        
+        click("//div[@class='test1']/form/input[@value='3']");
+
+        clickAndWait("//div[@class='test1']/form/input[@type='submit']");
+
+        assertTextPresent("Radiogroup requires a value no larger than 2.");
+
+        click("//div[@class='test2']/form/input[@value='3']");
+
+        clickAndWait("//div[@class='test2']/form/div/div/input[@type='submit']");
+
+        assertTextPresent("Group2 must be less than or equal to 2");
+    }
 
 }
\ No newline at end of file
diff --git a/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java b/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java
new file mode 100644
index 0000000..7274604
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/java/org/example/testapp/entities/BeanForTAP1981.java
@@ -0,0 +1,18 @@
+package org.example.testapp.entities;
+
+import javax.validation.constraints.Max;
+
+public class BeanForTAP1981 {
+
+  private int number;
+
+  @Max(2)
+  public int getNumber() {
+    return number;
+  }
+
+  public void setNumber(final int value) {
+    number = value;
+  }
+
+}
diff --git a/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java b/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java
new file mode 100644
index 0000000..8531029
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/java/org/example/testapp/pages/RadioGroupWithValidation.java
@@ -0,0 +1,35 @@
+package org.example.testapp.pages;
+
+import org.apache.tapestry5.FieldValidator;
+import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.Environmental;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.corelib.components.RadioGroup;
+import org.apache.tapestry5.services.PropertyEditContext;
+import org.example.testapp.entities.BeanForTAP1981;
+
+public class RadioGroupWithValidation {
+
+  @Component(parameters = { "value=bean.number", "validate=prop:beanValidator" })
+  private RadioGroup group2;
+
+  /* */
+  @Persist
+  private BeanForTAP1981 bean;
+
+  /* */
+  @Environmental
+  private PropertyEditContext context;
+
+  public BeanForTAP1981 getBean() {
+    if (bean == null) {
+      bean = new BeanForTAP1981();
+    }
+    return bean;
+  }
+
+  public FieldValidator getBeanValidator() {
+    return context.getValidator(group2);
+  }
+
+}
diff --git a/tapestry-beanvalidator/src/test/webapp/Index.tml b/tapestry-beanvalidator/src/test/webapp/Index.tml
index abc9dfa..e19eafb 100644
--- a/tapestry-beanvalidator/src/test/webapp/Index.tml
+++ b/tapestry-beanvalidator/src/test/webapp/Index.tml
@@ -32,6 +32,9 @@
             </li>            
             <li>
                 <t:pagelink page="NestedObjectDemo" t:context="true">NestedObject Demo (client validation enabled)</t:pagelink>
+            </li>
+            <li>
+            	<t:pagelink page="RadioGroupWithValidation">Radio Group with Validation</t:pagelink>
             </li>            
         </ul>
     </body>
diff --git a/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml b/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml
new file mode 100644
index 0000000..f1123a1
--- /dev/null
+++ b/tapestry-beanvalidator/src/test/webapp/RadioGroupWithValidation.tml
@@ -0,0 +1,32 @@
+<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
+      xmlns:p="tapestry:parameter">
+    <body>
+     	<div class="test1">
+	     	<h1>test 1</h1>
+	        <t:form>
+	
+				<t:errors/>
+	            <t:RadioGroup value="bean.number" validate="max=2">
+	                <t:radio value="1"/>1<br/>
+	                <t:radio value="2"/>2<br/>
+					<t:radio value="3"/>3<br/>
+				</t:RadioGroup>
+	
+				<t:submit/>
+	        </t:form>
+		</div>
+     	<div class="test2">
+		
+			<h1>test 2</h1>
+			<t:BeanEditForm object="bean">
+				<p:number>
+					<t:comp t:id="group2">
+						<t:radio value="1"/>1<br/>
+						<t:radio value="2"/>2<br/>
+						<t:radio value="3"/>3<br/>
+					</t:comp>
+				</p:number>
+			</t:BeanEditForm>
+		</div>
+    </body>
+</html>
\ No newline at end of file
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
index cd594c1..053f056 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/RadioGroup.java
@@ -170,19 +170,20 @@
             return;
         }
         String rawValue = request.getParameter(controlName);
+        Object convertedValue = encoder.toValue(rawValue);
 
         tracker.recordInput(this, rawValue);
         try
         {
             if (validate != null)
-                fieldValidationSupport.validate(rawValue, resources, validate);
+                fieldValidationSupport.validate(convertedValue, resources, validate);
         }
         catch (ValidationException ex)
         {
             tracker.recordError(this, ex.getMessage());
         }
 
-        value = encoder.toValue(rawValue);
+        value = convertedValue;
     }
 
     /**
