How to Update ScriptableObject

I have a database of skills that inherit from scriptableobject.

[Serializable]
public class ISSkill : ISObject, IISSkill, ScriptableObject

Then i have a Generic List of ScriptableObjects:

public abstract class ScriptableObjectDatabase<T> : ScriptableObject where T : ScriptableObject
        {
      
            [SerializeField]
            protected List<T> database = new List<T>();

When I add Items everything tracks nicely into the database and creates a scriptable object in my project panel. Using the wiki CreateAsset code. I know there is missing curly brackets. Just from the code snippet.

public override void Add(ISSkill item)
        {
            ScriptableObjectUtility.CreateAsset<ISSkill>(GetPath() + SKILL_INVENTORY_PATH, item);
            database.Add(item);

            // Flags changes and saves
            EditorUtility.SetDirty(this);
        }

Here is the CreateAssest Function:

public static void CreateAsset<T>(string path, T item) where T : ScriptableObject
{
    if (!AssetDatabase.IsValidFolder(path))
        ValidatePath(path);

    string assetPathAndName = path + "/" + item.name + ".asset";

    AssetDatabase.CreateAsset(item, assetPathAndName);
    AssetDatabase.SaveAssets();
    AssetDatabase.Refresh();
    EditorUtility.SetDirty(item);
    Selection.activeObject = item;
}

Then i have a replace method that basically updates the oldSkill with new skill in database. This works nicely in the database. But my UpdateAsset Method doesnt seem to be working and i dont know why or how to update the scriptableobject in the project panel.

public void Replace(int indexOfOldItem, T item)
        {
            T newItem = ScriptableObjectUtility.UpdateAsset<T>(database[indexOfOldItem], item);
            database[indexOfOldItem] = newItem;
            EditorUtility.SetDirty(this);
        }

Here is the UpdateAsset function

public static T UpdateAsset<T>(T oldItem, T newItem) where T : ScriptableObject
    {
        string path = AssetDatabase.GetAssetPath(oldItem);

        T asset = AssetDatabase.LoadAssetAtPath(path, typeof(T)) as T;

        asset = newItem;
        asset.name = newItem.name;

        AssetDatabase.Refresh();

        EditorUtility.SetDirty(asset);

        return asset;
    }

I know this is a lot of code but if anyone can help me figure this out, i thank you in advanced!

Forgot that i was making a copy of a Skill so therefore it lost its connection to the ScriptableObject in the project panel