WICKET-5866 added #createConverter() without generics parameter for convenience
diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java b/wicket-core/src/main/java/org/apache/wicket/Component.java
index 6f91097..ac59be1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Component.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
@@ -1358,20 +1358,39 @@
 	}
 
 	/**
-	 * Gets the converter that should be used by this component.
-	 * 
+	 * Get the converter that should be used by this component, delegates to
+	 * {@link #createConverter(Class)} and then to the application's
+	 * {@link IConverterLocator}.
+	 *
 	 * @param type
 	 *            The type to convert to
-	 * 
+	 *
 	 * @return The converter that should be used by this component
 	 */
+	@SuppressWarnings("unchecked")
 	@Override
-	public <C> IConverter<C> getConverter(Class<C> type)
-	{
+	public <C> IConverter<C> getConverter(Class<C> type) {
+		IConverter<?> converter = createConverter(type);
+		if (converter != null) {
+			return (IConverter<C>) converter;
+		}
 		return getApplication().getConverterLocator().getConverter(type);
 	}
 
 	/**
+	 * Factory method for converters to be used by this component,
+	 * returns {@code null} by default.
+	 *
+	 * @param type
+	 *            The type to convert to
+	 *
+	 * @return a converter to be used by this component
+	 */
+	protected IConverter<?> createConverter(Class<?> type) {
+		return null;
+	}
+
+	/**
 	 * Gets whether model strings should be escaped.
 	 * 
 	 * @return Returns whether model strings should be escaped
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
index fdbf5b8..9b12674 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
@@ -186,18 +186,13 @@
 	}
 
 	@Override
-	public final <C> IConverter<C> getConverter(Class<C> type)
+	public IConverter<?> createConverter(Class<?> type)
 	{
 		if (Boolean.class.equals(type))
 		{
-			@SuppressWarnings("unchecked")
-			IConverter<C> converter = (IConverter<C>)CheckBoxConverter.INSTANCE;
-			return converter;
+			return CheckBoxConverter.INSTANCE;
 		}
-		else
-		{
-			return super.getConverter(type);
-		}
+		return null;
 	}
 
 	/**
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AbstractTextComponentConvertEmptyStringsToNullTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AbstractTextComponentConvertEmptyStringsToNullTest.java
index cef3a4a..0603dbc 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AbstractTextComponentConvertEmptyStringsToNullTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AbstractTextComponentConvertEmptyStringsToNullTest.java
@@ -74,10 +74,9 @@
 				private static final long serialVersionUID = 1L;
 
 				@Override
-				@SuppressWarnings("unchecked")
-				public <C> IConverter<C> getConverter(Class<C> type)
+				public IConverter<?> createConverter(Class<?> type)
 				{
-					return (IConverter<C>)new StringArrayConverter();
+					return new StringArrayConverter();
 				}
 			}.setConvertEmptyInputStringToNull(false));
 		}
diff --git a/wicket-datetime/src/main/java/org/apache/wicket/datetime/markup/html/basic/DateLabel.java b/wicket-datetime/src/main/java/org/apache/wicket/datetime/markup/html/basic/DateLabel.java
index 9d70d0e..102ec29 100644
--- a/wicket-datetime/src/main/java/org/apache/wicket/datetime/markup/html/basic/DateLabel.java
+++ b/wicket-datetime/src/main/java/org/apache/wicket/datetime/markup/html/basic/DateLabel.java
@@ -257,18 +257,13 @@
 	 * Returns the specialized converter.
 	 */
 	@Override
-	public <C> IConverter<C> getConverter(Class<C> clazz)
+	public IConverter<?> createConverter(Class<?> type)
 	{
-		if (Date.class.isAssignableFrom(clazz))
+		if (Date.class.isAssignableFrom(type))
 		{
-			@SuppressWarnings("unchecked")
-			IConverter<C> result = (IConverter<C>)converter;
-			return result;
+			return converter;
 		}
-		else
-		{
-			return super.getConverter(clazz);
-		}
+		return null;
 	}
 
 	/**
diff --git a/wicket-datetime/src/main/java/org/apache/wicket/datetime/markup/html/form/DateTextField.java b/wicket-datetime/src/main/java/org/apache/wicket/datetime/markup/html/form/DateTextField.java
index c2ce854..8009813 100644
--- a/wicket-datetime/src/main/java/org/apache/wicket/datetime/markup/html/form/DateTextField.java
+++ b/wicket-datetime/src/main/java/org/apache/wicket/datetime/markup/html/form/DateTextField.java
@@ -220,20 +220,16 @@
 
 	/**
 	 * @return The specialized converter.
-	 * @see org.apache.wicket.Component#getConverter(java.lang.Class)
+	 * @see org.apache.wicket.Component#createConverter(java.lang.Class)
 	 */
-	@SuppressWarnings("unchecked")
 	@Override
-	public <C> IConverter<C> getConverter(Class<C> clazz)
+	public IConverter<?> createConverter(Class<?> clazz)
 	{
 		if (Date.class.isAssignableFrom(clazz))
 		{
-			return (IConverter<C>)converter;
+			return converter;
 		}
-		else
-		{
-			return super.getConverter(clazz);
-		}
+		return null;
 	}
 
 	/**
diff --git a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java
index cbf4217..becfaed 100644
--- a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java
+++ b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/DateTimeField.java
@@ -232,18 +232,14 @@
 		{
 			private static final long serialVersionUID = 1L;
 
-			@SuppressWarnings("unchecked")
 			@Override
-			public <C> IConverter<C> getConverter(Class<C> type)
+			public IConverter<?> createConverter(Class<?> type)
 			{
 				if (Integer.class.isAssignableFrom(type))
 				{
-					return (IConverter<C>)MINUTES_CONVERTER;
+					return MINUTES_CONVERTER;
 				}
-				else
-				{
-					return super.getConverter(type);
-				}
+				return null;
 			}
 		};
 		minutesField.add(new RangeValidator<>(0, 59));
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/forminput/FormInput.java b/wicket-examples/src/main/java/org/apache/wicket/examples/forminput/FormInput.java
index 344f192..c608350 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/forminput/FormInput.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/forminput/FormInput.java
@@ -143,18 +143,14 @@
 			// TextField using a custom converter.
 			add(new TextField<URL>("urlProperty", URL.class)
 			{
-				@SuppressWarnings("unchecked")
 				@Override
-				public <C> IConverter<C> getConverter(final Class<C> type)
+				public IConverter<?> createConverter(Class<?> type)
 				{
 					if (URL.class.isAssignableFrom(type))
 					{
-						return (IConverter<C>)URLConverter.INSTANCE;
+						return URLConverter.INSTANCE;
 					}
-					else
-					{
-						return super.getConverter(type);
-					}
+					return null;
 				}
 			});
 
@@ -162,17 +158,14 @@
 			add(new TextField<UsPhoneNumber>("phoneNumberUS", UsPhoneNumber.class)
 			{
 				@Override
-				public <C> IConverter<C> getConverter(final Class<C> type)
+				public IConverter<?> createConverter(Class<?> type)
 				{
 					if (UsPhoneNumber.class.isAssignableFrom(type))
 					{
 						// US telephone number mask
 						return new MaskConverter<>("(###) ###-####", UsPhoneNumber.class);
 					}
-					else
-					{
-						return super.getConverter(type);
-					}
+					return null;
 				}
 			});
 
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/DateTextField.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/DateTextField.java
index 762a5c7..23fea2b 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/DateTextField.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/DateTextField.java
@@ -147,18 +147,14 @@
 	 * 
 	 * @see org.apache.wicket.markup.html.form.TextField
 	 */
-	@SuppressWarnings("unchecked")
 	@Override
-	public <C> IConverter<C> getConverter(final Class<C> type)
+	public IConverter<?> createConverter(Class<?> type)
 	{
 		if (Date.class.isAssignableFrom(type))
 		{
-			return (IConverter<C>)converter;
+			return converter;
 		}
-		else
-		{
-			return super.getConverter(type);
-		}
+		return null;
 	}
 
 	/**