finished most of the simple (bare) implementation