An efficient and purely combinatorial algorithm for calculating products in arbitrary Coxeter groups is presented, which combines ideas of Fokko du Cloux and myself. Proofs are largely based on geometry. The algorithm has been implemented in practical Java programs, and runs surprisingly quickly. It seems to be good enough in many interesting cases to build the minimal root reflection table of Brink and Howlett, which can be used for a more efficient multiplication routine. MR subject classifications: 20H15, 20-04