final version on avoid multible defination