Massive refactor

Moving design towards simpler api