We present an architectural framework for specifying and processing co-reservations in Grid environments. Compared to other approaches, our co-reservation framework is more general. It can be applied to the reservation of applications running concurrently on multiple resources (multisite applications) and to the planning of job flows, where the components may be linked by some temporal or spatial relationship. We introduce the concept of Virtual Resources that allows to compose resources by abstracting from their specific features. Among other features, Virtual Resources enable advanced co-reservation with nested resource levels, resource aggregation, and transparent fault recovery.