diff --git a/gazelle-proxy-common-war/src/main/webapp/messageList.xhtml b/gazelle-proxy-common-war/src/main/webapp/messageList.xhtml
index 762a30a0bcd9909051ca6a3c276e20587cecf462..b07ad6c108e589f250fb0f8b3dd3e9b6c405111b 100644
--- a/gazelle-proxy-common-war/src/main/webapp/messageList.xhtml
+++ b/gazelle-proxy-common-war/src/main/webapp/messageList.xhtml
@@ -27,7 +27,8 @@
 				value="#{message.connection.id}" />
 		</rich:column>
 
-		<rich:column>
+		<rich:column sortBy="#{'indexInt'}"
+			sortOrder="#{dataTableStateHolder.sortOrders['indexInt']}">
 			<f:facet name="header">
 				<h:outputText value="#{messages['net.ihe.gazelle.proxy.Index']}" />
 			</f:facet>
diff --git a/gazelle-proxy-ear/src/main/sql/3.1.1-Update_index_to_int.sql b/gazelle-proxy-ear/src/main/sql/3.1.1-Update_index_to_int.sql
new file mode 100644
index 0000000000000000000000000000000000000000..8e644a185bcd9467b7911e6c138d48069b723eac
--- /dev/null
+++ b/gazelle-proxy-ear/src/main/sql/3.1.1-Update_index_to_int.sql
@@ -0,0 +1,2 @@
+UPDATE pxy_abstract_message SET index_int= CAST(index AS integer) where index != '?';
+
diff --git a/gazelle-proxy-jar/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java b/gazelle-proxy-jar/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java
index 3a5220378c14778baf90ab8125763c0b4d6ab352..db7196beae0d0872a3ac22a21a629bcfa64bcf8a 100644
--- a/gazelle-proxy-jar/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java
+++ b/gazelle-proxy-jar/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java
@@ -100,16 +100,28 @@ public abstract class AbstractMessage implements Comparable<AbstractMessage>, Se
 
 	@Column(name = "result_oid")
 	private ArrayList<String> resultOid = new ArrayList<String>();
-	
+
 	@Column(name = "index")
 	private String index;
 
+	@Column(name = "index_int")
+	private int indexInt;
+
+	public int getIndexInt() {
+		return indexInt;
+	}
+
+	public void setIndexInt(int index_int) {
+		this.indexInt = index_int;
+	}
+
 	public String getIndex() {
 		return index;
 	}
 
 	public void setIndex(String index) {
 		this.index = index;
+		setIndexInt(Integer.parseInt(index));
 	}
 
 	public ArrayList<String> getResultOid() {