really working this time, with Option[Double] for cached eval