implement prototype