We study the problem of synthesising controllers for discrete event systems. Traditionally this problem is tackled in a linear time setting. Moreover, the desired subset of the computations of the uncontrolled system (often called a plant) is specified by automata theoretic means. Here we formulate the problem in a branching time framework. We use a class of labelled transition systems to model both the plant and the specification. We deploy behaviour preserving morphisms to capture the role of a controller; the controlled behaviour of the plant should be related via a behaviour preserving morphism to the specification at the level of unfoldings. One must go over to unfoldings in order to let the controller use memory of the past to carry out its function. We show that the problem of checking if a pair of finite transition systems - one modelling the plant and the other the specification - admits a controller is decidable in polynomial time. We also show the size of the finite controller, if one exists can be bounded by a polynomial in the sizes of the plant and the specification. Such a controller can also be effectively constructed. We then prove that in a natural concurrent setting, the problem of checking for the existence of a (finite) controller is undecidable.