enum sctp_transport_cmd command,
                                  sctp_sn_error_t error)
 {
+       int spc_state = SCTP_ADDR_AVAILABLE;
        bool ulp_notify = true;
-       int spc_state = 0;
 
        /* Record the transition on the transport.  */
        switch (command) {
                 * to heartbeat success, report the SCTP_ADDR_CONFIRMED
                 * state to the user, otherwise report SCTP_ADDR_AVAILABLE.
                 */
-               if (SCTP_UNCONFIRMED == transport->state &&
-                   SCTP_HEARTBEAT_SUCCESS == error)
-                       spc_state = SCTP_ADDR_CONFIRMED;
-               else
-                       spc_state = SCTP_ADDR_AVAILABLE;
-               /* Don't inform ULP about transition from PF to
-                * active state and set cwnd to 1 MTU, see SCTP
-                * Quick failover draft section 5.1, point 5
-                */
-               if (transport->state == SCTP_PF) {
+               if (transport->state == SCTP_PF &&
+                   asoc->pf_expose != SCTP_PF_EXPOSE_ENABLE)
                        ulp_notify = false;
-                       transport->cwnd = asoc->pathmtu;
-               }
+               else if (transport->state == SCTP_UNCONFIRMED &&
+                        error == SCTP_HEARTBEAT_SUCCESS)
+                       spc_state = SCTP_ADDR_CONFIRMED;
+
                transport->state = SCTP_ACTIVE;
                break;
 
                 * to inactive state.  Also, release the cached route since
                 * there may be a better route next time.
                 */
-               if (transport->state != SCTP_UNCONFIRMED)
+               if (transport->state != SCTP_UNCONFIRMED) {
                        transport->state = SCTP_INACTIVE;
-               else {
+                       spc_state = SCTP_ADDR_UNREACHABLE;
+               } else {
                        sctp_transport_dst_release(transport);
                        ulp_notify = false;
                }
-
-               spc_state = SCTP_ADDR_UNREACHABLE;
                break;
 
        case SCTP_TRANSPORT_PF:
                transport->state = SCTP_PF;
-               ulp_notify = false;
+               if (asoc->pf_expose != SCTP_PF_EXPOSE_ENABLE)
+                       ulp_notify = false;
+               else
+                       spc_state = SCTP_ADDR_POTENTIALLY_FAILED;
                break;
 
        default: