Output I'm getting: I'm boss, an alley cat I'm a nice kitten named Missy I'm a nice kitten named Smudgey I'm pirate, an alley cat My method (I'll post it since it won't pass with this!): BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); String catIn = null; while ((catIn = r.readLine())!=null){ Cat cat = CatFactory.getCatByKey(catIn.toLowerCase()); System.out.println(cat); } r.close(); //write your code here } It does pass the fourth condition if I leave out the "toLowerCase()" in the method call (then they are all alley cats), but still failing conditions 2 & 3. It passes when I copied Guadaloupe Gagnon's code from AU Ivan's query, even though it gives exceptions, and only uses Cat class and none of it's child classes (which seems a bit pointless). I'm very new to this whole coding craic, but I think there's a bit of a glitch here. I'll flag it up anyway. If you read this, thanks for all the help you give everyone GG, mighty man!