The speed of method dispatching is an important issue in the overall performance of object-oriented programs. We have developed an algorithm for constructing efficient dispatch functions for the general predicate dispatching model, which generalizes single dispatching, multiple dispatching, predicate classes and classifiers, and patternmatching. Our algorithm generates a lookup DAG each of whose nodes represents an N-way test of the class or value of a formal or other expression. Our algorithm implements each of these N-way tests with a binary decision tree blending class identity tests, class range tests, and table lookups. Our algorithm exploits any available static information (from type declarations or class analysis) to prune unreachable paths from the lookup DAG, and uses any available dynamic profile information to minimize the expected time to traverse the binary decision trees. We measure the effectiveness of our dispatching algorithms on a collection of large Cecil and Java programs, compiled by the Vortex optimizing compiler, showing improvements of up to 40 % over already heavily optimized baseline versions.