implementing operations