updated using guava