You should use interfaces as much as possible

This allows you to change the internal representation of data without interfaces
requiring changes. Unfortunately it seems that the XML annotation you use might
not take kindly to processing Lists instead of ArrayLists.. Perhaps it would be
worth to investigate it though.
Refactored to while-loops into for-loops.

This means that the iterators requried for the loops can be initialized inside
the loop and thus are scoped only inside the loop. Reducing the scopes of your
variables to just the place where they are needed, reduces the complexity and
increases the readability outside the loop.
Throw new Error() should always be avoided
Singletons should use private constructors