As in the real world, users configure their workspaces by selecting tools, positioning and orienting them in space, and binding them to application objects. At the moment of binding, the tool decides whether to accept the connection by checking if the application object contains all the needed information and by verifying that the constraint graph obtained by connecting the tool to the model can be handled by the underlying solver (i.e. it is acyclic). The binding mechanism is defined in a declarative way by using indirect constraints