diff --git a/src/com/android/services/telephony/ConferenceParticipantConnection.java b/src/com/android/services/telephony/ConferenceParticipantConnection.java
index eae3696..c142cc3 100644
--- a/src/com/android/services/telephony/ConferenceParticipantConnection.java
+++ b/src/com/android/services/telephony/ConferenceParticipantConnection.java
@@ -29,6 +29,11 @@
 public class ConferenceParticipantConnection extends Connection {
 
     /**
+     * The user entity URI For the conference participant.
+     */
+    private final Uri mUserEntity;
+
+    /**
      * The endpoint URI For the conference participant.
      */
     private final Uri mEndpoint;
@@ -51,6 +56,7 @@
         setAddress(participant.getHandle(), PhoneConstants.PRESENTATION_ALLOWED);
         setCallerDisplayName(participant.getDisplayName(), PhoneConstants.PRESENTATION_ALLOWED);
 
+        mUserEntity = participant.getHandle();
         mEndpoint = participant.getEndpoint();
         setCapabilities();
     }
@@ -102,7 +108,16 @@
      */
     @Override
     public void onDisconnect() {
-        mParentConnection.onDisconnectConferenceParticipant(mEndpoint);
+        mParentConnection.onDisconnectConferenceParticipant(mUserEntity);
+    }
+
+    /**
+     * Retrieves the user handle for this connection.
+     *
+     * @return The userEntity.
+     */
+    public Uri getUserEntity() {
+        return mUserEntity;
     }
 
     /**
diff --git a/src/com/android/services/telephony/ImsConference.java b/src/com/android/services/telephony/ImsConference.java
index 682326f..b0785d4 100644
--- a/src/com/android/services/telephony/ImsConference.java
+++ b/src/com/android/services/telephony/ImsConference.java
@@ -147,7 +147,7 @@
         public void onConferenceParticipantsChanged(android.telecom.Connection c,
                 List<ConferenceParticipant> participants) {
 
-            if (c == null) {
+            if (c == null || participants == null) {
                 return;
             }
             Log.v(this, "onConferenceParticipantsChanged: %d participants", participants.size());
@@ -203,6 +203,16 @@
             mConferenceParticipantConnections =
                     new ConcurrentHashMap<Uri, ConferenceParticipantConnection>(8, 0.9f, 1);
 
+    public void updateConferenceParticipantsAfterCreation() {
+        if (mConferenceHost != null) {
+            Log.v(this, "updateConferenceStateAfterCreation :: process participant update");
+            handleConferenceParticipantsUpdate(mConferenceHost,
+                    mConferenceHost.getConferenceParticipants());
+        } else {
+            Log.v(this, "updateConferenceStateAfterCreation :: null mConferenceHost");
+        }
+    }
+
     /**
      * Initializes a new {@link ImsConference}.
      *
@@ -487,22 +497,26 @@
     private void handleConferenceParticipantsUpdate(
             TelephonyConnection parent, List<ConferenceParticipant> participants) {
 
+        if (participants == null) {
+            return;
+        }
         boolean newParticipantsAdded = false;
         boolean oldParticipantsRemoved = false;
         ArrayList<ConferenceParticipant> newParticipants = new ArrayList<>(participants.size());
-        HashSet<Uri> participantEndpoints = new HashSet<>(participants.size());
+        HashSet<Uri> participantUserEntities = new HashSet<>(participants.size());
 
         // Add any new participants and update existing.
         for (ConferenceParticipant participant : participants) {
-            Uri endpoint = participant.getEndpoint();
-            participantEndpoints.add(endpoint);
-            if (!mConferenceParticipantConnections.containsKey(endpoint)) {
+            Uri userEntity = participant.getHandle();
+
+            participantUserEntities.add(userEntity);
+            if (!mConferenceParticipantConnections.containsKey(userEntity)) {
                 createConferenceParticipantConnection(parent, participant);
                 newParticipants.add(participant);
                 newParticipantsAdded = true;
             } else {
                 ConferenceParticipantConnection connection =
-                        mConferenceParticipantConnections.get(endpoint);
+                        mConferenceParticipantConnections.get(userEntity);
                 connection.updateState(participant.getState());
             }
         }
@@ -512,7 +526,7 @@
             // Set the state of the new participants at once and add to the conference
             for (ConferenceParticipant newParticipant : newParticipants) {
                 ConferenceParticipantConnection connection =
-                        mConferenceParticipantConnections.get(newParticipant.getEndpoint());
+                        mConferenceParticipantConnections.get(newParticipant.getHandle());
                 connection.updateState(newParticipant.getState());
             }
         }
@@ -524,9 +538,11 @@
         while (entryIterator.hasNext()) {
             Map.Entry<Uri, ConferenceParticipantConnection> entry = entryIterator.next();
 
-            if (!participantEndpoints.contains(entry.getKey())) {
+            if (!participantUserEntities.contains(entry.getKey())) {
                 ConferenceParticipantConnection participant = entry.getValue();
+                participant.setDisconnected(new DisconnectCause(DisconnectCause.CANCELED));
                 participant.removeConnectionListener(mParticipantListener);
+                mTelephonyConnectionService.removeConnection(participant);
                 removeConnection(participant);
                 entryIterator.remove();
                 oldParticipantsRemoved = true;
@@ -563,7 +579,7 @@
             Log.v(this, "createConferenceParticipantConnection: %s", connection);
         }
 
-        mConferenceParticipantConnections.put(participant.getEndpoint(), connection);
+        mConferenceParticipantConnections.put(participant.getHandle(), connection);
         PhoneAccountHandle phoneAccountHandle =
                 PhoneUtils.makePstnPhoneAccountHandle(parent.getPhone());
         mTelephonyConnectionService.addExistingConnection(phoneAccountHandle, connection);
@@ -576,12 +592,10 @@
      * @param participant The participant to remove.
      */
     private void removeConferenceParticipant(ConferenceParticipantConnection participant) {
-        if (Log.VERBOSE) {
-            Log.v(this, "removeConferenceParticipant: %s", participant);
-        }
+        Log.d(this, "removeConferenceParticipant: %s", participant);
 
         participant.removeConnectionListener(mParticipantListener);
-        mConferenceParticipantConnections.remove(participant.getEndpoint());
+        mConferenceParticipantConnections.remove(participant.getUserEntity());
     }
 
     /**
@@ -597,6 +611,7 @@
             // Mark disconnect cause as cancelled to ensure that the call is not logged in the
             // call log.
             connection.setDisconnected(new DisconnectCause(DisconnectCause.CANCELED));
+            mTelephonyConnectionService.removeConnection(connection);
             connection.destroy();
         }
         mConferenceParticipantConnections.clear();
@@ -651,9 +666,11 @@
             case Connection.STATE_INITIALIZING:
             case Connection.STATE_NEW:
             case Connection.STATE_RINGING:
-            case Connection.STATE_DIALING:
                 // No-op -- not applicable.
                 break;
+            case Connection.STATE_DIALING:
+                setDialing();
+                break;
             case Connection.STATE_DISCONNECTED:
                 DisconnectCause disconnectCause;
                 if (mConferenceHost == null) {
diff --git a/src/com/android/services/telephony/ImsConferenceController.java b/src/com/android/services/telephony/ImsConferenceController.java
index b266b81..f445dcb 100644
--- a/src/com/android/services/telephony/ImsConferenceController.java
+++ b/src/com/android/services/telephony/ImsConferenceController.java
@@ -318,8 +318,9 @@
         // Create conference and add to telecom
         ImsConference conference = new ImsConference(mConnectionService, conferenceHostConnection);
         conference.setState(connection.getState());
-        mConnectionService.addConference(conference);
         conference.addListener(mConferenceListener);
+        conference.updateConferenceParticipantsAfterCreation();
+        mConnectionService.addConference(conference);
 
         // Cleanup TelephonyConnection which backed the original connection and remove from telecom.
         // Use the "Other" disconnect cause to ensure the call is logged to the call log but the
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index fa3c506..b5610e5 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -74,6 +74,7 @@
                         Log.d(TelephonyConnection.this, "SettingOriginalConnection " +
                                 mOriginalConnection.toString() + " with " + connection.toString());
                         setOriginalConnection(connection);
+                        mWasImsConnection = false;
                     }
                     break;
                 case MSG_RINGBACK_TONE:
@@ -657,6 +658,18 @@
         return null;
     }
 
+     /**
+     * Checks for and returns the list of conference participants
+     * associated with this connection.
+     */
+    public List<ConferenceParticipant> getConferenceParticipants() {
+        if (mOriginalConnection == null) {
+            Log.v(this, "Null mOriginalConnection, cannot get conf participants.");
+            return null;
+        }
+        return mOriginalConnection.getConferenceParticipants();
+    }
+
     /**
      * Checks to see the original connection corresponds to an active incoming call. Returns false
      * if there is no such actual call, or if the associated call is not incoming (See
