Content management systems are designed to handle generic data items. These items are placed within a hierarchical structure. Each session with a content repository is managed, so that changes can be made in a transactional manner. A separate indexing service can be used to enable searching through annotations attached to items. Generally three levels of functionality are supplied with content managed systems: level 1 refers to "read" based operations; level two is for "write" based operations, such as maintaining referential integrity and providing access control; and level three is additional operations such as versioning, observation/notification and concurrency.