diff --git a/activemq-core/src/main/java/org/apache/activemq/kaha/impl/IndexLinkedList.java b/activemq-core/src/main/java/org/apache/activemq/kaha/impl/IndexLinkedList.java
new file mode 100644
index 0000000000..c8f6915b3c
--- /dev/null
+++ b/activemq-core/src/main/java/org/apache/activemq/kaha/impl/IndexLinkedList.java
@@ -0,0 +1,154 @@
+package org.apache.activemq.kaha.impl;
+
+interface IndexLinkedList{
+
+ /**
+ * @return the root used by the List
+ */
+ public IndexItem getRoot();
+
+ /**
+ * Returns the first element in this list.
+ *
+ * @return the first element in this list.
+ */
+ public IndexItem getFirst();
+
+ /**
+ * Returns the last element in this list.
+ *
+ * @return the last element in this list.
+ */
+ public IndexItem getLast();
+
+ /**
+ * Removes and returns the first element from this list.
+ *
+ * @return the first element from this list.
+ */
+ public IndexItem removeFirst();
+
+ /**
+ * Removes and returns the last element from this list.
+ *
+ * @return the last element from this list.
+ */
+ public Object removeLast();
+
+ /**
+ * Inserts the given element at the beginning of this list.
+ *
+ * @param o the element to be inserted at the beginning of this list.
+ */
+ public void addFirst(IndexItem item);
+
+ /**
+ * Appends the given element to the end of this list. (Identical in function to the add method; included
+ * only for consistency.)
+ *
+ * @param o the element to be inserted at the end of this list.
+ */
+ public void addLast(IndexItem item);
+
+ /**
+ * Returns the number of elements in this list.
+ *
+ * @return the number of elements in this list.
+ */
+ public int size();
+
+ /**
+ * is the list empty?
+ *
+ * @return true if there are no elements in the list
+ */
+ public boolean isEmpty();
+
+ /**
+ * Appends the specified element to the end of this list.
+ *
+ * @param o element to be appended to this list.
+ * @return true (as per the general contract of Collection.add).
+ */
+ public boolean add(IndexItem item);
+
+ /**
+ * Removes all of the elements from this list.
+ */
+ public void clear();
+
+ // Positional Access Operations
+ /**
+ * Returns the element at the specified position in this list.
+ *
+ * @param index index of element to return.
+ * @return the element at the specified position in this list.
+ *
+ * @throws IndexOutOfBoundsException if the specified index is is out of range (index < 0 || index >= size()).
+ */
+ public IndexItem get(int index);
+
+ /**
+ * Inserts the specified element at the specified position in this list. Shifts the element currently at that
+ * position (if any) and any subsequent elements to the right (adds one to their indices).
+ *
+ * @param index index at which the specified element is to be inserted.
+ * @param element element to be inserted.
+ *
+ * @throws IndexOutOfBoundsException if the specified index is out of range (index < 0 || index > size()).
+ */
+ public void add(int index,IndexItem element);
+
+ /**
+ * Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts
+ * one from their indices). Returns the element that was removed from the list.
+ *
+ * @param index the index of the element to removed.
+ * @return the element previously at the specified position.
+ *
+ * @throws IndexOutOfBoundsException if the specified index is out of range (index < 0 || index >= size()).
+ */
+ public Object remove(int index);
+
+ // Search Operations
+ /**
+ * Returns the index in this list of the first occurrence of the specified element, or -1 if the List does not
+ * contain this element. More formally, returns the lowest index i such that
+ * (o==null ? get(i)==null : o.equals(get(i))), or -1 if there is no such index.
+ *
+ * @param o element to search for.
+ * @return the index in this list of the first occurrence of the specified element, or -1 if the list does not
+ * contain this element.
+ */
+ public int indexOf(IndexItem o);
+
+ /**
+ * Retrieve the next entry after this entry
+ *
+ * @param entry
+ * @return next entry
+ */
+ public IndexItem getNextEntry(IndexItem entry);
+
+ /**
+ * Retrive the prev entry after this entry
+ *
+ * @param entry
+ * @return prev entry
+ */
+ public IndexItem getPrevEntry(IndexItem entry);
+
+
+ /**
+ * remove an entry
+ * @param e
+ */
+ public void remove(IndexItem e);
+
+ /**
+ * Ensure we have the up to date entry
+ * @param current
+ * @return the entry
+ */
+ public IndexItem getEntry(IndexItem current);
+}
\ No newline at end of file