separate content from presentation, refactor