Layering allows standards to be developed, but also to be adapted to new hardware and software over time. For example, different software packages (applications) may use the same transport, network and link layers but have their own application layer. The way the program encodes the message changes - the rest of communication method remains the same.