final version of template specilization