added two implementations