Better data() method which caches fields