MYFACES-3196
diff --git a/api/src/main/java/javax/faces/convert/NumberConverter.java b/api/src/main/java/javax/faces/convert/NumberConverter.java
index 51efe3f..4df5673 100755
--- a/api/src/main/java/javax/faces/convert/NumberConverter.java
+++ b/api/src/main/java/javax/faces/convert/NumberConverter.java
@@ -24,6 +24,7 @@
 import java.text.DecimalFormatSymbols;
 import java.text.NumberFormat;
 import java.text.ParseException;
+import java.text.ParsePosition;
 import java.util.Currency;
 import java.util.Locale;
 
@@ -154,27 +155,27 @@
             }
             catch (ParseException pe)
             {
-                if(getPattern() != null)
+                if (getPattern() != null)
                 {
                     throw new ConverterException(_MessageUtils.getErrorMessage(facesContext,
                             PATTERN_ID,
                             new Object[]{value, "$###,###", _MessageUtils.getLabel(facesContext, uiComponent)}));
                 }
-                else if(getType().equals("number"))
+                else if (getType().equals("number"))
                 {
                     throw new ConverterException(_MessageUtils.getErrorMessage(facesContext,
                             NUMBER_ID,
                             new Object[]{value, format.format(21),
                                          _MessageUtils.getLabel(facesContext, uiComponent)}));
                 }
-                else if(getType().equals("currency"))
+                else if (getType().equals("currency"))
                 {
                     throw new ConverterException(_MessageUtils.getErrorMessage(facesContext,
                             CURRENCY_ID,
                             new Object[]{value, format.format(42.25),
                                          _MessageUtils.getLabel(facesContext, uiComponent)}));
                 }
-                else if(getType().equals("percent"))
+                else if (getType().equals("percent"))
                 {
                     throw new ConverterException(_MessageUtils.getErrorMessage(facesContext,
                             PERCENT_ID,
@@ -190,14 +191,24 @@
     private Object parse(String value, NumberFormat format, Class<?> destType)
         throws ParseException
     {
+        Object parsed = null;
+        
+        ParsePosition parsePosition = new ParsePosition(0);
         if (destType == BigInteger.class)
         {
-            return ((BigDecimal) format.parse(value)).toBigInteger();
+            parsed = ((BigDecimal) format.parse(value, parsePosition)).toBigInteger();
         }
         else
         {
-            return format.parse(value);
+            parsed = format.parse(value, parsePosition);
         }
+        
+        if (parsePosition.getIndex() != value.length())
+        {
+            throw new ParseException(value, parsePosition.getIndex());
+        }
+
+        return parsed;
     }
 
     @Override
diff --git a/impl/src/test/java/javax/faces/convert/NumberConverterTest.java b/impl/src/test/java/javax/faces/convert/NumberConverterTest.java
index edc6b83..72d2643 100644
--- a/impl/src/test/java/javax/faces/convert/NumberConverterTest.java
+++ b/impl/src/test/java/javax/faces/convert/NumberConverterTest.java
@@ -202,4 +202,25 @@
         assertTrue(number instanceof BigInteger);
         assertEquals(BigInteger.ONE, number);
     }
+    
+    @Test(expected = ConverterException.class)
+    public void testGetAsObjectWithBigIntegerAndParsePosition()
+    {
+        facesContext.getViewRoot().setLocale(Locale.US);
+        mock.setLocale(Locale.GERMANY);
+        mock.setIntegerOnly(true);
+        mock.setGroupingUsed(false);
+        UIInput input = new UIInput();
+        facesContext.getELContext().getELResolver().setValue(facesContext.getELContext(), null,
+            "bigInteger", BigInteger.ONE);
+        ValueExpression valueExpression =
+        application
+            .getExpressionFactory()
+            .createValueExpression(facesContext.getELContext(), "#{bigInteger}", BigInteger.class);
+        input.setValueExpression("value", valueExpression);
+        Number number = (Number) mock.getAsObject(FacesContext.getCurrentInstance(), input, "1,0.0,00.00");
+        assertNotNull(number);
+        assertTrue(number instanceof BigInteger);
+        assertEquals(BigInteger.ONE, number);
+    }
 }