Software development problems have a tendency to reoccur in different projects. Thus, one way to increased efficiency in developing software is increased reuse of solutions previously developed. Very often, however, problems repeat in a similar, but not exact manner, making code reuse hard to impossible. Patterns are the way out of this problem. They allow the reuse of an idea, without requiring exact code reuse (as components would). One important type of pattern are Design Patterns as introduced by the so-called "Gang of Four" (Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides). Flexible reuse in a manner closer to code reuse can be provided through software frameworks. These make use of many design patterns to enable a high degree of flexibility while providing some basic structure. This course presents, after an introduction to the GOF patterns, modern material on advanced design patterns and their employment in frameworks.