ANSC_HANDLE
DslhObjroGetObjRecord2
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 hTokenChain
    )
{
    ANSC_STATUS                     returnStatus        = ANSC_STATUS_SUCCESS;
    PDSLH_OBJ_RECORD_OBJECT         pMyObject           = (PDSLH_OBJ_RECORD_OBJECT    )hThisObject;
    PANSC_TOKEN_CHAIN               pObjNameTokens      = (PANSC_TOKEN_CHAIN          )hTokenChain;
    PANSC_STRING_TOKEN              pObjNameToken       = (PANSC_STRING_TOKEN         )NULL;
    PDSLH_OBJ_RECORD_OBJECT         pChildObjRecord     = (PDSLH_OBJ_RECORD_OBJECT    )NULL;
    PDSLH_OBJ_ENTITY_OBJECT         pChildObjEntity     = (PDSLH_OBJ_ENTITY_OBJECT    )NULL;
    PDSLH_OBJ_CONTROLLER_OBJECT     pChildObjController = (PDSLH_OBJ_CONTROLLER_OBJECT)NULL;
    PDSLH_OBJCO_TABLE_OBJECT        pChildObjcoTable    = (PDSLH_OBJCO_TABLE_OBJECT   )NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry         = (PSINGLE_LINK_ENTRY         )NULL;
    BOOL                            bObjRecordFound     = FALSE;

    if ( !pObjNameTokens )
    {
        return  (ANSC_HANDLE)NULL;
    }
    else
    {
        pObjNameToken = AnscTcUnlinkToken(pObjNameTokens);
    }

    if ( !pObjNameToken )
    {
        return  (ANSC_HANDLE)NULL;
    }

    pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->ObjroQueue);

    while ( pObjNameToken->Name && pSLinkEntry )
    {
        pChildObjRecord = ACCESS_DSLH_OBJ_RECORD_OBJECT(pSLinkEntry);
        pSLinkEntry     = AnscQueueGetNextEntry(pSLinkEntry);

        if ( pChildObjRecord->LastName && AnscEqualString
                (
                    pChildObjRecord->LastName,
                    pObjNameToken->Name,
                    TRUE
                ) )
        {
            bObjRecordFound = TRUE;

            break;
        }
    }

    AnscFreeMemory(pObjNameToken);

    if ( bObjRecordFound )
    {
        pChildObjEntity     = (PDSLH_OBJ_ENTITY_OBJECT    )pChildObjRecord->hDslhObjEntity;
        pChildObjController = (PDSLH_OBJ_CONTROLLER_OBJECT)pChildObjRecord->hDslhObjController;
        pChildObjcoTable    = (PDSLH_OBJCO_TABLE_OBJECT   )pChildObjController;

        if ( AnscTcGetTokenCount(pObjNameTokens) == 0 )
        {
            if ( pChildObjEntity->ObjDescr->bDynamic && pChildObjEntity->ObjDescr->Type == DSLH_CWMP_OBJECT_TYPE_table)
            {
                if ( pChildObjcoTable->IsUpdated((ANSC_HANDLE)pChildObjcoTable) )
                {
					AnscTrace("Delete and Repopulate the record in '%s'\n", pChildObjEntity->LastName);

                    pChildObjRecord->DelAllObjRecords  ((ANSC_HANDLE)pChildObjRecord);

                    pChildObjcoTable->Lock(pChildObjcoTable);
                    pChildObjRecord->PopulateObjRecords((ANSC_HANDLE)pChildObjRecord);
                    pChildObjRecord->PopulateVarRecords((ANSC_HANDLE)pChildObjRecord);
                    pChildObjcoTable->Unlock(pChildObjcoTable);

   				    AnscTrace("End of the repopulation in '%s'\n", pChildObjEntity->LastName);

                }
            }

            return  (ANSC_HANDLE)pChildObjRecord;
        }
        else
        {
            /*
             * If this obj record is a dynamic table object, we need to check whether the table
             * content has been updated. If it has, we need to remove all child objects and para-
             * meters under this object and re-populate them.
             */
            if ( pChildObjEntity->ObjDescr->bDynamic && pChildObjEntity->ObjDescr->Type == DSLH_CWMP_OBJECT_TYPE_table)
            {
                if ( pChildObjcoTable->IsUpdated((ANSC_HANDLE)pChildObjcoTable) )
                {
					AnscTrace("Delete and Repopulate the record in '%s'\n", pChildObjEntity->LastName);

                    pChildObjRecord->DelAllObjRecords  ((ANSC_HANDLE)pChildObjRecord);

                    pChildObjcoTable->Lock(pChildObjcoTable);
                    pChildObjRecord->PopulateObjRecords((ANSC_HANDLE)pChildObjRecord);
                    pChildObjRecord->PopulateVarRecords((ANSC_HANDLE)pChildObjRecord);
                    pChildObjcoTable->Unlock(pChildObjcoTable);

                    AnscTrace("End of the repopulation in '%s'\n", pChildObjEntity->LastName);

                }
            }

            return  pChildObjRecord->GetObjRecord2
                        (
                            (ANSC_HANDLE)pChildObjRecord,
                            (ANSC_HANDLE)pObjNameTokens
                        );
        }
    }

    return  (ANSC_HANDLE)NULL;
}