We introduce the concept of the system specification as a way of specifying properties not normally associated with model-based specifications. This idea is extended by defining a notion of refinement between systems, and also data refinement between systems. These refinement criteria are contrasted with the conventional case. The use of these refinement techniques is demonstrated by specifying a problem of competing resources, then refining it to remove the possibilities of deadlock and livelock.