why the lazy initialization?  Probably makes sense to move the HashMap and HashSet initialization into the field declaration