Object manipulator MRTK3

Hi everyone, I have been creating an app for Hololens2 with the MRTKs 3 and i have found a problem which I am not able to solve. basically my problem is that when I move from one scene to another through the scripts below, I can not move the object that is passed through the scenes (the object has attached the object manipulator script), but if I go from the second scene to the one before and i re-do the procedure I can move the object that was taken there in the first place and I can not move the one brought in the last istance. does anyone know why? I leave below the scripts used with a description of their purpose:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class ChangeScenee : MonoBehaviour
{
public GameObject objectToKeep;
public string modelIdentifier;

public void SwitchScene(string sceneName)
{
    objectToKeep.SetActive(true);  
    ObjectManager.instance.KeepObject(objectToKeep);
    SceneManager.LoadScene(sceneName);
    PlayerPrefs.SetString("ModelIdentifier", modelIdentifier); 
}

}
this is the script used to pass from one scene to another and it’s binded with the script below:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class ObjectManager : MonoBehaviour
{
public static ObjectManager instance;

private List<GameObject> objectsToKeep = new List<GameObject>();

private void Awake()
{
    if (instance == null)
    {
        DontDestroyOnLoad(gameObject);
        instance = this;
    }
    else if (instance != this)
    {
        Destroy(gameObject);
    }

    SceneManager.sceneLoaded += OnSceneLoaded;
}

public void KeepObject(GameObject obj)
{
    if (!objectsToKeep.Contains(obj))
    {
        DontDestroyOnLoad(obj);
        objectsToKeep.Add(obj);
    }
}

private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    if (scene.name == "1_PVchoice") 
    {
        foreach (GameObject obj in objectsToKeep)
        {
            obj.SetActive(false); 
        }
    }
    else if (scene.name == "5_panelpositioning") 
    {
        foreach (GameObject obj in objectsToKeep)
        {
            obj.SetActive(true); 
        }
    }
}

private void OnDestroy()
{
    SceneManager.sceneLoaded -= OnSceneLoaded;
}

}

this script is binded with an empty gameobject that stores the object to be kept through the scenes.
if you need any additional info let me know.
thanks in advance.

Maybe the solution to your problem is SceneManager.MoveGameObjectToScene function which is used to transfer GameObject from one scene to another. Call that after loading the scene then call SceneManager.SetActiveScene to activate the scene.