improve it so that it can be compile in LINUX