Total rewrite with all but searching implemented. Breaking changes