implemention prototype