fuller implementation