machine independent solution