most basic features working. Ripe for a refactor!