With the advent of multiprocessors on the desktop, software applications are increasingly likely to adopt multithreaded architectures. To cope with the complexity of concurrent systems, programmers build systems from threadsafe components. This produces excessive and redundant locking, restricting the potential for concurrency within the system.Rather than deploying individual thread-safe components, we advocate deferring the deployment of locks until the code dependencies are known. This avoids redundant locking, and allows the granularity of concurrency to be chosen in a flexible way. In earlier work we identified a formal relationship, known as a Galois connection, between the potential for concurrency in a composite system and the locking requirements for its components. This paper explores further properties of this relationship, and demonstrates how lock selection can be made easy with appropriate tool support.