~rough refactoring