implementation prototype