Updated with Version 2 not using the ArrayLists