used TObjectListLocked instead of manual TObjectList + TRTLCriticalSection