changed to a guava based implementation