It's a bit nit picky but all variable declarations should use the most generic type possible. e.g. HashMap<...> created should be Map<...> created. Same goes for LinkedList below and anywhere this might happen.

Also, use Guava's Maps.newHashMap() for this. Same goes for Lists.newArrayList() below and anywhere this might happen.