pulling out reusable parts of SW