Just one additional thought: this should support priorities, on a general and per-contact basis. For example, given a contact with both jabber and MSN, a FOSS user may prefer to contact someone through Jabber as a general rule. But a particular user may use jabber in work, and MSN on his phone, in which case MSN might be the better choice for that contact.
I'd suggest implementing a protocol-priority widget, and adding instances to both session-wide preferences, and individual contact properties.
Just one additional thought: this should support priorities, on a general and per-contact basis. For example, given a contact with both jabber and MSN, a FOSS user may prefer to contact someone through Jabber as a general rule. But a particular user may use jabber in work, and MSN on his phone, in which case MSN might be the better choice for that contact.
I'd suggest implementing a protocol-priority widget, and adding instances to both session-wide preferences, and individual contact properties.