implemented prototype