Doing away with special hierarchies hard coded in to various tables: like package_id. This one I consider especially bad as it makes a display function (package) owner of data...not good. Everywhere package_id has crept into core models will need to be fixed for this removal to work. However, all hierarchies are special purpose, and if you don't need set of semantics, the trend it to utilize an already existing hierarchy with new semantics. Thus we have the parent_id, context_id confusion. What is needed to handle this once and for all is to create a special table (acs_object_structure), which creates a series of hierarchies. By simply adding a tag to a mapping you can use one table and one set of (tree_sortkey/connect by) functions to maintain things. This will end the confusion, and allow users to create hierarchies without the overhead of building all the maintainance functions needed. For mapping objects to packages:
acs_object_structure__create(:parent_obj, child_obj, :tag);