Implementation

throwing is still evil