* hdcp is not desired
         */
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++) {
-               if (hdcp->connection.displays[i].state != MOD_HDCP_DISPLAY_INACTIVE &&
-                               !hdcp->connection.displays[i].adjust.disable) {
+               if (hdcp->displays[i].state != MOD_HDCP_DISPLAY_INACTIVE &&
+                               !hdcp->displays[i].adjust.disable) {
                        is_auth_needed = 1;
                        break;
                }
         * hdcp is not desired
         */
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++) {
-               if (hdcp->connection.displays[i].state != MOD_HDCP_DISPLAY_INACTIVE &&
-                               !hdcp->connection.displays[i].adjust.disable) {
+               if (hdcp->displays[i].state != MOD_HDCP_DISPLAY_INACTIVE &&
+                               !hdcp->displays[i].adjust.disable) {
                        is_auth_needed = 1;
                        break;
                }
                goto out;
        display->state = MOD_HDCP_DISPLAY_INACTIVE;
 
-       /* request authentication for remaining displays*/
-       if (get_active_display_count(hdcp) > 0)
+       /* request authentication when connection is not reset */
+       if (current_state(hdcp) != HDCP_UNINITIALIZED)
                callback_in_ms(hdcp->connection.link.adjust.auth_delay * 1000,
                                output);
 out:
 
 /* contains values per connection */
 struct mod_hdcp_connection {
        struct mod_hdcp_link link;
-       struct mod_hdcp_display displays[MAX_NUM_OF_DISPLAYS];
        uint8_t is_repeater;
        uint8_t is_km_stored;
        uint8_t is_hdcp1_revoked;
        struct mod_hdcp_config config;
        /* per connection */
        struct mod_hdcp_connection connection;
+       /* per displays */
+       struct mod_hdcp_display displays[MAX_NUM_OF_DISPLAYS];
        /* per authentication attempt */
        struct mod_hdcp_authentication auth;
        /* per state in an authentication */
        uint8_t i;
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
-               if (is_display_active(&hdcp->connection.displays[i]))
+               if (is_display_active(&hdcp->displays[i]))
                        added_count++;
        return added_count;
 }
        uint8_t i;
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
-               if (is_display_added(&hdcp->connection.displays[i]))
+               if (is_display_added(&hdcp->displays[i]))
                        added_count++;
        return added_count;
 }
        struct mod_hdcp_display *display = NULL;
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
-               if (is_display_added(&hdcp->connection.displays[i])) {
-                       display = &hdcp->connection.displays[i];
+               if (is_display_added(&hdcp->displays[i])) {
+                       display = &hdcp->displays[i];
                        break;
                }
        return display;
        struct mod_hdcp_display *display = NULL;
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
-               if (hdcp->connection.displays[i].index == index &&
-                               is_display_active(&hdcp->connection.displays[i])) {
-                       display = &hdcp->connection.displays[i];
+               if (hdcp->displays[i].index == index &&
+                               is_display_active(&hdcp->displays[i])) {
+                       display = &hdcp->displays[i];
                        break;
                }
        return display;
        struct mod_hdcp_display *display = NULL;
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
-               if (!is_display_active(&hdcp->connection.displays[i])) {
-                       display = &hdcp->connection.displays[i];
+               if (!is_display_active(&hdcp->displays[i])) {
+                       display = &hdcp->displays[i];
                        break;
                }
        return display;
 
        HDCP_TOP_HDCP1_DESTROY_SESSION_TRACE(hdcp);
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
                if (is_display_encryption_enabled(
-                               &hdcp->connection.displays[i])) {
-                       hdcp->connection.displays[i].state =
+                               &hdcp->displays[i])) {
+                       hdcp->displays[i].state =
                                        MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED;
                        HDCP_HDCP1_DISABLED_TRACE(hdcp,
-                                       hdcp->connection.displays[i].index);
+                                       hdcp->displays[i].index);
                }
 
        return MOD_HDCP_STATUS_SUCCESS;
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++) {
 
-               if (hdcp->connection.displays[i].state != MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED ||
-                   hdcp->connection.displays[i].adjust.disable)
+               if (hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED ||
+                   hdcp->displays[i].adjust.disable)
                        continue;
 
                memset(hdcp_cmd, 0, sizeof(struct ta_hdcp_shared_memory));
 
                hdcp_cmd->in_msg.hdcp1_enable_dp_stream_encryption.session_handle = hdcp->auth.id;
-               hdcp_cmd->in_msg.hdcp1_enable_dp_stream_encryption.display_handle = hdcp->connection.displays[i].index;
+               hdcp_cmd->in_msg.hdcp1_enable_dp_stream_encryption.display_handle = hdcp->displays[i].index;
                hdcp_cmd->cmd_id = TA_HDCP_COMMAND__HDCP1_ENABLE_DP_STREAM_ENCRYPTION;
 
                psp_hdcp_invoke(psp, hdcp_cmd->cmd_id);
                if (hdcp_cmd->hdcp_status != TA_HDCP_STATUS__SUCCESS)
                        return MOD_HDCP_STATUS_HDCP1_ENABLE_STREAM_ENCRYPTION_FAILURE;
 
-               hdcp->connection.displays[i].state = MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED;
-               HDCP_HDCP1_ENABLED_TRACE(hdcp, hdcp->connection.displays[i].index);
+               hdcp->displays[i].state = MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED;
+               HDCP_HDCP1_ENABLED_TRACE(hdcp, hdcp->displays[i].index);
        }
 
        return MOD_HDCP_STATUS_SUCCESS;
        HDCP_TOP_HDCP2_DESTROY_SESSION_TRACE(hdcp);
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++)
                if (is_display_encryption_enabled(
-                               &hdcp->connection.displays[i])) {
-                       hdcp->connection.displays[i].state =
+                               &hdcp->displays[i])) {
+                       hdcp->displays[i].state =
                                        MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED;
                        HDCP_HDCP2_DISABLED_TRACE(hdcp,
-                                       hdcp->connection.displays[i].index);
+                                       hdcp->displays[i].index);
                }
 
        return MOD_HDCP_STATUS_SUCCESS;
 
 
        for (i = 0; i < MAX_NUM_OF_DISPLAYS; i++) {
-               if (hdcp->connection.displays[i].state != MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED ||
-                   hdcp->connection.displays[i].adjust.disable)
+               if (hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE_AND_ADDED ||
+                   hdcp->displays[i].adjust.disable)
                        continue;
-               hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.display_handle = hdcp->connection.displays[i].index;
+               hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.display_handle = hdcp->displays[i].index;
                hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.session_handle = hdcp->auth.id;
 
                hdcp_cmd->cmd_id = TA_HDCP_COMMAND__HDCP2_ENABLE_DP_STREAM_ENCRYPTION;
                if (hdcp_cmd->hdcp_status != TA_HDCP_STATUS__SUCCESS)
                        break;
 
-               hdcp->connection.displays[i].state = MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED;
-               HDCP_HDCP2_ENABLED_TRACE(hdcp, hdcp->connection.displays[i].index);
+               hdcp->displays[i].state = MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED;
+               HDCP_HDCP2_ENABLED_TRACE(hdcp, hdcp->displays[i].index);
        }
 
        return (hdcp_cmd->hdcp_status == TA_HDCP_STATUS__SUCCESS) ? MOD_HDCP_STATUS_SUCCESS