No one has said WHY it is so important to order the declarations just so. I don't see why it has anything to do with the outcome - does the memory assign memory locations in the order they come in? I tried a couple different orders of declarations and got the same result each time ( which is correct ), but I only verified when I put them in the order l, l3, l2, l1. And the error message was 'Make sure the numbers divisible by 3 & 2 are on both lists.' It works correctly no matter what order the lists are declared. I have traced thru the answer by hand 4 times and it comes out correctly! Here is my code for the 'sorting'. for (int i = 0; i < 20; i++) { if ((l.get(i) % 3 == 0) || (l.get(i) % 2 == 0)) { if (l.get(i) % 3 == 0) l3.add(l.get(i)); if (l.get(i) % 2 == 0) l2.add(l.get(i)); }else{ l1.add(l.get(i)); } } Please let me know what I'm missing. Thanks