Two algorithms to construct a product machine from two finite-state machines are presented and analyzed. The first algorithm is simple and correctly produces a product machine, but the product machine may include unreachable states and associated transitions. The second algorithm produces a functionally correct product machine that has no unreachable states.