This paper presents a completely systematic design procedure for asynchronous controllers. The initial step is the construction of a signal transition graph (STG, an interpreted Petri net) of the dialog between data path and controller: a formal representation without reference to time or internal states. To implement concurrently operating control structures, and also to reduce design effort and circuit cost, this STG can be decomposed into overlapping subnets. A universal initial solution is then obtained by algorithmically constructing a primitive flow table from each component net. This step links the procedure to classical asynchronous design, in particular to its proven optimization methods, without restricting the set of solutions. In contrast to other approaches, there is no need to extend the original STG intuitively.