public void Replicate()
    {
        int randomIndex        = Random.Range(0, validReplicationList.Count);
        int randomIndexSpecial = Random.Range(0, validReplicationListSpecial.Count);
        Match3BoardPiece targetBoardPiece;

        if (validReplicationList.Count != 0)
        {
            targetBoardPiece = freezerNeighbors[validReplicationList[randomIndex]];
        }
        else
        {
            targetBoardPiece = freezerNeighbors[validReplicationListSpecial[randomIndexSpecial]];
        }

        NormalTile oldTile = targetBoardPiece.Tile as NormalTile;

        //Create new freezer tile
        Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetBoardPiece.BoardPosition, typeof(FreezerTile), TileColorType.None, false);
        FreezerTile newFreezerTile = (targetBoardPiece.Tile as FreezerTile);

        //Raise CREATE event
        RaiseOnFreezerTileCreateEvent(newFreezerTile);

        newFreezerTile.StartCoroutine(newFreezerTile.PlayCreateAnimation());

        if (oldTile != null)
        {
            oldTile.DisableTileLogic();
            GameObject.Destroy(oldTile.gameObject);
        }

        Match3BoardGameLogic.Instance.IsBoardStable = false;
        Match3BoardGameLogic.Instance.TryCheckStableBoard();
    }