immutable map should be private to easier remove dependency on guava