added primitive functions