More general prototype.