Factor out common functionality; add timezone