The document describes a shifting bottleneck procedure for solving job shop scheduling problems with setup times, deadlines, and precedence constraints. It summarizes the problem, provides examples of problem instances, and describes using a shifting bottleneck approach along with local search methods. Computational results on classical job shop, semiconductor, and reentrant flowshop problems show the method finds better solutions than other approaches for most instances. Randomized local search further improves solutions for some problems but with increased computation time.