In this chapter, we extend our programming language by procedures. Procedures have declarations and calls. Procedure calls have a complex semantics: The actual computation is interrupted at the call and resumed when the called procedure has terminated. The body of the procedure often forms a new scope for local names, i.e., names that are only visible within the body. Global names are possibly hidden by local names. Upon a procedure call, actual parameters are passed to formal parameters and, upon termination, results are passed back to the caller. Two different names for a variable coexist if the variable is passed to a reference parameter.