Finalize initial design. Still work left to polish