Debugging a faulty program can be very hard and time-consuming. The programmer usually reexecutes his program, while zooming in on the root cause of the bug. However,sometimes bugs seem to appear only intermittently, making iteven harder for the programmer to solve them. The main reasonfor this is that when executing a program, there are numerousnon-deterministic events taking place within the computer, whichcan wreck even a very carefully crafted debugging session. To dealwith these ghostly bugs, one needs to remove the non-determinismfrom the execution and its environment. Therefore various socalledexecution replay systems have been devised, each with their merits and limitations. We give an overview of the terminology used when discussing execution replay, of the causes of nondeterminism within a computer, and of the current state of the art in execution replay systems.