initial implementation
sans tests so it is probably BROKEN