XSB extends the standard functionality of Prolog (being a descendant of PSB- and SB-Prolog) to include implementations of OLDT (tabling) and HiLog terms. OLDT resolution is extremely useful for recursive query computation, allowing programs to terminate correctly in many cases where Prolog does not. HiLog supports a type of higher-order programming in which predicate symbols can be variable or structured. This allows unification to be performed on the predicate symbols themselves in addition to the arguments of the predicates. Of course, Tabling and HiLog can be used together.