Base implementation

I'd prefer a fat constructor tbh