refactor to prepare for responsiveness