projection implementation