adding alternate implementations