protected virtual void Update()
    {
        if (!Application.isPlaying)
        {
            return;
        }

        if (markForRefresh)
        {
            RefreshContent();
            markForRefresh = false;
        }

        // Calculate any smooth scrolling that needs to happen
        if (listInfo != null && listInfo.scrollToIndex != -1)
        {
            float itemSize = 0;

            listInfo.scrollTo = GetItemPosition(listInfo.scrollToIndex, out itemSize) + listInfo.scrollOffset;

            switch (listInfo.scrollAnchor)
            {
            case ListAnchor.Middle:
                listInfo.scrollTo -= (isVertical ? ViewportSize / 2f - itemSize / 2f : -ViewportSize / 2f + itemSize / 2f);
                break;

            case ListAnchor.End:
                listInfo.scrollTo -= (isVertical ? ViewportSize - itemSize : -ViewportSize + itemSize);
                break;
            }

            // Calculate the lerp using an ease out function
            double timePassed   = SystemTimeInMilliseconds - listInfo.scrollingStart;
            float  delta        = (float)(timePassed / listInfo.scrollDelta);
            float  distanceLeft = Mathf.Abs(listInfo.scrollTo - ViewportPosition);

            if (distanceLeft <= 0.5)
            {
                listInfo.ResetScroll();
            }
            else
            {
                ContentPosition = ContentPosition - Mathf.Lerp(0, distanceLeft, delta) * (listInfo.scrollTo < ViewportPosition ? -1 : 1);

                UpdateListItems();

                // Check if we have scrolled past the end of the content
                if (SpaceBelow < 0 || SpaceAbove < 0)
                {
                    // Update the content position so its at the end
                    ContentPosition = ContentPosition - (SpaceBelow < 0 ? SpaceBelow : -SpaceAbove);

                    // Stop scrolling
                    listInfo.ResetScroll();

                    // Do one last update
                    UpdateListItems();
                }
            }
        }
    }