used linkhashmap to keep the order of insertion