add func impl