When doing add/edit operations on cards we need to support asynchronous requests - this is especially significant when doing LDAP operations. What I think should happen is: 1) User adds a new card or edits card details. 2) User selects OK 3) The appropriate request is fired (which also starts the LDAP operation), but NS_ERROR_ASYNCHRONOUS_REQUEST is returned to the UI. 4) On seeing the asynchronous request result (instead of the NS_OK one), the card dialog disables all fields and possibly puts up a progress dialog. 5) On receipt of the LDAP result message (possibly feedback to UI via observer service?): - if success, then close the card dialog. - if failure, display a dialog with the error result (including the LDAP server's text error), then allow the user to modify the data or abort the changes. We'd need to ensure there is a timeout set for the operation. The additional LDAP server's text message is required because some servers may require extra fields or not allow the user to edit that directory (which unfortunately we can't detect with current LDAP schemas).