optimised nim function