You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/05/09 16:32:59 UTC

git commit: WICKET-4535 Inconsistent use of generics in sorting APIs

Updated Branches:
  refs/heads/master 0f16b908e -> 8441fdd6d


WICKET-4535 Inconsistent use of generics in sorting APIs


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/8441fdd6
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/8441fdd6
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/8441fdd6

Branch: refs/heads/master
Commit: 8441fdd6dd1cf02baeb62f84b204a0aef4ff5b1a
Parents: 0f16b90
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed May 9 17:32:22 2012 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed May 9 17:32:22 2012 +0300

----------------------------------------------------------------------
 .../devutils/diskstore/browser/BrowserPanel.java   |    2 +-
 .../devutils/diskstore/browser/BrowserTable.java   |    2 +-
 .../diskstore/browser/PageWindowColumn.java        |    2 +-
 .../examples/repeater/AjaxDataTablePage.java       |   14 ++--
 .../wicket/examples/repeater/DataTablePage.java    |    4 +-
 .../spring/common/web/ContactsDisplayPage.java     |   15 ++--
 .../apache/wicket/examples/tree/TableTreePage.java |   20 +++---
 .../data/sort/AjaxFallbackOrderByBorder.java       |   40 ++++++-----
 .../data/sort/AjaxFallbackOrderByLink.java         |   38 +++++-----
 .../data/table/AjaxFallbackDefaultDataTable.java   |    4 +-
 .../data/table/AjaxFallbackHeadersToolbar.java     |   14 ++--
 .../repeater/data/table/AjaxNavigationToolbar.java |    4 +-
 .../markup/html/repeater/data/sort/ISortState.java |    8 +-
 .../html/repeater/data/sort/OrderByBorder.java     |   19 +++---
 .../html/repeater/data/sort/OrderByLink.java       |   55 ++++++++-------
 .../html/repeater/data/table/AbstractColumn.java   |   10 ++-
 .../html/repeater/data/table/AbstractToolbar.java  |    8 +-
 .../markup/html/repeater/data/table/DataTable.java |   28 ++++----
 .../html/repeater/data/table/DefaultDataTable.java |    4 +-
 .../html/repeater/data/table/HeaderlessColumn.java |    4 +-
 .../html/repeater/data/table/HeadersToolbar.java   |   20 +++---
 .../markup/html/repeater/data/table/IColumn.java   |   10 ++-
 .../html/repeater/data/table/IStyledColumn.java    |    4 +-
 .../repeater/data/table/NavigationToolbar.java     |    6 +-
 .../html/repeater/data/table/NoRecordsToolbar.java |    4 +-
 .../html/repeater/data/table/PropertyColumn.java   |    6 +-
 .../table/filter/ChoiceFilteredPropertyColumn.java |    7 +-
 .../repeater/data/table/filter/FilterToolbar.java  |    8 +-
 .../data/table/filter/FilteredAbstractColumn.java  |    8 ++-
 .../data/table/filter/FilteredPropertyColumn.java  |    8 ++-
 .../data/table/filter/IFilteredColumn.java         |    4 +-
 .../table/filter/TextFilteredPropertyColumn.java   |    6 +-
 .../html/repeater/tree/DefaultTableTree.java       |    6 +-
 .../markup/html/repeater/tree/TableTree.java       |   24 ++++---
 .../repeater/tree/table/AbstractTreeColumn.java    |   14 +++--
 .../html/repeater/tree/table/ITreeColumn.java      |    8 ++-
 .../html/repeater/tree/table/TreeColumn.java       |    6 +-
 .../markup/html/tree/table/AbstractColumn.java     |    1 +
 .../extensions/markup/html/tree/table/IColumn.java |    1 +
 .../html/repeater/data/table/DataTablePage.java    |   14 ++--
 .../html/repeater/data/table/DataTableTest.java    |    6 +-
 41 files changed, 256 insertions(+), 210 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
index abd9076..27c7a1c 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
@@ -116,7 +116,7 @@ public class BrowserPanel extends Panel
 	{
 		PageWindowProvider provider = new PageWindowProvider(sessionId);
 
-		List<IColumn<PageWindowDescription>> columns = new ArrayList<IColumn<PageWindowDescription>>();
+		List<IColumn<PageWindowDescription, String>> columns = new ArrayList<IColumn<PageWindowDescription, String>>();
 
 		PageWindowColumn pageIdColumn = new PageWindowColumn(Model.of("Id"), "id");
 		columns.add(pageIdColumn);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserTable.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserTable.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserTable.java
index 1ddd48b..264d88a 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserTable.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserTable.java
@@ -38,7 +38,7 @@ class BrowserTable extends DefaultDataTable<PageWindowDescription, String>
 	 * @param provider
 	 *            the provider of page descriptions
 	 */
-	public BrowserTable(String id, List<IColumn<PageWindowDescription>> columns,
+	public BrowserTable(String id, List<IColumn<PageWindowDescription, String>> columns,
 		PageWindowProvider provider)
 	{
 		super(id, columns, provider, 20);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java
index e99488e..ea21877 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java
@@ -29,7 +29,7 @@ import org.apache.wicket.serialize.ISerializer;
 /**
  * A column that shows the page attributes (id, name, size)
  */
-class PageWindowColumn extends PropertyColumn<PageWindowDescription>
+class PageWindowColumn extends PropertyColumn<PageWindowDescription, String>
 {
 	/**
 	 * Construct.

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/AjaxDataTablePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/AjaxDataTablePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/AjaxDataTablePage.java
index 3a1b3fc..7fc2c3f 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/AjaxDataTablePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/AjaxDataTablePage.java
@@ -39,9 +39,9 @@ public class AjaxDataTablePage extends BasePage
 	 */
 	public AjaxDataTablePage()
 	{
-		List<IColumn<Contact>> columns = new ArrayList<IColumn<Contact>>();
+		List<IColumn<Contact, String>> columns = new ArrayList<IColumn<Contact, String>>();
 
-		columns.add(new AbstractColumn<Contact>(new Model<String>("Actions"))
+		columns.add(new AbstractColumn<Contact, String>(new Model<String>("Actions"))
 		{
 			public void populateItem(Item<ICellPopulator<Contact>> cellItem, String componentId,
 				IModel<Contact> model)
@@ -50,13 +50,13 @@ public class AjaxDataTablePage extends BasePage
 			}
 		});
 
-		columns.add(new PropertyColumn<Contact>(new Model<String>("ID"), "id"));
-		columns.add(new PropertyColumn<Contact>(new Model<String>("First Name"), "firstName",
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("ID"), "id"));
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("First Name"), "firstName",
 			"firstName"));
-		columns.add(new PropertyColumn<Contact>(new Model<String>("Last Name"), "lastName",
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("Last Name"), "lastName",
 			"lastName"));
-		columns.add(new PropertyColumn<Contact>(new Model<String>("Home Phone"), "homePhone"));
-		columns.add(new PropertyColumn<Contact>(new Model<String>("Cell Phone"), "cellPhone"));
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("Home Phone"), "homePhone"));
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("Cell Phone"), "cellPhone"));
 
 		add(new AjaxFallbackDefaultDataTable<Contact, String>("table", columns,
 			new SortableContactDataProvider(), 8));

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
index 3b5009d..26a3ea9 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
@@ -43,9 +43,9 @@ public class DataTablePage extends BasePage
 	 */
 	public DataTablePage()
 	{
-		List<IColumn<?>> columns = new ArrayList<IColumn<?>>();
+		List<IColumn<Contact, String>> columns = new ArrayList<IColumn<Contact, String>>();
 
-		columns.add(new AbstractColumn<Contact>(new Model<String>("Actions"))
+		columns.add(new AbstractColumn<Contact, String>(new Model<String>("Actions"))
 		{
 			public void populateItem(Item<ICellPopulator<Contact>> cellItem, String componentId,
 				IModel<Contact> model)

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-examples/src/main/java/org/apache/wicket/examples/spring/common/web/ContactsDisplayPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/spring/common/web/ContactsDisplayPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/spring/common/web/ContactsDisplayPage.java
index cde2b3a..1a67f13 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/spring/common/web/ContactsDisplayPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/spring/common/web/ContactsDisplayPage.java
@@ -16,7 +16,8 @@
  */
 package org.apache.wicket.examples.spring.common.web;
 
-import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.wicket.examples.spring.common.Contact;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
@@ -38,13 +39,13 @@ public abstract class ContactsDisplayPage extends BasePage
 	 */
 	public ContactsDisplayPage()
 	{
-		IColumn<?>[] cols = new IColumn[4];
-		cols[0] = new PropertyColumn(new Model<String>("first name"), "firstName", "firstName");
-		cols[1] = new PropertyColumn(new Model<String>("last name"), "lastName", "lastName");
-		cols[2] = new PropertyColumn(new Model<String>("home phone"), "homePhone");
-		cols[3] = new PropertyColumn(new Model<String>("cell phone"), "cellPhone");
+		List<IColumn<Contact, String>> cols = new ArrayList<IColumn<Contact, String>>(4);
+		cols.add(new PropertyColumn<Contact, String>(new Model<String>("first name"), "firstName", "firstName"));
+		cols.add(new PropertyColumn<Contact, String>(new Model<String>("last name"), "lastName", "lastName"));
+		cols.add(new PropertyColumn<Contact, String>(new Model<String>("home phone"), "homePhone"));
+		cols.add(new PropertyColumn<Contact, String>(new Model<String>("cell phone"), "cellPhone"));
 
-		add(new DefaultDataTable("contacts", Arrays.asList(cols), getDataProvider(), 5));
+		add(new DefaultDataTable<Contact, String>("contacts", cols, getDataProvider(), 5));
 	}
 
 	protected abstract ContactDataProvider getDataProvider();

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-examples/src/main/java/org/apache/wicket/examples/tree/TableTreePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/TableTreePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/TableTreePage.java
index 52ff5d9..486d5aa 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/TableTreePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/TableTreePage.java
@@ -45,14 +45,14 @@ public class TableTreePage extends TreePage
 
 	private static final long serialVersionUID = 1L;
 
-	private TableTree<Foo> tree;
+	private TableTree<Foo, String> tree;
 
 	@Override
 	protected AbstractTree<Foo> createTree(FooProvider provider, IModel<Set<Foo>> state)
 	{
-		List<IColumn<Foo>> columns = createColumns();
+		List<IColumn<Foo, String>> columns = createColumns();
 
-		tree = new TableTree<Foo>("tree", columns, provider, Integer.MAX_VALUE, state)
+		tree = new TableTree<Foo, String>("tree", columns, provider, Integer.MAX_VALUE, state)
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -73,15 +73,15 @@ public class TableTreePage extends TreePage
 		return tree;
 	}
 
-	private List<IColumn<Foo>> createColumns()
+	private List<IColumn<Foo, String>> createColumns()
 	{
-		List<IColumn<Foo>> columns = new ArrayList<IColumn<Foo>>();
+		List<IColumn<Foo, String>> columns = new ArrayList<IColumn<Foo, String>>();
 
-		columns.add(new PropertyColumn<Foo>(Model.of("ID"), "id"));
+		columns.add(new PropertyColumn<Foo, String>(Model.of("ID"), "id"));
 
-		columns.add(new TreeColumn<Foo>(Model.of("Tree")));
+		columns.add(new TreeColumn<Foo, String>(Model.of("Tree")));
 
-		columns.add(new AbstractColumn<Foo>(Model.of("Depth"))
+		columns.add(new AbstractColumn<Foo, String>(Model.of("Depth"))
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -100,8 +100,8 @@ public class TableTreePage extends TreePage
 			}
 		});
 
-		columns.add(new PropertyColumn<Foo>(Model.of("Bar"), "bar"));
-		columns.add(new PropertyColumn<Foo>(Model.of("Baz"), "baz"));
+		columns.add(new PropertyColumn<Foo, String>(Model.of("Bar"), "bar"));
+		columns.add(new PropertyColumn<Foo, String>(Model.of("Baz"), "baz"));
 
 		return columns;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java
index a930ee3..f413084 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java
@@ -25,7 +25,9 @@ import org.apache.wicket.markup.html.border.Border;
 
 /**
  * Ajaxified version of {@link OrderByBorder}
- * 
+ *
+ * @param <S>
+ *            the type of the sort property
  * @see OrderByBorder
  * 
  * @since 1.2.1
@@ -33,7 +35,7 @@ import org.apache.wicket.markup.html.border.Border;
  * @author Igor Vaynberg (ivaynberg)
  * 
  */
-public abstract class AjaxFallbackOrderByBorder extends Border
+public abstract class AjaxFallbackOrderByBorder<S> extends Border
 {
 	private static final long serialVersionUID = 1L;
 
@@ -41,13 +43,13 @@ public abstract class AjaxFallbackOrderByBorder extends Border
 	 * Constructor
 	 * 
 	 * @param id
-	 * @param property
+	 * @param sortProperty
 	 * @param stateLocator
 	 */
-	public AjaxFallbackOrderByBorder(final String id, final String property,
-		final ISortStateLocator stateLocator)
+	public AjaxFallbackOrderByBorder(final String id, final S sortProperty,
+		final ISortStateLocator<S> stateLocator)
 	{
-		this(id, property, stateLocator, AjaxFallbackOrderByLink.DefaultCssProvider.getInstance(),
+		this(id, sortProperty, stateLocator, AjaxFallbackOrderByLink.DefaultCssProvider.getInstance(),
 			null);
 	}
 
@@ -56,14 +58,14 @@ public abstract class AjaxFallbackOrderByBorder extends Border
 	 * Constructor
 	 * 
 	 * @param id
-	 * @param property
+	 * @param sortProperty
 	 * @param stateLocator
 	 * @param cssProvider
 	 */
-	public AjaxFallbackOrderByBorder(final String id, final String property,
-		final ISortStateLocator stateLocator, final AjaxFallbackOrderByLink.ICssProvider cssProvider)
+	public AjaxFallbackOrderByBorder(final String id, final S sortProperty,
+		final ISortStateLocator<S> stateLocator, final AjaxFallbackOrderByLink.ICssProvider<String> cssProvider)
 	{
-		this(id, property, stateLocator, cssProvider, null);
+		this(id, sortProperty, stateLocator, cssProvider, null);
 	}
 
 
@@ -71,14 +73,14 @@ public abstract class AjaxFallbackOrderByBorder extends Border
 	 * Constructor
 	 * 
 	 * @param id
-	 * @param property
+	 * @param sortProperty
 	 * @param stateLocator
 	 * @param ajaxCallListener
 	 */
-	public AjaxFallbackOrderByBorder(final String id, final String property,
-		final ISortStateLocator stateLocator, final IAjaxCallListener ajaxCallListener)
+	public AjaxFallbackOrderByBorder(final String id, final S sortProperty,
+		final ISortStateLocator<S> stateLocator, final IAjaxCallListener ajaxCallListener)
 	{
-		this(id, property, stateLocator, AjaxFallbackOrderByLink.DefaultCssProvider.getInstance(),
+		this(id, sortProperty, stateLocator, AjaxFallbackOrderByLink.DefaultCssProvider.getInstance(),
 			ajaxCallListener);
 	}
 
@@ -87,17 +89,17 @@ public abstract class AjaxFallbackOrderByBorder extends Border
 	 * Constructor
 	 * 
 	 * @param id
-	 * @param property
+	 * @param sortProperty
 	 * @param stateLocator
 	 * @param cssProvider
 	 * @param ajaxCallListener
 	 */
-	public AjaxFallbackOrderByBorder(final String id, final String property,
-		final ISortStateLocator stateLocator,
-		final AjaxFallbackOrderByLink.ICssProvider cssProvider, final IAjaxCallListener ajaxCallListener)
+	public AjaxFallbackOrderByBorder(final String id, final S sortProperty,
+		final ISortStateLocator<S> stateLocator,
+		final AjaxFallbackOrderByLink.ICssProvider<String> cssProvider, final IAjaxCallListener ajaxCallListener)
 	{
 		super(id);
-		AjaxFallbackOrderByLink link = new AjaxFallbackOrderByLink("orderByLink", property,
+		AjaxFallbackOrderByLink<S> link = new AjaxFallbackOrderByLink<S>("orderByLink", sortProperty,
 			stateLocator, cssProvider, ajaxCallListener)
 		{
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java
index a45ba94..833d7f8 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java
@@ -29,7 +29,9 @@ import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink;
 
 /**
  * Ajaxified {@link OrderByLink}
- * 
+ *
+ * @param <S>
+ *            the type of the sort property
  * @see OrderByLink
  * 
  * @since 1.2.1
@@ -37,7 +39,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink;
  * @author Igor Vaynberg (ivaynberg)
  * 
  */
-public abstract class AjaxFallbackOrderByLink extends OrderByLink implements IAjaxLink
+public abstract class AjaxFallbackOrderByLink<S> extends OrderByLink<S> implements IAjaxLink
 {
 	/**
 	 * 
@@ -50,57 +52,57 @@ public abstract class AjaxFallbackOrderByLink extends OrderByLink implements IAj
 	 * Constructor
 	 * 
 	 * @param id
-	 * @param property
+	 * @param sortProperty
 	 * @param stateLocator
 	 * @param cssProvider
 	 */
-	public AjaxFallbackOrderByLink(final String id, final String property,
-		final ISortStateLocator stateLocator, final ICssProvider cssProvider)
+	public AjaxFallbackOrderByLink(final String id, final S sortProperty,
+		final ISortStateLocator<S> stateLocator, final ICssProvider<String> cssProvider)
 	{
-		this(id, property, stateLocator, cssProvider, null);
+		this(id, sortProperty, stateLocator, cssProvider, null);
 	}
 
 	/**
 	 * Constructor
 	 * 
 	 * @param id
-	 * @param property
+	 * @param sortProperty
 	 * @param stateLocator
 	 */
-	public AjaxFallbackOrderByLink(final String id, final String property,
-		final ISortStateLocator stateLocator)
+	public AjaxFallbackOrderByLink(final String id, final S sortProperty,
+		final ISortStateLocator<S> stateLocator)
 	{
-		this(id, property, stateLocator, DefaultCssProvider.getInstance(), null);
+		this(id, sortProperty, stateLocator, DefaultCssProvider.getInstance(), null);
 	}
 
 	/**
 	 * Constructor
 	 * 
 	 * @param id
-	 * @param property
+	 * @param sortProperty
 	 * @param stateLocator
 	 * @param ajaxCallListener
 	 */
-	public AjaxFallbackOrderByLink(final String id, final String property,
-		final ISortStateLocator stateLocator, final IAjaxCallListener ajaxCallListener)
+	public AjaxFallbackOrderByLink(final String id, final S sortProperty,
+		final ISortStateLocator<S> stateLocator, final IAjaxCallListener ajaxCallListener)
 	{
-		this(id, property, stateLocator, DefaultCssProvider.getInstance(), ajaxCallListener);
+		this(id, sortProperty, stateLocator, DefaultCssProvider.getInstance(), ajaxCallListener);
 	}
 
 	/**
 	 * Constructor
 	 * 
 	 * @param id
-	 * @param property
+	 * @param sortProperty
 	 * @param stateLocator
 	 * @param cssProvider
 	 * @param ajaxCallListener
 	 */
-	public AjaxFallbackOrderByLink(final String id, final String property,
-		final ISortStateLocator stateLocator, final ICssProvider cssProvider,
+	public AjaxFallbackOrderByLink(final String id, final S sortProperty,
+		final ISortStateLocator<S> stateLocator, final ICssProvider<String> cssProvider,
 		final IAjaxCallListener ajaxCallListener)
 	{
-		super(id, property, stateLocator, cssProvider);
+		super(id, sortProperty, stateLocator, cssProvider);
 
 		this.ajaxCallListener = ajaxCallListener;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java
index c572483..b4877b1 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackDefaultDataTable.java
@@ -49,7 +49,7 @@ import org.apache.wicket.model.IModel;
  *     the type of the sorting parameter
  * 
  */
-public class AjaxFallbackDefaultDataTable<T, S> extends DataTable<T>
+public class AjaxFallbackDefaultDataTable<T, S> extends DataTable<T, S>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -65,7 +65,7 @@ public class AjaxFallbackDefaultDataTable<T, S> extends DataTable<T>
 	 * @param rowsPerPage
 	 *            number of rows per page
 	 */
-	public AjaxFallbackDefaultDataTable(final String id, final List<IColumn<T>> columns,
+	public AjaxFallbackDefaultDataTable(final String id, final List<IColumn<T, S>> columns,
 		final ISortableDataProvider<T, S> dataProvider, final int rowsPerPage)
 	{
 		super(id, columns, dataProvider, rowsPerPage);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackHeadersToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackHeadersToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackHeadersToolbar.java
index 4795c1c..b02d553 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackHeadersToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxFallbackHeadersToolbar.java
@@ -27,13 +27,15 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 
 /**
  * Ajaxified {@link HeadersToolbar}
- * 
+ *
+ * @param <S>
+ *            the type of the sort property
  * @see HeadersToolbar
  * 
  * @author ivaynberg
  * 
  */
-public class AjaxFallbackHeadersToolbar extends HeadersToolbar
+public class AjaxFallbackHeadersToolbar<S> extends HeadersToolbar<S>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -43,7 +45,7 @@ public class AjaxFallbackHeadersToolbar extends HeadersToolbar
 	 * @param table
 	 * @param stateLocator
 	 */
-	public AjaxFallbackHeadersToolbar(final DataTable<?> table, final ISortStateLocator stateLocator)
+	public AjaxFallbackHeadersToolbar(final DataTable<?, S> table, final ISortStateLocator<S> stateLocator)
 	{
 		super(table, stateLocator);
 		table.setOutputMarkupId(true);
@@ -53,10 +55,10 @@ public class AjaxFallbackHeadersToolbar extends HeadersToolbar
 	 * {@inheritDoc}
 	 */
 	@Override
-	protected WebMarkupContainer newSortableHeader(final String borderId, final String property,
-		final ISortStateLocator locator)
+	protected WebMarkupContainer newSortableHeader(final String borderId, final S property,
+		final ISortStateLocator<S> locator)
 	{
-		return new AjaxFallbackOrderByBorder(borderId, property, locator, getAjaxCallListener())
+		return new AjaxFallbackOrderByBorder<S>(borderId, property, locator, getAjaxCallListener())
 		{
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.java
index 0690e7d..2928250 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.java
@@ -41,7 +41,7 @@ public class AjaxNavigationToolbar extends NavigationToolbar
 	 * @param table
 	 *            data table this toolbar will be attached to
 	 */
-	public AjaxNavigationToolbar(final DataTable<?> table)
+	public AjaxNavigationToolbar(final DataTable<?, ?> table)
 	{
 		super(table);
 	}
@@ -56,7 +56,7 @@ public class AjaxNavigationToolbar extends NavigationToolbar
 	 * @return paging navigator that will be used to navigate the data table
 	 */
 	@Override
-	protected PagingNavigator newPagingNavigator(final String navigatorId, final DataTable<?> table)
+	protected PagingNavigator newPagingNavigator(final String navigatorId, final DataTable<?, ?> table)
 	{
 		return new AjaxPagingNavigator(navigatorId, table)
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java
index 3f7b701..0bf868e 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/ISortState.java
@@ -22,11 +22,11 @@ import org.apache.wicket.util.io.IClusterable;
  * Interface used by OrderByLink to interact with any object that keeps track of sorting state
  * 
  * @author Igor Vaynberg (ivaynberg)
- * @param <T>
+ * @param <S>
  *            the type of the sort property
  * 
  */
-public interface ISortState<T> extends IClusterable
+public interface ISortState<S> extends IClusterable
 {
 	/**
 	 * Sets sort order of the property
@@ -36,7 +36,7 @@ public interface ISortState<T> extends IClusterable
 	 * @param order
 	 *            sort order
 	 */
-	public void setPropertySortOrder(T property, SortOrder order);
+	public void setPropertySortOrder(S property, SortOrder order);
 
 	/**
 	 * Gets the sort order of a property
@@ -45,6 +45,6 @@ public interface ISortState<T> extends IClusterable
 	 *            sort property to be checked
 	 * @return sort order
 	 */
-	public SortOrder getPropertySortOrder(T property);
+	public SortOrder getPropertySortOrder(S property);
 
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java
index 45953ae..5f645e5 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java
@@ -26,12 +26,13 @@ import org.apache.wicket.markup.html.border.Border;
  * For example:
  * 
  * &lt;th wicket:id="order-by-border"&gt;Heading&lt;/th&gt;
- * 
- * 
+ *
+ * @param <S>
+ *      the type of the sorting parameter
  * @author Igor Vaynberg ( ivaynberg )
  * 
  */
-public class OrderByBorder extends Border
+public class OrderByBorder<S> extends Border
 {
 	private static final long serialVersionUID = 1L;
 
@@ -49,8 +50,8 @@ public class OrderByBorder extends Border
 	 *            see
 	 *            {@link OrderByLink#OrderByLink(String, String, ISortStateLocator, org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink.ICssProvider) }
 	 */
-	public OrderByBorder(final String id, final String property,
-		final ISortStateLocator stateLocator, final OrderByLink.ICssProvider cssProvider)
+	public OrderByBorder(final String id, final S property,
+		final ISortStateLocator<S> stateLocator, final OrderByLink.ICssProvider<String> cssProvider)
 	{
 		super(id);
 
@@ -71,8 +72,8 @@ public class OrderByBorder extends Border
 	 *            sort state locator
 	 * @return link
 	 */
-	protected OrderByLink newOrderByLink(final String id, final String property,
-		final ISortStateLocator stateLocator)
+	protected OrderByLink newOrderByLink(final String id, final S property,
+		final ISortStateLocator<S> stateLocator)
 	{
 		return new OrderByLink(id, property, stateLocator,
 			OrderByLink.VoidCssProvider.getInstance())
@@ -103,8 +104,8 @@ public class OrderByBorder extends Border
 	 * @param stateLocator
 	 *            see {@link OrderByLink#OrderByLink(String, String, ISortStateLocator)}
 	 */
-	public OrderByBorder(final String id, final String property,
-		final ISortStateLocator stateLocator)
+	public OrderByBorder(final String id, final S property,
+		final ISortStateLocator<S> stateLocator)
 	{
 		this(id, property, stateLocator, OrderByLink.DefaultCssProvider.getInstance());
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java
index 26c0883..13e3a38 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByLink.java
@@ -27,36 +27,38 @@ import org.apache.wicket.util.string.Strings;
 /**
  * A component that represents a sort header. When the link is clicked it will toggle the state of a
  * sortable property within the sort state object.
- * 
+ *
+ * @param <S>
+ *      the type of the sorting parameter
  * @author Phil Kulak
  * @author Igor Vaynberg (ivaynberg)
  */
-public class OrderByLink extends Link<Void>
+public class OrderByLink<S> extends Link<Void>
 {
 	private static final long serialVersionUID = 1L;
 
 	/** sortable property */
-	private final String property;
+	private final S property;
 
 	/** locator for sort state object */
-	private final ISortStateLocator stateLocator;
+	private final ISortStateLocator<S> stateLocator;
 
 	/**
 	 * Constructor.
 	 * 
 	 * @param id
 	 *            the component id of the link
-	 * @param property
-	 *            the name of the sortable property this link represents. this value will be used as
+	 * @param sortProperty
+	 *            the name of the sortable sortProperty this link represents. this value will be used as
 	 *            parameter for sort state object methods. sort state object will be located via the
 	 *            stateLocator argument.
 	 * @param stateLocator
 	 *            locator used to locate sort state object that this will use to read/write state of
 	 *            sorted properties
 	 */
-	public OrderByLink(final String id, final String property, final ISortStateLocator stateLocator)
+	public OrderByLink(final String id, final S sortProperty, final ISortStateLocator<S> stateLocator)
 	{
-		this(id, property, stateLocator, DefaultCssProvider.getInstance());
+		this(id, sortProperty, stateLocator, DefaultCssProvider.getInstance());
 	}
 
 	/**
@@ -77,8 +79,8 @@ public class OrderByLink extends Link<Void>
 	 * @see OrderByLink.ICssProvider
 	 * 
 	 */
-	public OrderByLink(final String id, final String property,
-		final ISortStateLocator stateLocator, final ICssProvider<String> cssProvider)
+	public OrderByLink(final String id, final S property, final ISortStateLocator<S> stateLocator,
+		final ICssProvider<String> cssProvider)
 	{
 		super(id);
 
@@ -113,7 +115,7 @@ public class OrderByLink extends Link<Void>
 	 * 
 	 * @return this
 	 */
-	public final OrderByLink sort()
+	public final OrderByLink<S> sort()
 	{
 		if (isVersioned())
 		{
@@ -121,7 +123,7 @@ public class OrderByLink extends Link<Void>
 			addStateChange();
 		}
 
-		ISortState<String> state = stateLocator.getSortState();
+		ISortState<S> state = stateLocator.getSortState();
 
 		// get current sort order
 		SortOrder order = state.getPropertySortOrder(property);
@@ -158,11 +160,11 @@ public class OrderByLink extends Link<Void>
 	 * @author Igor Vaynberg ( ivaynberg )
 	 * 
 	 */
-	public static class CssModifier extends Behavior
+	public static class CssModifier<S> extends Behavior
 	{
 		private static final long serialVersionUID = 1L;
-		private final OrderByLink link;
-		private final ICssProvider<String> provider;
+		private final OrderByLink<S> link;
+		private final ICssProvider<S> provider;
 
 		/**
 		 * @param link
@@ -170,7 +172,7 @@ public class OrderByLink extends Link<Void>
 		 * @param provider
 		 *            implementation of ICssProvider
 		 */
-		public CssModifier(final OrderByLink link, final ICssProvider<String> provider)
+		public CssModifier(final OrderByLink<S> link, final ICssProvider<S> provider)
 		{
 			this.link = link;
 			this.provider = provider;
@@ -181,7 +183,7 @@ public class OrderByLink extends Link<Void>
 		{
 			super.onComponentTag(component, tag);
 
-			final ISortState<String> sortState = link.stateLocator.getSortState();
+			final ISortState<S> sortState = link.stateLocator.getSortState();
 			String cssClass = provider.getClassAttributeValue(sortState, link.property);
 			if (!Strings.isEmpty(cssClass))
 			{
@@ -197,20 +199,20 @@ public class OrderByLink extends Link<Void>
 	 * value is null class attribute will not be added
 	 * 
 	 * @author igor
-	 * @param <T>
+	 * @param <S>
 	 *            the type of the sort property
 	 */
-	public static interface ICssProvider<T> extends IClusterable
+	public static interface ICssProvider<S> extends IClusterable
 	{
 		/**
 		 * @param state
 		 *            current sort state
-		 * @param property
-		 *            sort property represented by the {@link OrderByLink}
-		 * @return the value of the "class" attribute for the given sort state/sort property
+		 * @param sortProperty
+		 *            sort sortProperty represented by the {@link OrderByLink}
+		 * @return the value of the "class" attribute for the given sort state/sort sortProperty
 		 *         combination
 		 */
-		public String getClassAttributeValue(ISortState<T> state, String property);
+		public String getClassAttributeValue(ISortState<S> state, S sortProperty);
 	}
 
 
@@ -246,12 +248,11 @@ public class OrderByLink extends Link<Void>
 		}
 
 		/**
-		 * @see org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink.ICssProvider#getClassAttributeValue(org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState,
-		 *      java.lang.String)
+		 * @see org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink.ICssProvider#getClassAttributeValue(ISortState, Object)
 		 */
-		public String getClassAttributeValue(final ISortState<String> state, final String property)
+		public String getClassAttributeValue(final ISortState<String> state, final String sortProperty)
 		{
-			SortOrder dir = state.getPropertySortOrder(property);
+			SortOrder dir = state.getPropertySortOrder(sortProperty);
 
 			if (dir == SortOrder.ASCENDING)
 			{

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractColumn.java
index 0ede247..6426769 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractColumn.java
@@ -25,12 +25,14 @@ import org.apache.wicket.model.IModel;
  * 
  * @author Igor Vaynberg ( ivaynberg )
  * @param <T>
+ * @param <S>
+ *            the type of the sort property
  */
-public abstract class AbstractColumn<T> implements IStyledColumn<T>
+public abstract class AbstractColumn<T, S> implements IStyledColumn<T, S>
 {
 	private static final long serialVersionUID = 1L;
 	private IModel<String> displayModel;
-	private String sortProperty;
+	private S sortProperty;
 
 	/**
 	 * @param displayModel
@@ -38,7 +40,7 @@ public abstract class AbstractColumn<T> implements IStyledColumn<T>
 	 * @param sortProperty
 	 *            sort property this column represents
 	 */
-	public AbstractColumn(final IModel<String> displayModel, final String sortProperty)
+	public AbstractColumn(final IModel<String> displayModel, final S sortProperty)
 	{
 		this.displayModel = displayModel;
 		this.sortProperty = sortProperty;
@@ -64,7 +66,7 @@ public abstract class AbstractColumn<T> implements IStyledColumn<T>
 	/**
 	 * @see org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn#getSortProperty()
 	 */
-	public String getSortProperty()
+	public S getSortProperty()
 	{
 		return sortProperty;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractToolbar.java
index a9d0a49..b3ca7cf 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/AbstractToolbar.java
@@ -33,7 +33,7 @@ public abstract class AbstractToolbar extends Panel
 
 	private static int counter = 0;
 
-	private final DataTable<?> table;
+	private final DataTable<?, ?> table;
 
 	/**
 	 * Constructor
@@ -43,7 +43,7 @@ public abstract class AbstractToolbar extends Panel
 	 * @param table
 	 *            data table this toolbar will be attached to
 	 */
-	public AbstractToolbar(final IModel<?> model, final DataTable<?> table)
+	public AbstractToolbar(final IModel<?> model, final DataTable<?, ?> table)
 	{
 		super("" + (counter++), model);
 		this.table = table;
@@ -55,7 +55,7 @@ public abstract class AbstractToolbar extends Panel
 	 * @param table
 	 *            data table this toolbar will be attached to
 	 */
-	public AbstractToolbar(final DataTable<?> table)
+	public AbstractToolbar(final DataTable<?, ?> table)
 	{
 		this(null, table);
 	}
@@ -63,7 +63,7 @@ public abstract class AbstractToolbar extends Panel
 	/**
 	 * @return DataTable this toolbar is attached to
 	 */
-	protected DataTable<?> getTable()
+	protected DataTable<?, ?> getTable()
 	{
 		return table;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
index 8843090..154eb99 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
@@ -73,9 +73,11 @@ import org.apache.wicket.util.visit.IVisitor;
  * 
  * @param <T>
  *            The model object type
+ * @param <S>
+ *      the type of the sorting parameter
  * 
  */
-public class DataTable<T> extends Panel implements IPageableItems
+public class DataTable<T, S> extends Panel implements IPageableItems
 {
 	static abstract class CssAttributeBehavior extends Behavior
 	{
@@ -103,7 +105,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 
 	private final WebMarkupContainer body;
 
-	private final List<IColumn<T>> columns;
+	private final List<IColumn<T, S>> columns;
 
 	private final ToolbarsContainer topToolbars;
 
@@ -123,7 +125,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 	 * @param rowsPerPage
 	 *            number of rows per page
 	 */
-	public DataTable(final String id, final List<IColumn<T>> columns,
+	public DataTable(final String id, final List<IColumn<T, S>> columns,
 		final IDataProvider<T> dataProvider, final long rowsPerPage)
 	{
 		super(id);
@@ -144,7 +146,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 			protected Item newCellItem(final String id, final int index, final IModel model)
 			{
 				Item item = DataTable.this.newCellItem(id, index, model);
-				final IColumn<T> column = DataTable.this.columns.get(index);
+				final IColumn<T, S> column = DataTable.this.columns.get(index);
 				if (column instanceof IStyledColumn)
 				{
 					item.add(new CssAttributeBehavior()
@@ -154,7 +156,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 						@Override
 						protected String getCssClass()
 						{
-							return ((IStyledColumn<?>)column).getCssClass();
+							return ((IStyledColumn<T, S>)column).getCssClass();
 						}
 					});
 				}
@@ -246,7 +248,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 	/**
 	 * @return array of column objects this table displays
 	 */
-	public final List<IColumn<T>> getColumns()
+	public final List<IColumn<T, S>> getColumns()
 	{
 		return columns;
 	}
@@ -284,7 +286,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 	}
 
 	/**
-	 * @see org.apache.wicket.markup.html.navigation.paging.IPageable#setCurrentPage(int)
+	 * @see org.apache.wicket.markup.html.navigation.paging.IPageable#setCurrentPage(long)
 	 */
 	public final void setCurrentPage(final long page)
 	{
@@ -303,7 +305,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 	 *            item reuse strategy
 	 * @return this for chaining
 	 */
-	public final DataTable<T> setItemReuseStrategy(final IItemReuseStrategy strategy)
+	public final DataTable<T, S> setItemReuseStrategy(final IItemReuseStrategy strategy)
 	{
 		datagrid.setItemReuseStrategy(strategy);
 		return this;
@@ -350,10 +352,10 @@ public class DataTable<T> extends Panel implements IPageableItems
 	 * 
 	 * @return DataItem created DataItem
 	 */
-	protected Item<IColumn<T>> newCellItem(final String id, final int index,
-		final IModel<IColumn<T>> model)
+	protected Item<IColumn<T, S>> newCellItem(final String id, final int index,
+		final IModel<IColumn<T, S>> model)
 	{
-		return new Item<IColumn<T>>(id, index, model);
+		return new Item<IColumn<T, S>>(id, index, model);
 	}
 
 	/**
@@ -383,7 +385,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 	{
 		super.onDetach();
 
-		for (IColumn<?> column : columns)
+		for (IColumn<T, S> column : columns)
 		{
 			column.detach();
 		}
@@ -485,7 +487,7 @@ public class DataTable<T> extends Panel implements IPageableItems
 		}
 
 		@Override
-		protected IModel<?> initModel()
+		protected IModel<String> initModel()
 		{
 			// don't try to find the model in the parent
 			return null;

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java
index 6f60000..5b185cf 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DefaultDataTable.java
@@ -41,7 +41,7 @@ import org.apache.wicket.model.IModel;
  * @param <S>
  *      the type of the sorting parameter
  */
-public class DefaultDataTable<T, S> extends DataTable<T>
+public class DefaultDataTable<T, S> extends DataTable<T, S>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -57,7 +57,7 @@ public class DefaultDataTable<T, S> extends DataTable<T>
 	 * @param rowsPerPage
 	 *            number of rows per page
 	 */
-	public DefaultDataTable(final String id, final List<IColumn<T>> columns,
+	public DefaultDataTable(final String id, final List<IColumn<T, S>> columns,
 		final ISortableDataProvider<T, S> dataProvider, final int rowsPerPage)
 	{
 		super(id, columns, dataProvider, rowsPerPage);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeaderlessColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeaderlessColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeaderlessColumn.java
index d239311..6790435 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeaderlessColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeaderlessColumn.java
@@ -24,8 +24,10 @@ import org.apache.wicket.model.Model;
  * 
  * @author Igor Vaynberg
  * @param <T>
+ * @param <S>
+ *            the type of the sort property
  */
-public abstract class HeaderlessColumn<T> extends AbstractColumn<T>
+public abstract class HeaderlessColumn<T, S> extends AbstractColumn<T, S>
 {
 	private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java
index 2602c4f..118df15 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java
@@ -29,13 +29,15 @@ import org.apache.wicket.markup.repeater.RepeatingView;
 /**
  * Toolbars that displays column headers. If the column is sortable a sortable header will be
  * displayed.
- * 
+ *
+ * @param <S>
+ *     the type of the sorting parameter
  * @see DefaultDataTable
  * 
  * @author Igor Vaynberg (ivaynberg)
  * 
  */
-public class HeadersToolbar extends AbstractToolbar
+public class HeadersToolbar<S> extends AbstractToolbar
 {
 	private static final long serialVersionUID = 1L;
 
@@ -49,15 +51,15 @@ public class HeadersToolbar extends AbstractToolbar
 	 * @param stateLocator
 	 *            locator for the ISortState implementation used by sortable headers
 	 */
-	public <T> HeadersToolbar(final DataTable<T> table, final ISortStateLocator stateLocator)
+	public <T> HeadersToolbar(final DataTable<T, S> table, final ISortStateLocator<S> stateLocator)
 	{
 		super(table);
 
 		RepeatingView headers = new RepeatingView("headers");
 		add(headers);
 
-		final List<IColumn<T>> columns = table.getColumns();
-		for (final IColumn<T> column : columns)
+		final List<IColumn<T, S>> columns = table.getColumns();
+		for (final IColumn<T, S> column : columns)
 		{
 			AbstractItem item = new AbstractItem(headers.newChildId());
 			headers.add(item);
@@ -81,7 +83,7 @@ public class HeadersToolbar extends AbstractToolbar
 					@Override
 					protected String getCssClass()
 					{
-						return ((IStyledColumn<?>)column).getCssClass();
+						return ((IStyledColumn<?, S>)column).getCssClass();
 					}
 				};
 
@@ -106,10 +108,10 @@ public class HeadersToolbar extends AbstractToolbar
 	 *            sort state locator
 	 * @return created header component
 	 */
-	protected WebMarkupContainer newSortableHeader(final String headerId, final String property,
-		final ISortStateLocator locator)
+	protected WebMarkupContainer newSortableHeader(final String headerId, final S property,
+		final ISortStateLocator<S> locator)
 	{
-		return new OrderByBorder(headerId, property, locator)
+		return new OrderByBorder<S>(headerId, property, locator)
 		{
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IColumn.java
index 62f1d3b..746012f 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IColumn.java
@@ -25,8 +25,10 @@ import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulato
  * 
  * @author Igor Vaynberg ( ivaynberg )
  * @param <T>
+ * @param <S>
+ *     the type of the sorting parameter
  */
-public interface IColumn<T> extends ICellPopulator<T>
+public interface IColumn<T, S> extends ICellPopulator<T>
 {
 	/**
 	 * Returns the component that will be used as the header for the column.
@@ -44,12 +46,12 @@ public interface IColumn<T> extends ICellPopulator<T>
 	 * Returns the name of the property that this header sorts. If null is returned the header will
 	 * be unsortable.
 	 * 
-	 * @return a string representing the sort property
+	 * @return the sort property
 	 */
-	String getSortProperty();
+	S getSortProperty();
 
 	/**
-	 * Returns true if this header should be a sortable header
+	 * Returns true if the header of the column should be sortable
 	 * 
 	 * @return true if header should be sortable
 	 */

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IStyledColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IStyledColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IStyledColumn.java
index df26b76..ed7c124 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IStyledColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/IStyledColumn.java
@@ -22,8 +22,10 @@ package org.apache.wicket.extensions.markup.html.repeater.data.table;
  * 
  * @author Matej Knopp
  * @param <T>
+ * @param <S>
+ *     the type of the sorting parameter
  */
-public interface IStyledColumn<T> extends IColumn<T>
+public interface IStyledColumn<T, S> extends IColumn<T, S>
 {
 	/**
 	 * Returns the css class for this column.

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
index 07d4a9d..6b0101d 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
@@ -37,7 +37,7 @@ public class NavigationToolbar extends AbstractToolbar
 	 * @param table
 	 *            data table this toolbar will be attached to
 	 */
-	public NavigationToolbar(final DataTable<?> table)
+	public NavigationToolbar(final DataTable<?, ?> table)
 	{
 		super(table);
 
@@ -58,7 +58,7 @@ public class NavigationToolbar extends AbstractToolbar
 	 *            dataview used by datatable
 	 * @return paging navigator that will be used to navigate the data table
 	 */
-	protected PagingNavigator newPagingNavigator(final String navigatorId, final DataTable<?> table)
+	protected PagingNavigator newPagingNavigator(final String navigatorId, final DataTable<?, ?> table)
 	{
 		return new PagingNavigator(navigatorId, table);
 	}
@@ -73,7 +73,7 @@ public class NavigationToolbar extends AbstractToolbar
 	 * @return navigator label that will be used to navigate the data table
 	 * 
 	 */
-	protected WebComponent newNavigatorLabel(final String navigatorId, final DataTable<?> table)
+	protected WebComponent newNavigatorLabel(final String navigatorId, final DataTable<?, ?> table)
 	{
 		return new NavigatorLabel(navigatorId, table);
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
index 8f76265..c9f0ec7 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
@@ -46,7 +46,7 @@ public class NoRecordsToolbar extends AbstractToolbar
 	 * @param table
 	 *            data table this toolbar will be attached to
 	 */
-	public NoRecordsToolbar(final DataTable<?> table)
+	public NoRecordsToolbar(final DataTable<?, ?> table)
 	{
 		this(table, DEFAULT_MESSAGE_MODEL);
 	}
@@ -57,7 +57,7 @@ public class NoRecordsToolbar extends AbstractToolbar
 	 * @param messageModel
 	 *            model that will be used to display the "no records found" message
 	 */
-	public NoRecordsToolbar(final DataTable<?> table, final IModel<String> messageModel)
+	public NoRecordsToolbar(final DataTable<?, ?> table, final IModel<String> messageModel)
 	{
 		super(table);
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/PropertyColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/PropertyColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/PropertyColumn.java
index a717941..c314f2a 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/PropertyColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/PropertyColumn.java
@@ -42,8 +42,10 @@ import org.apache.wicket.model.PropertyModel;
  * @author Igor Vaynberg ( ivaynberg )
  * @param <T>
  *            The Model object type
+ * @param <S>
+ *            the type of the sort property
  */
-public class PropertyColumn<T> extends AbstractColumn<T>
+public class PropertyColumn<T, S> extends AbstractColumn<T, S>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -59,7 +61,7 @@ public class PropertyColumn<T> extends AbstractColumn<T>
 	 * @param propertyExpression
 	 *            wicket property expression used by PropertyModel
 	 */
-	public PropertyColumn(final IModel<String> displayModel, final String sortProperty,
+	public PropertyColumn(final IModel<String> displayModel, final S sortProperty,
 		final String propertyExpression)
 	{
 		super(displayModel, sortProperty);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/ChoiceFilteredPropertyColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/ChoiceFilteredPropertyColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/ChoiceFilteredPropertyColumn.java
index 6c82fde..c2b31c1 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/ChoiceFilteredPropertyColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/ChoiceFilteredPropertyColumn.java
@@ -34,9 +34,10 @@ import org.apache.wicket.model.PropertyModel;
  *            The model object type
  * @param <Y>
  *            The column model object type
- * 
+ * @param <S>
+ *            the type of the sort property
  */
-public class ChoiceFilteredPropertyColumn<T, Y> extends FilteredPropertyColumn<T>
+public class ChoiceFilteredPropertyColumn<T, Y, S> extends FilteredPropertyColumn<T, S>
 {
 	private static final long serialVersionUID = 1L;
 	private final IModel<List<? extends Y>> filterChoices;
@@ -49,7 +50,7 @@ public class ChoiceFilteredPropertyColumn<T, Y> extends FilteredPropertyColumn<T
 	 *            collection choices used in the choice filter
 	 */
 	public ChoiceFilteredPropertyColumn(final IModel<String> displayModel,
-		final String sortProperty, final String propertyExpression,
+		final S sortProperty, final String propertyExpression,
 		final IModel<List<? extends Y>> filterChoices)
 	{
 		super(displayModel, sortProperty, propertyExpression);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
index ed30b32..e7bada4 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
@@ -50,7 +50,7 @@ public class FilterToolbar extends AbstractToolbar
 	 *            type of filter state object
 	 * 
 	 */
-	public <T> FilterToolbar(final DataTable<T> table, final FilterForm<T> form,
+	public <T, S> FilterToolbar(final DataTable<T, S> table, final FilterForm<T> form,
 		final IFilterStateLocator<T> stateLocator)
 	{
 		super(table);
@@ -70,8 +70,8 @@ public class FilterToolbar extends AbstractToolbar
 		filters.setRenderBodyOnly(true);
 		add(filters);
 
-		List<IColumn<T>> cols = table.getColumns();
-		for (IColumn<T> col : cols)
+		List<IColumn<T, S>> cols = table.getColumns();
+		for (IColumn<T, S> col : cols)
 		{
 			WebMarkupContainer item = new WebMarkupContainer(filters.newChildId());
 			item.setRenderBodyOnly(true);
@@ -80,7 +80,7 @@ public class FilterToolbar extends AbstractToolbar
 
 			if (col instanceof IFilteredColumn)
 			{
-				IFilteredColumn<?> filteredCol = (IFilteredColumn<?>)col;
+				IFilteredColumn<T, S> filteredCol = (IFilteredColumn<T, S>)col;
 				filter = filteredCol.getFilter(FILTER_ID, form);
 			}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredAbstractColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredAbstractColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredAbstractColumn.java
index bfe5c48..a405407 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredAbstractColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredAbstractColumn.java
@@ -25,11 +25,13 @@ import org.apache.wicket.model.IModel;
  * 
  * @author Igor Vaynberg (ivaynberg)
  * @param <T>
+ * @param <S>
+ *            the type of the sort property
  * 
  */
-public abstract class FilteredAbstractColumn<T> extends AbstractColumn<T>
+public abstract class FilteredAbstractColumn<T, S> extends AbstractColumn<T, S>
 	implements
-		IFilteredColumn<T>
+		IFilteredColumn<T, S>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -42,7 +44,7 @@ public abstract class FilteredAbstractColumn<T> extends AbstractColumn<T>
 	 * @param sortProperty
 	 *            sort property this column represents
 	 */
-	public FilteredAbstractColumn(final IModel<String> displayModel, final String sortProperty)
+	public FilteredAbstractColumn(final IModel<String> displayModel, final S sortProperty)
 	{
 		super(displayModel, sortProperty);
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredPropertyColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredPropertyColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredPropertyColumn.java
index 7029b37..27bf28b 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredPropertyColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilteredPropertyColumn.java
@@ -29,11 +29,13 @@ import org.apache.wicket.model.PropertyModel;
  * 
  * @author Igor Vaynberg (ivaynberg)
  * @param <T>
+ * @param <S>
+ *            the type of the sort property
  * 
  */
-public abstract class FilteredPropertyColumn<T> extends PropertyColumn<T>
+public abstract class FilteredPropertyColumn<T, S> extends PropertyColumn<T, S>
 	implements
-		IFilteredColumn<T>
+		IFilteredColumn<T, S>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -47,7 +49,7 @@ public abstract class FilteredPropertyColumn<T> extends PropertyColumn<T>
 	 * @param propertyExpression
 	 *            wicket property expression for the column, see {@link PropertyModel} for details
 	 */
-	public FilteredPropertyColumn(final IModel<String> displayModel, final String sortProperty,
+	public FilteredPropertyColumn(final IModel<String> displayModel, final S sortProperty,
 		final String propertyExpression)
 	{
 		super(displayModel, sortProperty, propertyExpression);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/IFilteredColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/IFilteredColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/IFilteredColumn.java
index 16f5619..4f5af51 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/IFilteredColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/IFilteredColumn.java
@@ -28,9 +28,11 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
  * 
  * @author Igor Vaynberg (ivaynberg)
  * @param <T>
+ * @param <S>
+ *     the type of the sorting parameter
  * 
  */
-public interface IFilteredColumn<T> extends IColumn<T>
+public interface IFilteredColumn<T, S> extends IColumn<T, S>
 {
 	/**
 	 * Returns the component used by user to filter the column. If null is returned, no filter will

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/TextFilteredPropertyColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/TextFilteredPropertyColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/TextFilteredPropertyColumn.java
index 1d97442..1887f35 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/TextFilteredPropertyColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/TextFilteredPropertyColumn.java
@@ -31,9 +31,11 @@ import org.apache.wicket.model.PropertyModel;
  *            The column's model object type
  * @param <F>
  *            Filter's model object type
+ * @param <S>
+ *            the type of the sort property
  * 
  */
-public class TextFilteredPropertyColumn<T, F> extends FilteredPropertyColumn<T>
+public class TextFilteredPropertyColumn<T, F, S> extends FilteredPropertyColumn<T, S>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -42,7 +44,7 @@ public class TextFilteredPropertyColumn<T, F> extends FilteredPropertyColumn<T>
 	 * @param sortProperty
 	 * @param propertyExpression
 	 */
-	public TextFilteredPropertyColumn(final IModel<String> displayModel, final String sortProperty,
+	public TextFilteredPropertyColumn(final IModel<String> displayModel, final S sortProperty,
 		final String propertyExpression)
 	{
 		super(displayModel, sortProperty, propertyExpression);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/DefaultTableTree.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/DefaultTableTree.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/DefaultTableTree.java
index 42299b1..151cbbd 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/DefaultTableTree.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/DefaultTableTree.java
@@ -41,7 +41,7 @@ import org.apache.wicket.model.IModel;
  *     the type of the sorting parameter
  * @author svenmeier
  */
-public class DefaultTableTree<T, S> extends TableTree<T>
+public class DefaultTableTree<T, S> extends TableTree<T, S>
 {
 
 	private static final long serialVersionUID = 1L;
@@ -58,7 +58,7 @@ public class DefaultTableTree<T, S> extends TableTree<T>
 	 * @param rowsPerPage
 	 *            rows to show on each page
 	 */
-	public DefaultTableTree(String id, List<IColumn<T>> columns, ISortableTreeProvider<T, S> provider,
+	public DefaultTableTree(String id, List<IColumn<T, S>> columns, ISortableTreeProvider<T, S> provider,
 		int rowsPerPage)
 	{
 		this(id, columns, provider, rowsPerPage, null);
@@ -78,7 +78,7 @@ public class DefaultTableTree<T, S> extends TableTree<T>
 	 * @param state
 	 *            expansion state
 	 */
-	public DefaultTableTree(String id, List<IColumn<T>> columns, ISortableTreeProvider<T, S> provider,
+	public DefaultTableTree(String id, List<IColumn<T, S>> columns, ISortableTreeProvider<T, S> provider,
 		int rowsPerPage, IModel<Set<T>> state)
 	{
 		super(id, columns, provider, rowsPerPage, state);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java
index d37630e..8d7a87e 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java
@@ -42,12 +42,14 @@ import org.apache.wicket.util.visit.IVisitor;
  * 
  * @param <T>
  *            The model object type
+ * @param <S>
+ *            the type of the sort property
  */
-public abstract class TableTree<T> extends AbstractTree<T>
+public abstract class TableTree<T, S> extends AbstractTree<T>
 {
 	private static final long serialVersionUID = 1L;
 
-	private final DataTable<T> table;
+	private final DataTable<T, S> table;
 
 	/**
 	 * Constructor
@@ -61,7 +63,7 @@ public abstract class TableTree<T> extends AbstractTree<T>
 	 * @param rowsPerPage
 	 *            number of rows per page
 	 */
-	public TableTree(final String id, final List<IColumn<T>> columns,
+	public TableTree(final String id, final List<IColumn<T, S>> columns,
 		final ITreeProvider<T> dataProvider, final long rowsPerPage)
 	{
 		this(id, columns, dataProvider, rowsPerPage, null);
@@ -81,17 +83,17 @@ public abstract class TableTree<T> extends AbstractTree<T>
 	 * @param state
 	 *            the expansion state
 	 */
-	public TableTree(final String id, final List<IColumn<T>> columns,
+	public TableTree(final String id, final List<IColumn<T, S>> columns,
 		final ITreeProvider<T> provider, final long rowsPerPage, IModel<Set<T>> state)
 	{
 		super(id, provider, state);
 
 		Args.notEmpty(columns, "columns");
-		for (IColumn<T> column : columns)
+		for (IColumn<T, S> column : columns)
 		{
-			if (column instanceof ITreeColumn<?>)
+			if (column instanceof ITreeColumn<?, ?>)
 			{
-				((ITreeColumn<T>)column).setTree(this);
+				((ITreeColumn<T, S>)column).setTree(this);
 			}
 		}
 
@@ -108,10 +110,10 @@ public abstract class TableTree<T> extends AbstractTree<T>
 	 * @param rowsPerPage
 	 * @return nested data table
 	 */
-	protected DataTable<T> newDataTable(String id, List<IColumn<T>> columns,
+	protected DataTable<T, S> newDataTable(String id, List<IColumn<T, S>> columns,
 		IDataProvider<T> dataProvider, long rowsPerPage)
 	{
-		return new DataTable<T>(id, columns, dataProvider, rowsPerPage)
+		return new DataTable<T, S>(id, columns, dataProvider, rowsPerPage)
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -133,7 +135,7 @@ public abstract class TableTree<T> extends AbstractTree<T>
 	 * 
 	 * @return the nested table
 	 */
-	public DataTable<T> getTable()
+	public DataTable<T, S> getTable()
 	{
 		return table;
 	}
@@ -149,7 +151,7 @@ public abstract class TableTree<T> extends AbstractTree<T>
 	 * @return this for chaining
 	 */
 	@Override
-	public final TableTree<T> setItemReuseStrategy(final IItemReuseStrategy strategy)
+	public final TableTree<T, S> setItemReuseStrategy(final IItemReuseStrategy strategy)
 	{
 		table.setItemReuseStrategy(strategy);
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/AbstractTreeColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/AbstractTreeColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/AbstractTreeColumn.java
index fd1fa8b..87b6fdc 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/AbstractTreeColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/AbstractTreeColumn.java
@@ -21,29 +21,33 @@ import org.apache.wicket.extensions.markup.html.repeater.tree.TableTree;
 import org.apache.wicket.model.IModel;
 
 /**
+ * @param <T>
+ *            the type of the model object
+ * @param <S>
+ *            the type of the sort property
  * @author svenmeier
  */
-public abstract class AbstractTreeColumn<T> extends AbstractColumn<T> implements ITreeColumn<T>
+public abstract class AbstractTreeColumn<T, S> extends AbstractColumn<T, S> implements ITreeColumn<T, S>
 {
 
-	private TableTree<T> tree;
+	private TableTree<T, S> tree;
 
 	public AbstractTreeColumn(IModel<String> displayModel)
 	{
 		super(displayModel);
 	}
 
-	public AbstractTreeColumn(IModel<String> displayModel, String sortProperty)
+	public AbstractTreeColumn(IModel<String> displayModel, S sortProperty)
 	{
 		super(displayModel, sortProperty);
 	}
 
-	public void setTree(TableTree<T> tree)
+	public void setTree(TableTree<T, S> tree)
 	{
 		this.tree = tree;
 	}
 
-	public TableTree<T> getTree()
+	public TableTree<T, S> getTree()
 	{
 		return tree;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/ITreeColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/ITreeColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/ITreeColumn.java
index 856c93c..0f351d8 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/ITreeColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/ITreeColumn.java
@@ -20,9 +20,13 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.tree.TableTree;
 
 /**
+ * @param <T>
+ *     the type of the model object
+ * @param <S>
+ *     the type of the sorting parameter
  * @author svenmeier
  */
-public interface ITreeColumn<T> extends IColumn<T>
+public interface ITreeColumn<T, S> extends IColumn<T, S>
 {
-	public void setTree(TableTree<T> t);
+	public void setTree(TableTree<T, S> t);
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/TreeColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/TreeColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/TreeColumn.java
index 54cf5fa..83f16a8 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/TreeColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/table/TreeColumn.java
@@ -27,8 +27,10 @@ import org.apache.wicket.model.IModel;
  * @author svenmeier
  * @param <T>
  *            node type
+ * @param <S>
+ *            the type of the sort property
  */
-public class TreeColumn<T> extends AbstractTreeColumn<T>
+public class TreeColumn<T, S> extends AbstractTreeColumn<T, S>
 {
 
 	private static final long serialVersionUID = 1L;
@@ -52,7 +54,7 @@ public class TreeColumn<T> extends AbstractTreeColumn<T>
 	 * @param sortProperty
 	 *            sort property
 	 */
-	public TreeColumn(IModel<String> displayModel, String sortProperty)
+	public TreeColumn(IModel<String> displayModel, S sortProperty)
 	{
 		super(displayModel, sortProperty);
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractColumn.java
index 7f1b1be..8362d12 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractColumn.java
@@ -28,6 +28,7 @@ import org.apache.wicket.markup.html.basic.Label;
  * 
  * @author Matej Knopp
  */
+@Deprecated
 public abstract class AbstractColumn implements IColumn
 {
 	private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/IColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/IColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/IColumn.java
index 8d617b2..5650ddb 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/IColumn.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/IColumn.java
@@ -28,6 +28,7 @@ import org.apache.wicket.util.io.IClusterable;
  * 
  * @author Matej Knopp
  */
+@Deprecated
 public interface IColumn extends IClusterable
 {
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java
index 09bf3d0..3e56a23 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTablePage.java
@@ -43,9 +43,9 @@ public class DataTablePage extends WebPage
 	 */
 	public DataTablePage()
 	{
-		List<IColumn<?>> columns = new ArrayList<IColumn<?>>();
+		List<IColumn<Contact, String>> columns = new ArrayList<IColumn<Contact, String>>();
 
-		columns.add(new AbstractColumn<Contact>(new Model<String>("Actions"))
+		columns.add(new AbstractColumn<Contact, String>(new Model<String>("Actions"))
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -56,7 +56,7 @@ public class DataTablePage extends WebPage
 			}
 		});
 
-		columns.add(new PropertyColumn<String>(new Model<String>("ID"), "id")
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("ID"), "id")
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -67,10 +67,10 @@ public class DataTablePage extends WebPage
 			}
 		});
 
-		columns.add(new PropertyColumn<String>(new Model<String>("First Name"), "firstName",
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("First Name"), "firstName",
 			"firstName"));
 
-		columns.add(new PropertyColumn<String>(new Model<String>("Last Name"), "lastName",
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("Last Name"), "lastName",
 			"lastName")
 		{
 			private static final long serialVersionUID = 1L;
@@ -82,8 +82,8 @@ public class DataTablePage extends WebPage
 			}
 		});
 
-		columns.add(new PropertyColumn<String>(new Model<String>("Home Phone"), "homePhone"));
-		columns.add(new PropertyColumn<String>(new Model<String>("Cell Phone"), "cellPhone"));
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("Home Phone"), "homePhone"));
+		columns.add(new PropertyColumn<Contact, String>(new Model<String>("Cell Phone"), "cellPhone"));
 
 		@SuppressWarnings({ "rawtypes", "unchecked" })
 		DefaultDataTable defaultDataTable = new DefaultDataTable("table", columns,

http://git-wip-us.apache.org/repos/asf/wicket/blob/8441fdd6/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java
index dd5e591..2bb8bb5 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTableTest.java
@@ -205,10 +205,10 @@ public class DataTableTest extends Assert
 				}
 			};
 
-			List<IColumn<Number>> columns = new ArrayList<IColumn<Number>>();
-			columns.add(new PropertyColumn<Number>(Model.of("value"), "value"));
+			List<IColumn<Number, String>> columns = new ArrayList<IColumn<Number, String>>();
+			columns.add(new PropertyColumn<Number, String>(Model.of("value"), "value"));
 
-			DataTable<Number> table = new DataTable<Number>("table", columns, provider, 10);
+			DataTable<Number, String> table = new DataTable<Number, String>("table", columns, provider, 10);
 			table.addBottomToolbar(new NoRecordsToolbar(table));
 			table.addTopToolbar(new NoRecordsToolbar(table));
 			add(table);