If an object oriented program is a collection of communicating objects, then the objects' protocols de ne the languages the program speaks. Unfortunately, protocols are di cult to design in isolation, so many programs' protocols are not as well designed as they could be. This paper presents six patterns which describe how objects protocols can be designed or redesigned. By using these patterns, programs and designs can be made more simple, more general, and more easy to change.