Computers usually contain crystal-based clocks. These clocks are often subject to clock drift, when their time becomes gradually more and more inaccurate. This provides problems for the designers of distributed systems where transactions can be made up of individual accesses to servers which have to occur in a certain temporal order. There are a number of solutions to this problem. They include algorithms which make allowances for known drift and protocols for keeping clocks in step with each other. See, for example, the Network Time Protocol.