re-structure everything