this should be typehinted IMO