It seems to me that the central issue is the "change in granularity level". There are a lot of qualified people discussing the what, where & how, but it seems that the WHY is yet to be explained. Why "contact" is to be "the right level of granularity"? ======================================================== WHY the change? What's OpenERP's reasoning behind this? I've been trying to read their mind, and I decided to contribute to the discussion because I think I've figured it out. For me the key was in Fabien's comment #120 (https://bugs.launchpad.net/openobject-addons/+bug/1160365/comments/120). V7 is about Social: From a legal POV, your company interacts with other Companies. From a social POV, your users interact with other Company's people. For OpenERP to be social, it needs to interact with a Contact@Partner instead of a "pure" Partner. This way it can send emails to Contact@Partner, instead of Partner's generic e-mail, or let Contact@Partner interact using a personal Portal user account, instead of a Partner generic one. Thus the need for the "change in granularity". Everyone is assuming that a Contact it's a Person working for a Company But it's not - it's more like a Job/Position at a Company. It's a "Contact@Partner": a Contact *at a* Partner; a Partner plus a point of contact info. It's actually just a face, an alias, for the Partner. But it breaks the commercial entity reference on documents? Not in the simple, flat, partner structure you get out-of-the box on v7: On the flat structure Partner 1->N Contacts, you just need to use `partner_id.parent_id` where you used `partner_id` and there you are: you get exactly the same info as before. This can also be easily achieved in SQL with just as additional join. Explained like this, it looks like, despite being a big change, there seems to be no big deal, and that you can do everything you could do before with pretty much the same effort. And if the your ContactX@Customer1 person goes to work at Customer2, you don't edit Contact1: You inactivate ContactX@Customer1 and create ContactX@Customer2! Because "ContactX" does not make sense on itself on the new model. It only makes sense to have "ContactX@Customer1" and "ContactX@Customer2". And if the ContactX personally is also your Customer, then you need to also create "HomeAddress@PersonX". Do I sound like Fabien and Olivier right now? I hope I do. Problems came when you were able to mix "Contacts at Partners" and "Pure Partners" on the same field, and that a lot of v7 localization ports to v7 was done assuming that partner_id is still a company ... and when you need to add a hierarchy to the Partner table ... But that's the already discussion going on . I hope I contributed to a better discussion. I'm not swimming in VC funding over here to offer a case, but I promise to bring a couple of Port wine bottles to the OpenERP days if a solution good enough for everyone is achieved. PS: Raphael's code was just a proof of concept for a solution. Everyone, including Raphael, prefers a solution from OpenERP SA implemented directly in the core. OpenERP SA should be thankful to have such an involved community, with people as skilled as Raphael. Having said that, Raphael - I want a bottle from that case.