This interface + struct approach doesn't seem to match how things are done elsewhere. Is there a good reason for interface, or should it just be struct with ptr like elsewhere?