diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Graph/ARFGraphView.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Graph/ARFGraphView.cs
index 208221ed855552b2198bee518a89393140d2972b..8378be52304b2c7773574cc36c9037e2946833a9 100644
--- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Graph/ARFGraphView.cs	
+++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Graph/ARFGraphView.cs	
@@ -20,6 +20,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Linq;
 
 using UnityEngine;
@@ -232,10 +233,10 @@ namespace ETSI.ARF.WorldStorage.UI
 
                     WorldAnchor anchor = new WorldAnchor(name)
                     {
-                        UUID = Guid.NewGuid(), 
-                        CreatorUUID = Guid.Parse(worldStorageUser.UUID), 
-                        LocalCRS = localCRS, 
-                        Unit = UnitSystem.CM, 
+                        UUID = Guid.NewGuid(),
+                        CreatorUUID = Guid.Parse(worldStorageUser.UUID),
+                        LocalCRS = localCRS,
+                        Unit = UnitSystem.CM,
                         WorldAnchorSize = worldAnchorSize
                     };
 
@@ -304,41 +305,49 @@ namespace ETSI.ARF.WorldStorage.UI
 
         public void PaintWorldStorage()
         {
-            List<Trackable> trackables = TrackableRequest.GetAllTrackables(worldStorageServer);
-            List<WorldAnchor> worldAnchors = WorldAnchorRequest.GetAllWorldAnchors(worldStorageServer);
-            List<WorldLink> worldLinks = WorldLinkRequest.GetAllWorldLinks(worldStorageServer);
-
-            foreach (WorldAnchor worldAnchor in worldAnchors)
+            WorldAnchorRequest.GetWorldAnchorsAsync(worldStorageServer, (response) =>
             {
-                var waNode = new ARFNodeWorldAnchor(worldAnchor);
+                List<WorldAnchor> worldAnchors = response.result;
+                foreach (WorldAnchor worldAnchor in worldAnchors)
+                {
+                    var waNode = new ARFNodeWorldAnchor(worldAnchor);
 
-                Rect posTemp = new(26, 93, 160, 77);
-                SaveInfo.instance.nodePositions.TryGetValue(worldAnchor.UUID.ToString(), out posTemp);
-                waNode.SetPosition(posTemp);
+                    Rect posTemp = new(26, 93, 160, 77);
+                    SaveInfo.instance.nodePositions.TryGetValue(worldAnchor.UUID.ToString(), out posTemp);
+                    waNode.SetPosition(posTemp);
 
-                AddElement(waNode);
-            }
+                    AddElement(waNode);
+                }
+            });
 
-            foreach (Trackable trackable in trackables)
+            TrackableRequest.GetTrackablesAsync(worldStorageServer, (response) =>
             {
-                var tracknode = new ARFNodeTrackable(trackable);
+                List<Trackable> trackables = response.result;
+                foreach (Trackable trackable in trackables)
+                {
+                    var tracknode = new ARFNodeTrackable(trackable);
 
-                Rect posTemp = new(26, 93, 160, 77);
-                SaveInfo.instance.nodePositions.TryGetValue(trackable.UUID.ToString(), out posTemp);
-                tracknode.SetPosition(posTemp);
+                    Rect posTemp = new(26, 93, 160, 77);
+                    SaveInfo.instance.nodePositions.TryGetValue(trackable.UUID.ToString(), out posTemp);
+                    tracknode.SetPosition(posTemp);
 
-                AddElement(tracknode);
-            }
-            foreach (WorldLink worldLink in worldLinks)
-            {
-                var portPair = GetPortsFromWorldLink(worldLink);
-                ARFEdgeLink edge = portPair.Key.ConnectTo<ARFEdgeLink>(portPair.Value);
-                edge.worldLink = worldLink;
-                edge.GUID = worldLink.UUID.ToString();
+                    AddElement(tracknode);
+                }
+            });
 
-                AddElement(edge);
-            }
+            WorldLinkRequest.GetWorldLinksAsync(worldStorageServer, (response) =>
+            {
+                List<WorldLink> worldLinks = response.result;
+                foreach (WorldLink worldLink in worldLinks)
+                {
+                    var portPair = GetPortsFromWorldLink(worldLink);
+                    ARFEdgeLink edge = portPair.Key.ConnectTo<ARFEdgeLink>(portPair.Value);
+                    edge.worldLink = worldLink;
+                    edge.GUID = worldLink.UUID.ToString();
 
+                    AddElement(edge);
+                }
+            });
         }
 
         internal ARFNodeTrackable CreateTrackableNode(Trackable track, float posX, float posY)
@@ -529,14 +538,14 @@ namespace ETSI.ARF.WorldStorage.UI
                 switch (typeName)
                 {
                     case nameof(Trackable):
-                        TrackableRequest.DeleteTrackable(worldStorageServer, elemToRemove.Key);
+                        TrackableRequest.DeleteTrackableAsync(worldStorageServer, Guid.Parse(elemToRemove.Key), (response) => { });
                         break;
                     case nameof(WorldAnchor):
                         Debug.Log("delete worldanchor");
-                        WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, elemToRemove.Key);
+                        WorldAnchorRequest.DeleteWorldAnchorAsync(worldStorageServer, Guid.Parse(elemToRemove.Key), (response) => { });
                         break;
                     case nameof(WorldLink):
-                        WorldLinkRequest.DeleteWorldLink(worldStorageServer, elemToRemove.Key);
+                        WorldLinkRequest.DeleteWorldLinkAsync(worldStorageServer, Guid.Parse(elemToRemove.Key), (response) => { });
                         break;
                     default:
                         Debug.Log("oops");
@@ -544,63 +553,70 @@ namespace ETSI.ARF.WorldStorage.UI
                 }
             }
 
-            //UPDATE AND ADD ELEMENTS
+            // UPDATE AND ADD ELEMENTS
             foreach (ARFNode node in nodes)
             {
                 if (!SaveInfo.instance.nodePositions.ContainsKey(node.GUID))
                 {
-                    //POST TRACKABLE
+                    // POST TRACKABLE
                     if (node is ARFNodeTrackable aRFNodeTrackable)
                     {
-                        var posX = new List<String>();
+                        var posX = new Collection<String>();
                         posX.Add(aRFNodeTrackable.GetPosition().x.ToString());
-                        var posY = new List<String>();
+                        var posY = new Collection<String>();
                         posY.Add(aRFNodeTrackable.GetPosition().y.ToString());
                         Trackable trackable = aRFNodeTrackable.trackable;
                         trackable.KeyvalueTags["unityAuthoringPosX"] = posX;
                         trackable.KeyvalueTags["unityAuthoringPosY"] = posY;
-                        String uuid = TrackableRequest.AddTrackable(worldStorageServer, trackable);
-
-                        //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
-                        uuid = uuid.Replace("\"", "");
-                        foreach (ARFEdgeLink edge in aRFNodeTrackable.portIn.connections)
+                        TrackableRequest.CreateTrackableAsync(worldStorageServer, trackable, (response) =>
                         {
-                            edge.worldLink.UUIDTo = Guid.Parse(uuid);
-                        }
-                        foreach (ARFEdgeLink edge in aRFNodeTrackable.portOut.connections)
-                        {
-                            edge.worldLink.UUIDFrom = Guid.Parse(uuid);
-                        }
-                        aRFNodeTrackable.trackable.UUID = Guid.Parse(uuid);
-                        aRFNodeTrackable.GUID = uuid;
-                        aRFNodeTrackable.title = trackable.Name;
+                            //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
+                            String uuid = response.result;
+
+                            uuid = uuid.Replace("\"", "");
+                            foreach (ARFEdgeLink edge in aRFNodeTrackable.portIn.connections)
+                            {
+                                edge.worldLink.UUIDTo = Guid.Parse(uuid);
+                            }
+                            foreach (ARFEdgeLink edge in aRFNodeTrackable.portOut.connections)
+                            {
+                                edge.worldLink.UUIDFrom = Guid.Parse(uuid);
+                            }
+                            aRFNodeTrackable.trackable.UUID = Guid.Parse(uuid);
+                            aRFNodeTrackable.GUID = uuid;
+                            aRFNodeTrackable.title = trackable.Name;
+                        });
                     }
-                    //POST WORLDANCHOR
+
+                    // POST WORLDANCHOR
                     if (node is ARFNodeWorldAnchor aRFNodeWorldAnchor)
                     {
-                        var posX = new List<String>();
+                        var posX = new Collection<String>();
                         posX.Add(aRFNodeWorldAnchor.GetPosition().x.ToString());
-                        var posY = new List<String>();
+                        var posY = new Collection<String>();
                         posY.Add(aRFNodeWorldAnchor.GetPosition().y.ToString());
                         WorldAnchor worldAnchor = aRFNodeWorldAnchor.worldAnchor;
                         worldAnchor.KeyvalueTags["unityAuthoringPosX"] = posX;
                         worldAnchor.KeyvalueTags["unityAuthoringPosY"] = posY;
 
-                        String uuid = WorldAnchorRequest.AddWorldAnchor(worldStorageServer, worldAnchor);
-
-                        //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
-                        uuid = uuid.Replace("\"", "");
-                        foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portIn.connections)
+                        WorldAnchorRequest.CreateWorldAnchorAsync(worldStorageServer, worldAnchor, (response) =>
                         {
-                            edge.worldLink.UUIDTo = Guid.Parse(uuid);
-                        }
-                        foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portOut.connections)
-                        {
-                            edge.worldLink.UUIDFrom = Guid.Parse(uuid);
-                        }
-                        aRFNodeWorldAnchor.worldAnchor.UUID = Guid.Parse(uuid);
-                        aRFNodeWorldAnchor.GUID = uuid;
-                        aRFNodeWorldAnchor.title = worldAnchor.Name;
+
+                            String uuid = response.result;
+                            //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
+                            uuid = uuid.Replace("\"", "");
+                            foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portIn.connections)
+                            {
+                                edge.worldLink.UUIDTo = Guid.Parse(uuid);
+                            }
+                            foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portOut.connections)
+                            {
+                                edge.worldLink.UUIDFrom = Guid.Parse(uuid);
+                            }
+                            aRFNodeWorldAnchor.worldAnchor.UUID = Guid.Parse(uuid);
+                            aRFNodeWorldAnchor.GUID = uuid;
+                            aRFNodeWorldAnchor.title = worldAnchor.Name;
+                        });
                     }
                 }
                 else
@@ -613,27 +629,31 @@ namespace ETSI.ARF.WorldStorage.UI
                     {
                         if (node is ARFNodeTrackable aRFNodeTrackable)
                         {
-                            var posX = new List<String>();
+                            var posX = new Collection<String>();
                             posX.Add(aRFNodeTrackable.GetPosition().x.ToString());
-                            var posY = new List<String>();
+                            var posY = new Collection<String>();
                             posY.Add(aRFNodeTrackable.GetPosition().y.ToString());
                             Trackable trackable = aRFNodeTrackable.trackable;
                             trackable.KeyvalueTags["unityAuthoringPosX"] = posX;
                             trackable.KeyvalueTags["unityAuthoringPosY"] = posY;
-                            TrackableRequest.UpdateTrackable(worldStorageServer, trackable);
-                            aRFNodeTrackable.title = trackable.Name;
+                            TrackableRequest.UpdateTrackableAsync(worldStorageServer, trackable, (response) =>
+                            {
+                                aRFNodeTrackable.title = trackable.Name;
+                            });
                         }
                         if (node is ARFNodeWorldAnchor aRFNodeWorldAnchor)
                         {
-                            var posX = new List<String>();
+                            var posX = new Collection<String>();
                             posX.Add(aRFNodeWorldAnchor.GetPosition().x.ToString());
-                            var posY = new List<String>();
+                            var posY = new Collection<String>();
                             posY.Add(aRFNodeWorldAnchor.GetPosition().y.ToString());
                             WorldAnchor worldAnchor = aRFNodeWorldAnchor.worldAnchor;
                             worldAnchor.KeyvalueTags["unityAuthoringPosX"] = posX;
                             worldAnchor.KeyvalueTags["unityAuthoringPosY"] = posY;
-                            WorldAnchorRequest.UpdateWorldAnchor(worldStorageServer, worldAnchor);
-                            aRFNodeWorldAnchor.title = worldAnchor.Name;
+                            WorldAnchorRequest.UpdateWorldAnchorAsync(worldStorageServer, worldAnchor, (response) =>
+                            {
+                                aRFNodeWorldAnchor.title = worldAnchor.Name;
+                            });
                         }
                     }
                 }
@@ -646,16 +666,19 @@ namespace ETSI.ARF.WorldStorage.UI
                     if (!SaveInfo.instance.linkIds.Contains(aRFEdgeLink.GUID))
                     {
                         WorldLink worldLink = aRFEdgeLink.worldLink;
-                        string uuid = WorldLinkRequest.AddWorldLink(worldStorageServer, worldLink);
-                        uuid = uuid.Replace("\"", "");
+                        WorldLinkRequest.CreateWorldLinkAsync(worldStorageServer, worldLink, (response) =>
+                        {
+                            string uuid = response.result;
+                            uuid = uuid.Replace("\"", "");
 
-                        aRFEdgeLink.worldLink.UUID = Guid.Parse(uuid);
-                        aRFEdgeLink.GUID = uuid;
+                            aRFEdgeLink.worldLink.UUID = Guid.Parse(uuid);
+                            aRFEdgeLink.GUID = uuid;
+                        });
                     }
                     else if (SaveInfo.instance.elemsToUpdate.Contains(aRFEdgeLink.GUID))
                     {
                         WorldLink worldLink = aRFEdgeLink.worldLink;
-                        WorldLinkRequest.UpdateWorldLink(worldStorageServer, worldLink);
+                        WorldLinkRequest.UpdateWorldLinkAsync(worldStorageServer, worldLink, (response) => { });
                     }
                     aRFEdgeLink.MarkSaved();
                 }
diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/GraphEditorWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/GraphEditorWindow.cs
index df394391975c93d4bf83bcdb7c17d2ce96dbd5ff..947189dc6eede7e84de1f7b2d9bdae424034029e 100644
--- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/GraphEditorWindow.cs	
+++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/GraphEditorWindow.cs	
@@ -28,6 +28,7 @@ using ETSI.ARF.WorldStorage.REST;
 using ETSI.ARF.WorldStorage.UI;
 using ETSI.ARF.WorldStorage.Editor.Graph;
 using ETSI.ARF.OpenAPI.WorldStorage;
+using System.Collections.ObjectModel;
 
 namespace ETSI.ARF.WorldStorage.Editor.Windows
 {
@@ -210,7 +211,8 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
         //BUILD UI FOR MODIYING THE WORLDANCHOR
         private void BuildWorldAnchorUI()
         {
-            if(worldAnchor != null) {
+            if (worldAnchor != null)
+            {
 
                 //
                 //HEADER
@@ -223,7 +225,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                 GUILayout.Box(anchorImage, GUILayout.Width(40), GUILayout.Height(40));
 
                 //anchor label
-                EditorGUILayout.BeginVertical(GUILayout.Height(50)); 
+                EditorGUILayout.BeginVertical(GUILayout.Height(50));
                 GUILayout.FlexibleSpace();
                 EditorGUILayout.LabelField("WORLD ANCHOR", EditorStyles.boldLabel);
                 GUILayout.FlexibleSpace();
@@ -448,9 +450,12 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                     {
                         if (SaveInfo.instance.elemsToUpdate.Contains(worldAnchor.UUID.ToString()) && EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No"))
                         {
-                            worldAnchor = WorldAnchorRequest.GetWorldAnchor(SaveInfo.instance.worldStorageServer, worldAnchor.UUID.ToString());
-                            worldAnchorNode.worldAnchor = worldAnchor;
-                            ShowWindow(worldAnchorNode);
+                            WorldAnchorRequest.GetWorldAnchorAsync(SaveInfo.instance.worldStorageServer, worldAnchor.UUID, (response) =>
+                            {
+                                worldAnchor =
+                                worldAnchorNode.worldAnchor = worldAnchor;
+                                ShowWindow(worldAnchorNode);
+                            });
                         }
                     }
                     else
@@ -470,7 +475,15 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                             {
                                 worldAnchorSize.Add(0);
                             }
-                            worldAnchor = new WorldAnchor(Guid.NewGuid(), "DefaultWorldAnchor", Guid.Parse(SaveInfo.instance.worldStorageUser.UUID), localCRS, UnitSystem.CM, worldAnchorSize, new Dictionary<string, List<string>>());
+                            worldAnchor = new WorldAnchor("DefaultWorldAnchor")
+                            {
+                                UUID = Guid.NewGuid(),
+                                CreatorUUID = Guid.Parse(SaveInfo.instance.worldStorageUser.UUID),
+                                LocalCRS = localCRS,
+                                Unit = UnitSystem.CM,
+                                WorldAnchorSize = worldAnchorSize,
+                                KeyvalueTags = new KeyvalueTagList()
+                            };
                             worldAnchorNode.worldAnchor = worldAnchor;
                             ShowWindow(worldAnchorNode);
                         }
@@ -485,39 +498,44 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                     {
                         if (SaveInfo.instance.elemsToUpdate.Contains(worldAnchor.UUID.ToString()))
                         {
-                            WorldAnchorRequest.UpdateWorldAnchor(SaveInfo.instance.worldStorageServer, worldAnchor);
-                            SaveInfo.instance.elemsToUpdate.Remove(worldAnchor.UUID.ToString());
+                            WorldAnchorRequest.UpdateWorldAnchorAsync(SaveInfo.instance.worldStorageServer, worldAnchor, (response) =>
+                            {
+                                SaveInfo.instance.elemsToUpdate.Remove(worldAnchor.UUID.ToString());
+                            });
                         }
                     }
                     else
                     {
-                        var posX = new List<String>();
+                        var posX = new Collection<String>();
                         posX.Add(worldAnchorNode.GetPosition().x.ToString());
-                        var posY = new List<String>();
+                        var posY = new Collection<String>();
                         posY.Add(worldAnchorNode.GetPosition().y.ToString());
                         WorldAnchor worldAnchor = worldAnchorNode.worldAnchor;
                         worldAnchor.KeyvalueTags["unityAuthoringPosX"] = posX;
                         worldAnchor.KeyvalueTags["unityAuthoringPosY"] = posY;
 
-                        String uuid = WorldAnchorRequest.AddWorldAnchor(SaveInfo.instance.worldStorageServer, worldAnchor);
-
-                        //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
-                        uuid = uuid.Replace("\"", "");
-                        foreach (ARFEdgeLink edge in worldAnchorNode.portIn.connections)
-                        {
-                        edge.worldLink.UUIDTo = Guid.Parse(uuid);
-                        }
-                        foreach (ARFEdgeLink edge in worldAnchorNode.portOut.connections)
+                        WorldAnchorRequest.CreateWorldAnchorAsync(SaveInfo.instance.worldStorageServer, worldAnchor, (response) =>
                         {
-                            edge.worldLink.UUIDFrom = Guid.Parse(uuid);
-                        }
-                        worldAnchorNode.worldAnchor.UUID = Guid.Parse(uuid);
-                        worldAnchorNode.GUID = uuid;
-                        worldAnchorNode.title = worldAnchor.Name;
+                            String uuid = response.result;
 
-                        //Add the newly saved World Anchor to the SaveInfo singleton
-                        Rect trackPos = new(worldAnchorNode.GetPosition().x, worldAnchorNode.GetPosition().y, 135, 77);
-                        SaveInfo.instance.nodePositions[uuid] = trackPos;
+                            //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
+                            uuid = uuid.Replace("\"", "");
+                            foreach (ARFEdgeLink edge in worldAnchorNode.portIn.connections)
+                            {
+                                edge.worldLink.UUIDTo = Guid.Parse(uuid);
+                            }
+                            foreach (ARFEdgeLink edge in worldAnchorNode.portOut.connections)
+                            {
+                                edge.worldLink.UUIDFrom = Guid.Parse(uuid);
+                            }
+                            worldAnchorNode.worldAnchor.UUID = Guid.Parse(uuid);
+                            worldAnchorNode.GUID = uuid;
+                            worldAnchorNode.title = worldAnchor.Name;
+
+                            //Add the newly saved World Anchor to the SaveInfo singleton
+                            Rect trackPos = new(worldAnchorNode.GetPosition().x, worldAnchorNode.GetPosition().y, 135, 77);
+                            SaveInfo.instance.nodePositions[uuid] = trackPos;
+                        });
                     }
                     worldAnchorNode.MarkSaved();
                 }
@@ -660,18 +678,18 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                 EditorGUILayout.EndHorizontal();
                 EditorGUILayout.BeginHorizontal();
                 EditorGUILayout.LabelField("Format ", GUILayout.Width(50));
-                trackable.TrackableEncodingInformation.DataFormat = (EncodingInformationStructure.DataFormatEnum)EditorGUILayout.EnumPopup(trackable.TrackableEncodingInformation.DataFormat);
+                trackable.TrackableEncodingInformation.DataFormat = (EncodingInformationStructureDataFormat)EditorGUILayout.EnumPopup(trackable.TrackableEncodingInformation.DataFormat);
                 EditorGUILayout.LabelField("Version ", GUILayout.Width(50));
                 float floatVersion;
-                if (trackable.TrackableEncodingInformation._Version != null)
+                if (trackable.TrackableEncodingInformation.Version != null)
                 {
-                    floatVersion = EditorGUILayout.DelayedFloatField(float.Parse(trackable.TrackableEncodingInformation._Version.Replace(".",",")));
+                    floatVersion = EditorGUILayout.DelayedFloatField(float.Parse(trackable.TrackableEncodingInformation.Version.Replace(".", ",")));
                 }
                 else
                 {
                     floatVersion = EditorGUILayout.DelayedFloatField(0);
                 }
-                trackable.TrackableEncodingInformation._Version = floatVersion.ToString();
+                trackable.TrackableEncodingInformation.Version = floatVersion.ToString();
                 EditorGUILayout.EndHorizontal();
 
                 /*//trackable payload
@@ -873,9 +891,12 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                     {
                         if (SaveInfo.instance.elemsToUpdate.Contains(trackable.UUID.ToString()) && EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No"))
                         {
-                            trackable = TrackableRequest.GetTrackable(SaveInfo.instance.worldStorageServer, trackable.UUID.ToString());
-                            trackableNode.trackable = trackable;
-                            ShowWindow(trackableNode);
+                            TrackableRequest.GetTrackableAsync(SaveInfo.instance.worldStorageServer, trackable.UUID, (response) =>
+                            {
+                                trackable = response.result;
+                                trackableNode.trackable = trackable;
+                                ShowWindow(trackableNode);
+                            });
                         }
                     }
                     else
@@ -883,22 +904,37 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                         if (EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No"))
                         {
                             //generate the Trackables's attributes
-                            EncodingInformationStructure trackableEncodingInformation = new EncodingInformationStructure(EncodingInformationStructure.DataFormatEnum.OTHER, "0");
+                            EncodingInformationStructure trackableEncodingInformation = new EncodingInformationStructure()
+                            {
+                                DataFormat = EncodingInformationStructureDataFormat.OTHER,
+                                Version = "0"
+                            };
 
-                            List<float> localCRS = new();
+                            Transform3D localCRS = new Transform3D();
                             for (int i = 0; i < 15; i++)
                             {
                                 localCRS.Add(0);
                             }
                             localCRS.Add(1);
 
-                            List<double> trackableSize = new();
+                            Size trackableSize = new Size();
                             for (int i = 0; i < 3; i++)
                             {
                                 trackableSize.Add(0);
                             }
 
-                            Trackable trackable = new Trackable(Guid.NewGuid(), "Defaulttrackable", Guid.Parse(SaveInfo.instance.worldStorageUser.UUID), TrackableType.OTHER, trackableEncodingInformation, new byte[64], localCRS, UnitSystem.CM, trackableSize, new Dictionary<string, List<string>>());
+                            Trackable trackable = new Trackable("DefaultTrackable")
+                            {
+                                UUID = Guid.NewGuid(),
+                                CreatorUUID = Guid.Parse(SaveInfo.instance.worldStorageUser.UUID),
+                                TrackableType = TrackableType.OTHER,
+                                TrackableEncodingInformation = trackableEncodingInformation,
+                                TrackablePayload = new byte[64],
+                                LocalCRS = localCRS,
+                                Unit = UnitSystem.CM,
+                                TrackableSize = trackableSize,
+                                KeyvalueTags = new KeyvalueTagList()
+                            };
                             trackableNode.trackable = trackable;
                             ShowWindow(trackableNode);
                         }
@@ -913,38 +949,43 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                     {
                         if (SaveInfo.instance.elemsToUpdate.Contains(trackable.UUID.ToString()))
                         {
-                            TrackableRequest.UpdateTrackable(SaveInfo.instance.worldStorageServer, trackable);
-                            SaveInfo.instance.elemsToUpdate.Remove(trackable.UUID.ToString());
+                            TrackableRequest.UpdateTrackableAsync(SaveInfo.instance.worldStorageServer, trackable, (response) =>
+                            {
+                                SaveInfo.instance.elemsToUpdate.Remove(trackable.UUID.ToString());
+                            });
                         }
                     }
                     else
                     {
-                        var posX = new List<String>();
+                        var posX = new Collection<String>();
                         posX.Add(trackableNode.GetPosition().x.ToString());
-                        var posY = new List<String>();
+                        var posY = new Collection<String>();
                         posY.Add(trackableNode.GetPosition().y.ToString());
                         Trackable trackable = trackableNode.trackable;
                         trackable.KeyvalueTags["unityAuthoringPosX"] = posX;
                         trackable.KeyvalueTags["unityAuthoringPosY"] = posY;
-                        String uuid = TrackableRequest.AddTrackable(SaveInfo.instance.worldStorageServer, trackable);
-
-                        //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
-                        uuid = uuid.Replace("\"", "");
-                        foreach (ARFEdgeLink edge in trackableNode.portIn.connections)
+                        TrackableRequest.CreateTrackableAsync(SaveInfo.instance.worldStorageServer, trackable, (response) =>
                         {
-                            edge.worldLink.UUIDTo = Guid.Parse(uuid);
-                        }
-                        foreach (ARFEdgeLink edge in trackableNode.portOut.connections)
-                        {
-                            edge.worldLink.UUIDFrom = Guid.Parse(uuid);
-                        }
-                        trackableNode.trackable.UUID = Guid.Parse(uuid);
-                        trackableNode.GUID = uuid;
-                        trackableNode.title = trackable.Name;
+                            String uuid = response.result;
 
-                        //Add the newly saved Trackable to the SaveInfo singleton
-                        Rect trackPos = new(trackableNode.GetPosition().x, trackableNode.GetPosition().y, 135, 77);
-                        SaveInfo.instance.nodePositions[uuid] = trackPos;
+                            //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
+                            uuid = uuid.Replace("\"", "");
+                            foreach (ARFEdgeLink edge in trackableNode.portIn.connections)
+                            {
+                                edge.worldLink.UUIDTo = Guid.Parse(uuid);
+                            }
+                            foreach (ARFEdgeLink edge in trackableNode.portOut.connections)
+                            {
+                                edge.worldLink.UUIDFrom = Guid.Parse(uuid);
+                            }
+                            trackableNode.trackable.UUID = Guid.Parse(uuid);
+                            trackableNode.GUID = uuid;
+                            trackableNode.title = trackable.Name;
+
+                            //Add the newly saved Trackable to the SaveInfo singleton
+                            Rect trackPos = new(trackableNode.GetPosition().x, trackableNode.GetPosition().y, 135, 77);
+                            SaveInfo.instance.nodePositions[uuid] = trackPos;
+                        });
                     }
                     trackableNode.MarkSaved();
                 }
@@ -1138,17 +1179,19 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                     {
                         if (SaveInfo.instance.elemsToUpdate.Contains(worldLink.UUID.ToString()) && EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No"))
                         {
-                            worldLink = WorldLinkRequest.GetWorldLink(SaveInfo.instance.worldStorageServer, worldLink.UUID.ToString());
+                            WorldLinkRequest.GetWorldLinkAsync(SaveInfo.instance.worldStorageServer, worldLink.UUID, (response) =>
+                        {
+                            worldLink = response.result;
                             worldLinkEdge.worldLink = worldLink;
                             ShowWindow(worldLinkEdge);
+                        });
                         }
                     }
                     else
                     {
                         if (EditorUtility.DisplayDialog("Reset elements", "Are you sure you want to lose all your changes ?", "Yes", "No"))
                         {
-
-                            List<float> transform = new List<float>();
+                            Transform3D transform = new Transform3D();
                             for (int i = 0; i < 15; i++)
                             {
                                 transform.Add(0);
@@ -1166,26 +1209,31 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                 GUI.backgroundColor = Color.green;
                 if (GUILayout.Button("Save"))
                 {
-                        //if one of the connected elements is not in the server, you can't save the link
+                    //if one of the connected elements is not in the server, you can't save the link
                     if ((SaveInfo.instance.nodePositions.ContainsKey(worldLink.UUIDTo.ToString()) && SaveInfo.instance.nodePositions.ContainsKey(worldLink.UUIDFrom.ToString())))
-                    { 
+                    {
                         if (SaveInfo.instance.linkIds.Contains(worldLink.UUID.ToString()))
                         {
                             if (SaveInfo.instance.elemsToUpdate.Contains(worldLink.UUID.ToString()))
                             {
-                                WorldLinkRequest.UpdateWorldLink(SaveInfo.instance.worldStorageServer, worldLink);
-                                SaveInfo.instance.elemsToUpdate.Remove(worldLink.UUID.ToString());
+                                WorldLinkRequest.UpdateWorldLinkAsync(SaveInfo.instance.worldStorageServer, worldLink, (response) =>
+                                {
+                                    SaveInfo.instance.elemsToUpdate.Remove(worldLink.UUID.ToString());
+                                });
                             }
                         }
                         else
                         {
-                            String uuid = WorldLinkRequest.AddWorldLink(SaveInfo.instance.worldStorageServer, worldLink);
-
-                            //Add the newly saved WorldLink to the SaveInfo singleton
-                            uuid = uuid.Replace("\"", "");
-                            worldLink.UUID = Guid.Parse(uuid);
-                            worldLinkEdge.GUID = uuid;
-                            SaveInfo.instance.linkIds.Add(uuid);
+                            WorldLinkRequest.CreateWorldLinkAsync(SaveInfo.instance.worldStorageServer, worldLink, (response) =>
+                            {
+                                String uuid = response.result;
+
+                                //Add the newly saved WorldLink to the SaveInfo singleton
+                                uuid = uuid.Replace("\"", "");
+                                worldLink.UUID = Guid.Parse(uuid);
+                                worldLinkEdge.GUID = uuid;
+                                SaveInfo.instance.linkIds.Add(uuid);
+                            });
                         }
                         worldLinkEdge.MarkSaved();
                     }
@@ -1205,10 +1253,10 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
         public static void DrawUILine(Color color, int thickness = 2, int padding = 10)
         {
             Rect r = EditorGUILayout.GetControlRect(GUILayout.Height(padding + thickness));
-                r.height = thickness;
-            r.y += padding/2;
-            r.x-=2;
-            r.width +=6;
+            r.height = thickness;
+            r.y += padding / 2;
+            r.x -= 2;
+            r.width += 6;
             EditorGUI.DrawRect(r, color);
         }
     }
diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs
index 09765371b2cac0b3ee58243fc6f91e352c86aa7f..2d225394d97b4bab2890232657d512ad955cabb7 100644
--- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs	
+++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs	
@@ -15,15 +15,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //
-// Last change: July 2022
+// Last change: June 2024
 //
 
-#define USING_OPENAPI_GENERATOR // alt. is Swagger
 #define isDEBUG
 
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 
 using UnityEngine;
 using UnityEditor;
@@ -176,33 +176,39 @@ namespace ETSI.ARF.WorldStorage.UI
                 if (!string.IsNullOrEmpty(UUID) && UUID != "0" && UUID != System.Guid.Empty.ToString())
                 {
                     Trackable obj = GenerateTrackable();
-                    UUID = TrackableRequest.UpdateTrackable(worldStorageServer, obj);
-                    UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
+                    TrackableRequest.UpdateTrackableAsync(worldStorageServer, obj, (response) =>
+                    {
+                        UUID = response.result;
+                        UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
+
+                        if (WorldStorageWindow.WorldStorageWindowSingleton != null)
+                        {
+                            WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables();
+                            WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                        }
+                        Close();
+                    });
                 }
-                if (WorldStorageWindow.WorldStorageWindowSingleton != null)
-                {
-                    WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables();
-                    WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
-                }
-                Close();
             }
 
             GUI.backgroundColor = WorldStorageWindow.arfColors[3];
             if (GUILayout.Button("Delete"))
             {
                 Debug.Log("Delete Trackable");
-                TrackableRequest.DeleteTrackable(worldStorageServer, UUID);
-                UUID = System.Guid.Empty.ToString();
-                customName = "Warning: Object deleted !";
-                creatorUUID = System.Guid.Empty.ToString();
-                type = TrackableType.OTHER;
-                unit = UnitSystem.CM;
-                if (WorldStorageWindow.WorldStorageWindowSingleton != null)
+                TrackableRequest.DeleteTrackableAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
                 {
-                    WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables();
-                    WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
-                }
-                Close();
+                    UUID = System.Guid.Empty.ToString();
+                    customName = "Warning: Object deleted !";
+                    creatorUUID = System.Guid.Empty.ToString();
+                    type = TrackableType.OTHER;
+                    unit = UnitSystem.CM;
+                    if (WorldStorageWindow.WorldStorageWindowSingleton != null)
+                    {
+                        WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables();
+                        WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                    }
+                    Close();
+                });
             }
             GUI.backgroundColor = ori;
 
@@ -251,35 +257,38 @@ namespace ETSI.ARF.WorldStorage.UI
 
         private void GetTrackableParams()
         {
-            Trackable obj = TrackableRequest.GetTrackable(worldStorageServer, UUID);
-            customName = obj.Name;
-            creatorUUID = obj.CreatorUUID.ToString();
-            type = obj.TrackableType;
-            unit = obj.Unit;
-            if (obj.TrackableSize.Count == 3)
+            TrackableRequest.GetTrackableAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
             {
-                trackableSize = new Vector3((float)obj.TrackableSize[0], (float)obj.TrackableSize[1], (float)obj.TrackableSize[2]);
-            }
-            else trackableSize = Vector3.zero;
+                Trackable obj = response.result;
+                customName = obj.Name;
+                creatorUUID = obj.CreatorUUID.ToString();
+                type = obj.TrackableType;
+                unit = obj.Unit;
+                if (obj.TrackableSize.Count == 3)
+                {
+                    trackableSize = new Vector3((float)obj.TrackableSize[0], (float)obj.TrackableSize[1], (float)obj.TrackableSize[2]);
+                }
+                else trackableSize = Vector3.zero;
 
-            if (obj.LocalCRS.Count == 16)
-            {
-                Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(obj.LocalCRS);
-                localCRS_pos = localCRS.GetPosition();
-                localCRS_rot = localCRS.rotation.eulerAngles;
-            }
-            else
-            {
-                localCRS_pos = Vector3.zero;
-                localCRS_rot = Vector3.zero;
-            }
+                if (obj.LocalCRS.Count == 16)
+                {
+                    Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(obj.LocalCRS);
+                    localCRS_pos = localCRS.GetPosition();
+                    localCRS_rot = localCRS.rotation.eulerAngles;
+                }
+                else
+                {
+                    localCRS_pos = Vector3.zero;
+                    localCRS_rot = Vector3.zero;
+                }
 
-            // Read a key value (demo)
-            var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags);
-            key1 = first.Item1;
-            value1 = first.Item2;
+                // Read a key value (demo)
+                var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags);
+                key1 = first.Item1;
+                value1 = first.Item2;
 
-            this.Repaint();
+                this.Repaint();
+            });
         }
 
         public void AddTrackable()
@@ -289,10 +298,13 @@ namespace ETSI.ARF.WorldStorage.UI
             customName = "Default Trackable";
 
             Trackable obj = GenerateTrackable();
-            UUID = TrackableRequest.AddTrackable(worldStorageServer, obj);
-            UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
-            WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables();
-            WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+            TrackableRequest.CreateTrackableAsync(worldStorageServer, obj, (response) =>
+            {
+                UUID = response.result;
+                UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
+                WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables();
+                WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+            });
         }
 
         public Trackable GenerateTrackable()
@@ -317,7 +329,7 @@ namespace ETSI.ARF.WorldStorage.UI
 
             // Create a key value (one from demo)
             keyValueTags.Clear();
-            keyValueTags.Add(key1, new List<string> { value1 });
+            keyValueTags.Add(key1, new Collection<string> { value1 });
 
             System.Guid _uuid = System.Guid.Parse(UUID);
             System.Guid _creator = System.Guid.Parse(worldStorageUser.UUID);
@@ -334,10 +346,10 @@ namespace ETSI.ARF.WorldStorage.UI
                 KeyvalueTags = keyValueTags
             };
 
-            var posX = new List<String>();
+            var posX = new Collection<String>();
             posX.Add(nodePosX.ToString());
             t.KeyvalueTags["unityAuthoringPosX"] = posX;
-            var posY = new List<String>();
+            var posY = new Collection<String>();
             posY.Add(nodePosY.ToString());
             t.KeyvalueTags["unityAuthoringPosY"] = posY;
 
diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs
index 51762c666e68d79d01ce94396485a4891d981a5a..cdaf1319829572bb9032d37220506744e405705a 100644
--- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs	
+++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs	
@@ -23,6 +23,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 
 using UnityEngine;
 using UnityEditor;
@@ -173,10 +174,16 @@ namespace ETSI.ARF.WorldStorage.UI
                 if (!string.IsNullOrEmpty(UUID) && UUID != "0" && UUID != System.Guid.Empty.ToString())
                 {
                     WorldAnchor obj = GenerateWorldAnchor();
-                    UUID = WorldAnchorRequest.UpdateWorldAnchor(worldStorageServer, obj);
-                    UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
-                    WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors();
-                    WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                    WorldAnchorRequest.UpdateWorldAnchorAsync(worldStorageServer, obj, (response) =>
+                    {
+                        UUID = response.result;
+                        UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
+                        if (WorldStorageWindow.WorldStorageWindowSingleton != null)
+                        {
+                            WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors();
+                            WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                        }
+                    });
                 }
                 Close();
             }
@@ -185,17 +192,19 @@ namespace ETSI.ARF.WorldStorage.UI
             if (GUILayout.Button("Delete"))
             {
                 Debug.Log("Delete World Anchor");
-                WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, UUID);
-                UUID = System.Guid.Empty.ToString();
-                customName = "Warning: Object deleted !";
-                creatorUUID = System.Guid.Empty.ToString();
-                unit = UnitSystem.CM;
-                if (WorldStorageWindow.WorldStorageWindowSingleton != null)
+                WorldAnchorRequest.DeleteWorldAnchorAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
                 {
-                    WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors();
-                    WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
-                }
-                Close();
+                    UUID = System.Guid.Empty.ToString();
+                    customName = "Warning: Object deleted !";
+                    creatorUUID = System.Guid.Empty.ToString();
+                    unit = UnitSystem.CM;
+                    if (WorldStorageWindow.WorldStorageWindowSingleton != null)
+                    {
+                        WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors();
+                        WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                    }
+                    Close();
+                });
             }
             GUI.backgroundColor = ori;
 
@@ -232,34 +241,37 @@ namespace ETSI.ARF.WorldStorage.UI
 
         private void GetWorldAnchorParams()
         {
-            WorldAnchor obj = WorldAnchorRequest.GetWorldAnchor(worldStorageServer, UUID);
-            customName = obj.Name;
-            creatorUUID = obj.CreatorUUID.ToString();
-            unit = obj.Unit;
-            if (obj.WorldAnchorSize.Count == 3)
+            WorldAnchorRequest.GetWorldAnchorAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
             {
-                worldAnchorSize = new Vector3((float)obj.WorldAnchorSize[0], (float)obj.WorldAnchorSize[1], (float)obj.WorldAnchorSize[2]);
-            }
-            else worldAnchorSize = Vector3.zero;
+                WorldAnchor obj = response.result;
+                customName = obj.Name;
+                creatorUUID = obj.CreatorUUID.ToString();
+                unit = obj.Unit;
+                if (obj.WorldAnchorSize.Count == 3)
+                {
+                    worldAnchorSize = new Vector3((float)obj.WorldAnchorSize[0], (float)obj.WorldAnchorSize[1], (float)obj.WorldAnchorSize[2]);
+                }
+                else worldAnchorSize = Vector3.zero;
 
-            if (obj.LocalCRS.Count == 16)
-            {
-                Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(obj.LocalCRS);
-                localCRS_pos = localCRS.GetPosition();
-                localCRS_rot = localCRS.rotation.eulerAngles;
-            }
-            else
-            {
-                localCRS_pos = Vector3.zero;
-                localCRS_rot = Vector3.zero;
-            }
+                if (obj.LocalCRS.Count == 16)
+                {
+                    Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(obj.LocalCRS);
+                    localCRS_pos = localCRS.GetPosition();
+                    localCRS_rot = localCRS.rotation.eulerAngles;
+                }
+                else
+                {
+                    localCRS_pos = Vector3.zero;
+                    localCRS_rot = Vector3.zero;
+                }
 
-            // Read a key value (demo)
-            var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags);
-            key1 = first.Item1;
-            value1 = first.Item2;
+                // Read a key value (demo)
+                var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags);
+                key1 = first.Item1;
+                value1 = first.Item2;
 
-            this.Repaint();
+                this.Repaint();
+            });
         }
 
         public void AddAnchor()
@@ -269,10 +281,13 @@ namespace ETSI.ARF.WorldStorage.UI
             customName = "Default Anchor";
 
             WorldAnchor obj = GenerateWorldAnchor();
-            UUID = WorldAnchorRequest.AddWorldAnchor(worldStorageServer, obj);
-            UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
-            WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors();
-            WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+            WorldAnchorRequest.CreateWorldAnchorAsync(worldStorageServer, obj, (response) =>
+            {
+                UUID = response.result;
+                UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
+                WorldStorageWindow.WorldStorageWindowSingleton.GetWorldAnchors();
+                WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+            });
         }
 
         public WorldAnchor GenerateWorldAnchor()
@@ -289,10 +304,10 @@ namespace ETSI.ARF.WorldStorage.UI
 
             // Create a key value (one from demo)
             keyValueTags.Clear();
-            keyValueTags.Add(key1, new List<string> { value1 });
+            keyValueTags.Add(key1, new Collection<string> { value1 });
 
-            System.Guid _uuid = System.Guid.Parse(UUID);
-            System.Guid _creator = System.Guid.Parse(worldStorageUser.UUID);
+            Guid _uuid = Guid.Parse(UUID);
+            Guid _creator = Guid.Parse(worldStorageUser.UUID);
             WorldAnchor t = new WorldAnchor(customName)
             {
                 UUID = _uuid,
@@ -303,10 +318,10 @@ namespace ETSI.ARF.WorldStorage.UI
                 KeyvalueTags = keyValueTags 
             };
 
-            var posX = new List<String>();
+            var posX = new Collection<String>();
             posX.Add(nodePosX.ToString());
             t.KeyvalueTags["unityAuthoringPosX"] = posX;
-            var posY = new List<String>();
+            var posY = new Collection<String>();
             posY.Add(nodePosY.ToString());
             t.KeyvalueTags["unityAuthoringPosY"] = posY;
 
diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldGraphWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldGraphWindow.cs
index 6934227c95bdcd54f4de0074feff722ceceed96a..c5b89708c1e7ca13cdcb367d051c24a91a8810b1 100644
--- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldGraphWindow.cs	
+++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldGraphWindow.cs	
@@ -74,7 +74,8 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
         {
             if (worldStorageServer != null)
             {
-                try { 
+                try
+                {
                     if (SaveInfo.instance.nodePositions == null)
                     {
                         SaveInfo.instance.InitNodePos(worldStorageServer, worldStorageUser);
@@ -126,7 +127,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
             {
                 GraphEditorWindow.ResetWindow();
 
-                if((myGraph != null))
+                if ((myGraph != null))
                 {
                     if (myGraph.ServerAndLocalDifferent() && EditorUtility.DisplayDialog("Saving node positions", "The World Graph has been modified. \nWould you like to push the modifications to the server ?", "Yes", "No"))
                     {
@@ -134,7 +135,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                     }
                     rootVisualElement.Remove(myGraph);
                 }
-                if(worldStorageServer != null)
+                if (worldStorageServer != null)
                 {
                     try
                     {
@@ -151,7 +152,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
                         Debug.Log(e.ToString());
                     }
                 }
-                else 
+                else
                 {
                     myGraph = null;
                 }
@@ -201,7 +202,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
         {
             rootVisualElement.Remove(myGraph);
             node.DisconnectAllPorts(myGraph);
-            myGraph.DeleteElements(new List<GraphElement>{ node });
+            myGraph.DeleteElements(new List<GraphElement> { node });
             rootVisualElement.Add(myGraph);
         }
 
@@ -219,7 +220,7 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
         public Dictionary<String, Rect> nodePositions;
         public List<String> linkIds;
 
-        public Dictionary<String,Type> elemsToRemove;
+        public Dictionary<String, Type> elemsToRemove;
         public List<String> elemsToUpdate;
 
         //keep the info of the graph reframe
@@ -234,42 +235,55 @@ namespace ETSI.ARF.WorldStorage.Editor.Windows
             worldStorageUser = user;
 
             instance.nodePositions = new Dictionary<string, Rect>();
-            foreach (Trackable track in TrackableRequest.GetAllTrackables(worldStorageServer))
+            TrackableRequest.GetTrackablesAsync(worldStorageServer, (response) =>
             {
-                if (track.KeyvalueTags.ContainsKey("unityAuthoringPosX") && track.KeyvalueTags.ContainsKey("unityAuthoringPosY"))
-                {
-                    var posX = RoundToNearestHalf(float.Parse(track.KeyvalueTags["unityAuthoringPosX"][0]));
-                    var posY = RoundToNearestHalf(float.Parse(track.KeyvalueTags["unityAuthoringPosY"][0]));
-                    Rect trackPos = new(posX, posY, 135, 77);
-                    instance.nodePositions[track.UUID.ToString()] = trackPos;
-                }
-                else
+                List<Trackable> list = response.result;
+                foreach (Trackable track in list)
                 {
-                    Rect trackPos = new(0, 0, 135, 77);
-                    instance.nodePositions[track.UUID.ToString()] = trackPos;
+                    if (track.KeyvalueTags.ContainsKey("unityAuthoringPosX") && track.KeyvalueTags.ContainsKey("unityAuthoringPosY"))
+                    {
+                        var posX = RoundToNearestHalf(float.Parse(track.KeyvalueTags["unityAuthoringPosX"][0]));
+                        var posY = RoundToNearestHalf(float.Parse(track.KeyvalueTags["unityAuthoringPosY"][0]));
+                        Rect trackPos = new(posX, posY, 135, 77);
+                        instance.nodePositions[track.UUID.ToString()] = trackPos;
+                    }
+                    else
+                    {
+                        Rect trackPos = new(0, 0, 135, 77);
+                        instance.nodePositions[track.UUID.ToString()] = trackPos;
+                    }
                 }
-            }
-            foreach (WorldAnchor wa in WorldAnchorRequest.GetAllWorldAnchors(worldStorageServer))
+            });
+
+            WorldAnchorRequest.GetWorldAnchorsAsync(worldStorageServer, (response) =>
             {
-                if (wa.KeyvalueTags.ContainsKey("unityAuthoringPosX") && wa.KeyvalueTags.ContainsKey("unityAuthoringPosY"))
+                List<WorldAnchor> list = response.result;
+                foreach (WorldAnchor wa in list)
                 {
-                    var posX = RoundToNearestHalf(float.Parse(wa.KeyvalueTags["unityAuthoringPosX"][0]));
-                    var posY = RoundToNearestHalf(float.Parse(wa.KeyvalueTags["unityAuthoringPosY"][0]));
-                    Rect waPos = new(posX, posY, 135, 77);
-                    instance.nodePositions[wa.UUID.ToString()] = waPos;
-                }
-                else
-                {
-                    Rect trackPos = new(0, 0, 135, 77);
-                    instance.nodePositions[wa.UUID.ToString()] = trackPos;
+                    if (wa.KeyvalueTags.ContainsKey("unityAuthoringPosX") && wa.KeyvalueTags.ContainsKey("unityAuthoringPosY"))
+                    {
+                        var posX = RoundToNearestHalf(float.Parse(wa.KeyvalueTags["unityAuthoringPosX"][0]));
+                        var posY = RoundToNearestHalf(float.Parse(wa.KeyvalueTags["unityAuthoringPosY"][0]));
+                        Rect waPos = new(posX, posY, 135, 77);
+                        instance.nodePositions[wa.UUID.ToString()] = waPos;
+                    }
+                    else
+                    {
+                        Rect trackPos = new(0, 0, 135, 77);
+                        instance.nodePositions[wa.UUID.ToString()] = trackPos;
+                    }
                 }
-            }
+            });
 
             instance.linkIds = new List<string>();
-            foreach (WorldLink link in WorldLinkRequest.GetAllWorldLinks(worldStorageServer))
+            WorldLinkRequest.GetWorldLinksAsync(worldStorageServer, (response) =>
             {
-                instance.linkIds.Add(link.UUID.ToString());
-            }
+                List<WorldLink> list = response.result;
+                foreach (WorldLink link in list)
+                {
+                    instance.linkIds.Add(link.UUID.ToString());
+                }
+            });
 
             instance.elemsToRemove = new Dictionary<string, Type>();
             instance.elemsToUpdate = new List<string>();
diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs
index 45dbb8674bf0736ec54d78ed67432406434521ac..711564401e75b27e5194ff1a55a6d1cdabedb027 100644
--- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs	
+++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs	
@@ -20,8 +20,10 @@
 
 #define isDEBUG
 
+using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 
 using UnityEngine;
 using UnityEditor;
@@ -67,7 +69,7 @@ namespace ETSI.ARF.WorldStorage.UI
         Vector3 transf_pos;
         Vector3 transf_rot;
 
-        [SerializeField] Dictionary<string, List<string>> keyValueTags = new Dictionary<string, List<string>>();
+        [SerializeField] KeyvalueTagList keyValueTags = new KeyvalueTagList();
         string key1 = "";
         string value1 = "";
 
@@ -165,68 +167,80 @@ namespace ETSI.ARF.WorldStorage.UI
         private void GetElementFROM()
         {
             // Trackable?
-            try
+            TrackableRequest.GetTrackableAsync(worldStorageServer, Guid.Parse(FROM.UUID), (response) =>
             {
-                Trackable result = TrackableRequest.GetTrackable(worldStorageServer, FROM.UUID);
-                FROM.name = result.Name;
-                FROM.type = TypeWorldStorage.TRACKABLE;
-
-                Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(result.LocalCRS);
-                FROM.pos = localCRS.GetPosition();
-            }
-            catch
-            {
-                // Anchor?
                 try
                 {
-                    WorldAnchor result = WorldAnchorRequest.GetWorldAnchor(worldStorageServer, FROM.UUID);
+                    Trackable result = response.result;
                     FROM.name = result.Name;
-                    FROM.type = TypeWorldStorage.ANCHOR;
+                    FROM.type = TypeWorldStorage.TRACKABLE;
 
-                    Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(result.LocalCRS);
+                    Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(result.LocalCRS);
                     FROM.pos = localCRS.GetPosition();
                 }
                 catch
                 {
-                    // Nothing!
-                    FROM.name = "";
-                    FROM.type = TypeWorldStorage.UNKNOWN;
+                    // Anchor?
+                    WorldAnchorRequest.GetWorldAnchorAsync(worldStorageServer, Guid.Parse(FROM.UUID), (response) =>
+                    {
+                        try
+                        {
+                            WorldAnchor result = response.result;
+                            FROM.name = result.Name;
+                            FROM.type = TypeWorldStorage.ANCHOR;
+
+                            Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(result.LocalCRS);
+                            FROM.pos = localCRS.GetPosition();
+                        }
+                        catch
+                        {
+                            // Nothing!
+                            FROM.name = "";
+                            FROM.type = TypeWorldStorage.UNKNOWN;
+                        }
+                    });
                 }
-            }
+            });
         }
 
         private void GetElementTO()
         {
             // Trackable?
-            try
+            TrackableRequest.GetTrackableAsync(worldStorageServer, Guid.Parse(TO.UUID), (response) =>
             {
-                Trackable result = TrackableRequest.GetTrackable(worldStorageServer, TO.UUID);
-                TO.name = result.Name;
-                TO.type = TypeWorldStorage.TRACKABLE;
-
-                Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(result.LocalCRS);
-                TO.pos = localCRS.GetPosition();
-            }
-            catch
-            {
-                // Anchor?
                 try
                 {
-                    WorldAnchor result = WorldAnchorRequest.GetWorldAnchor(worldStorageServer, TO.UUID);
+                    Trackable result = response.result;
                     TO.name = result.Name;
-                    TO.type = TypeWorldStorage.ANCHOR;
+                    TO.type = TypeWorldStorage.TRACKABLE;
 
-                    Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(result.LocalCRS);
+                    Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(result.LocalCRS);
                     TO.pos = localCRS.GetPosition();
                 }
                 catch
                 {
-                    // Nothing!
-                    TO.UUID = System.Guid.Empty.ToString();
-                    TO.name = "";
-                    TO.type = TypeWorldStorage.UNKNOWN;
+                    // Anchor?
+                    WorldAnchorRequest.GetWorldAnchorAsync(worldStorageServer, Guid.Parse(TO.UUID), (response) =>
+                    {
+                        try
+                        {
+                            WorldAnchor result = response.result;
+                            TO.name = result.Name;
+                            TO.type = TypeWorldStorage.ANCHOR;
+
+                            Matrix4x4 localCRS = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(result.LocalCRS);
+                            TO.pos = localCRS.GetPosition();
+                        }
+                        catch
+                        {
+                            // Nothing!
+                            TO.UUID = System.Guid.Empty.ToString();
+                            TO.name = "";
+                            TO.type = TypeWorldStorage.UNKNOWN;
+                        }
+                    });
                 }
-            }
+            });
         }
 
         void DrawAnchorStuffs()
@@ -270,10 +284,13 @@ namespace ETSI.ARF.WorldStorage.UI
                 if (!string.IsNullOrEmpty(UUID) && UUID != "0" && UUID != System.Guid.Empty.ToString())
                 {
                     WorldLink obj = GenerateWorldLink();
-                    UUID = WorldLinkRequest.UpdateWorldLink(worldStorageServer, obj);
-                    UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
-                    WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks();
-                    WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                    WorldLinkRequest.UpdateWorldLinkAsync(worldStorageServer, obj, (response) =>
+                    {
+                        UUID = response.result;
+                        UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
+                        WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks();
+                        WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                    });
                 }
             }
 
@@ -281,13 +298,15 @@ namespace ETSI.ARF.WorldStorage.UI
             if (GUILayout.Button("Delete"))
             {
                 Debug.Log("Delete World Link");
-                WorldLinkRequest.DeleteWorldLink(worldStorageServer, UUID);
-                UUID = System.Guid.Empty.ToString();
-                customName = "Warning: Object deleted !";
-                creatorUUID = System.Guid.Empty.ToString();
-                unit = UnitSystem.CM;
-                WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks();
-                WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                WorldLinkRequest.DeleteWorldLinkAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
+                {
+                    UUID = System.Guid.Empty.ToString();
+                    customName = "Warning: Object deleted !";
+                    creatorUUID = System.Guid.Empty.ToString();
+                    unit = UnitSystem.CM;
+                    WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks();
+                    WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                });
             }
             GUI.backgroundColor = ori;
 
@@ -389,35 +408,38 @@ namespace ETSI.ARF.WorldStorage.UI
 
         private void GetWorldLinkParams()
         {
-            WorldLink obj = WorldLinkRequest.GetWorldLink(worldStorageServer, UUID);
-            //customName = obj.Name;
-            creatorUUID = obj.CreatorUUID.ToString();
+            WorldLinkRequest.GetWorldLinkAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
+            {
+                WorldLink obj = response.result;
+                //customName = obj.Name;
+                creatorUUID = obj.CreatorUUID.ToString();
 
-            FROM.UUID = obj.UUIDFrom.ToString();
-            FROM.type = obj.TypeFrom;
+                FROM.UUID = obj.UUIDFrom.ToString();
+                FROM.type = obj.TypeFrom;
 
-            TO.UUID = obj.UUIDTo.ToString();
-            TO.type = obj.TypeTo;
+                TO.UUID = obj.UUIDTo.ToString();
+                TO.type = obj.TypeTo;
 
-            unit = obj.Unit;
-            if (obj.Transform.Count == 16)
-            {
-                Matrix4x4 transf = WorldStorageWindow.MatrixFromLocalCRS(obj.Transform);
-                transf_pos = transf.GetPosition();
-                transf_rot = transf.rotation.eulerAngles;
-            }
-            else
-            {
-                transf_pos = Vector3.zero;
-                transf_rot = Vector3.zero;
-            }
-            keyValueTags = obj.KeyvalueTags;
+                unit = obj.Unit;
+                if (obj.Transform.Count == 16)
+                {
+                    Matrix4x4 transf = WorldStorageUnityHelper.ConvertETSIARFTransform3DToUnity(obj.Transform);
+                    transf_pos = transf.GetPosition();
+                    transf_rot = transf.rotation.eulerAngles;
+                }
+                else
+                {
+                    transf_pos = Vector3.zero;
+                    transf_rot = Vector3.zero;
+                }
+                keyValueTags = obj.KeyvalueTags;
 
-            // Get here the params of the from/to elements (GET)
-            GetElementFROM();
-            GetElementTO();
+                // Get here the params of the from/to elements (GET)
+                GetElementFROM();
+                GetElementTO();
 
-            this.Repaint();
+                this.Repaint();
+            });
         }
 
         public void AddLink()
@@ -427,10 +449,13 @@ namespace ETSI.ARF.WorldStorage.UI
             customName = "Default Link";
 
             WorldLink obj = GenerateWorldLink();
-            UUID = WorldLinkRequest.AddWorldLink(worldStorageServer, obj);
-            UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
-            WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks();
-            WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+            WorldLinkRequest.CreateWorldLinkAsync(worldStorageServer, obj, (response) =>
+            {
+                UUID = response.result;
+                UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
+                WorldStorageWindow.WorldStorageWindowSingleton.GetWorldLinks();
+                WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+            });
         }
 
         public WorldLink GenerateWorldLink()
@@ -441,7 +466,7 @@ namespace ETSI.ARF.WorldStorage.UI
 
             // Create a key value (one from demo)
             keyValueTags.Clear();
-            keyValueTags.Add(key1, new List<string> { value1 });
+            keyValueTags.Add(key1, new Collection<string> { value1 });
 
             System.Guid _uuid = System.Guid.Parse(UUID);
             System.Guid _creator = System.Guid.Parse(worldStorageUser.UUID);
diff --git a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs
index d73bea0d950531f0cc82735bebf484cdb20e2f9b..5725d51675f227edf4d3690cc6e3a420faff4c53 100644
--- a/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs	
+++ b/Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs	
@@ -20,6 +20,7 @@
 
 #define isDEBUG
 
+using System;
 using System.Collections;
 using System.Collections.Generic;
 
@@ -29,7 +30,8 @@ using UnityEditor;
 using ETSI.ARF.WorldStorage;
 using ETSI.ARF.WorldStorage.REST;
 using ETSI.ARF.WorldStorage.Editor.Windows;
-
+using ETSI.ARF.OpenAPI.WorldStorage;
+
 namespace ETSI.ARF.WorldStorage.UI
 {
     public class WorldStorageWindow : EditorWindow
@@ -56,8 +58,8 @@ namespace ETSI.ARF.WorldStorage.UI
         private static GUILayoutOption buttonWidth = GUILayout.Width(64f);
         private bool showListT = true;
         private bool showListA = true;
-        private bool showListL = true;
-        
+        private bool showListL = true;
+
         private string filterByKeyValueTag = "";
 
         static public string winName = "ARF Authoring Editor";
@@ -153,7 +155,10 @@ namespace ETSI.ARF.WorldStorage.UI
             ping = EditorGUILayout.TextField("Last Ping", ping);
             if (GUILayout.Button("Ping"))
             {
-                ping = AdminRequest.Ping(worldStorageServer);
+                OpenAPI.ResponseObject<string> ro = AdminRequest.PingAsync(worldStorageServer, (response) =>
+                {
+                    ping = response.result;
+                });
             }
             GUI.backgroundColor = ori;
             GUILayout.EndHorizontal();
@@ -165,7 +170,10 @@ namespace ETSI.ARF.WorldStorage.UI
 
             if (GUILayout.Button("Get World Storage Sate"))
             {
-                state = AdminRequest.GetAdminInfo(worldStorageServer);
+                OpenAPI.ResponseObject<string> ro = AdminRequest.AdminAsync(worldStorageServer, (response) =>
+                {
+                    state = response.result;
+                });
             }
             GUI.backgroundColor = ori;
             GUILayout.EndHorizontal();
@@ -177,7 +185,10 @@ namespace ETSI.ARF.WorldStorage.UI
 
             if (GUILayout.Button("Get World Storage API Version"))
             {
-                vers = AdminRequest.GetVersion(worldStorageServer);
+                OpenAPI.ResponseObject<string> ro = AdminRequest.VersionAsync(worldStorageServer, (response) =>
+                {
+                    vers = response.result;
+                });
             }
             GUI.backgroundColor = ori;
             GUILayout.EndHorizontal();
@@ -259,7 +270,10 @@ namespace ETSI.ARF.WorldStorage.UI
                             // extract the UUID
                             UUID = customName.Split('[', ']')[1];
                         }
-                        if (++n > 3) TrackableRequest.DeleteTrackable(worldStorageServer, UUID);
+                        if (++n > 3) TrackableRequest.DeleteTrackableAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
+                        {
+                            // nothing to do
+                        });
                     }
 
                     GetTrackables();
@@ -291,9 +305,11 @@ namespace ETSI.ARF.WorldStorage.UI
                     {
                         if (EditorUtility.DisplayDialog("Delete", "Are you sure you want to delete this element?", "Delete", "Cancel"))
                         {
-                            TrackableRequest.DeleteTrackable(worldStorageServer, UUID);
-                            WorldStorageWindowSingleton.GetTrackables();
-                            WorldStorageWindowSingleton.Repaint();
+                            TrackableRequest.DeleteTrackableAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
+                            {
+                                WorldStorageWindowSingleton.GetTrackables();
+                                WorldStorageWindowSingleton.Repaint();
+                            });
                         }
                     }
                     GUI.backgroundColor = ori;
@@ -348,11 +364,14 @@ namespace ETSI.ARF.WorldStorage.UI
                             // extract the UUID
                             UUID = customName.Split('[', ']')[1];
                         }
-                        if (++n > 3) WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, UUID);
+                        if (++n > 3) WorldAnchorRequest.DeleteWorldAnchorAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
+                        {
+                            WorldStorageWindowSingleton.GetWorldAnchors();
+                            WorldStorageWindowSingleton.Repaint();
+                        });
                     }
-
-                    GetWorldAnchors();
-                    WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                    //WorldStorageWindowSingleton.GetWorldAnchors();
+                    //WorldStorageWindowSingleton.Repaint();
                 }
             }
             GUI.backgroundColor = ori;
@@ -380,9 +399,11 @@ namespace ETSI.ARF.WorldStorage.UI
                     {
                         if (EditorUtility.DisplayDialog("Delete", "Are you sure you want to delete this element?", "Delete", "Cancel"))
                         {
-                            WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, UUID);
-                            WorldStorageWindowSingleton.GetWorldAnchors();
-                            WorldStorageWindowSingleton.Repaint();
+                            WorldAnchorRequest.DeleteWorldAnchorAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
+                            {
+                                WorldStorageWindowSingleton.GetWorldAnchors();
+                                WorldStorageWindowSingleton.Repaint();
+                            });
                         }
                     }
                     GUI.backgroundColor = ori;
@@ -437,11 +458,14 @@ namespace ETSI.ARF.WorldStorage.UI
                             // extract the UUID
                             UUID = customName.Split('[', ']')[1];
                         }
-                        if (++n > 3) WorldLinkRequest.DeleteWorldLink(worldStorageServer, UUID);
+                        if (++n > 3) WorldLinkRequest.DeleteWorldLinkAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
+                        {
+                            WorldStorageWindowSingleton.GetWorldLinks();
+                            WorldStorageWindowSingleton.Repaint();
+                        });
                     }
-
-                    GetWorldLinks();
-                    WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
+                    //WorldStorageWindowSingleton.GetWorldLinks();
+                    //WorldStorageWindowSingleton.Repaint();
                 }
             }
             GUI.backgroundColor = ori;
@@ -460,8 +484,8 @@ namespace ETSI.ARF.WorldStorage.UI
                     if (UUID == null) UUID = links[i]; // try this
                     if (GUILayout.Button("Edit...", EditorStyles.miniButtonLeft, buttonWidth))
                     {
-                        Debug.Log("Open Link Window");
-                        
+                        Debug.Log("Open Link Window");
+
                         WorldLinkWindow.ShowWindow(worldStorageServer, worldStorageUser, UUID);
                     }
 
@@ -470,9 +494,11 @@ namespace ETSI.ARF.WorldStorage.UI
                     {
                         if (EditorUtility.DisplayDialog("Delete", "Are you sure you want to delete this element?", "Delete", "Cancel"))
                         {
-                            WorldLinkRequest.DeleteWorldLink(worldStorageServer, UUID);
-                            WorldStorageWindowSingleton.GetWorldLinks();
-                            WorldStorageWindowSingleton.Repaint();
+                            WorldLinkRequest.DeleteWorldLinkAsync(worldStorageServer, Guid.Parse(UUID), (response) =>
+                            {
+                                WorldStorageWindowSingleton.GetWorldLinks();
+                                WorldStorageWindowSingleton.Repaint();
+                            });
                         }
                     }
                     GUI.backgroundColor = ori;
@@ -503,15 +529,17 @@ namespace ETSI.ARF.WorldStorage.UI
         {
             // Get all objects
             Debug.Log("Get all creators id");
-            List<Trackable> res = TrackableRequest.GetAllTrackables(worldStorageServer);
-            creators.Clear();
-            foreach (var item in res)
-            {
-                if (!creators.Contains(item.CreatorUUID.ToString())) creators.Add(item.CreatorUUID.ToString());
-            }
+            TrackableRequest.GetTrackablesAsync(worldStorageServer, (response) =>
+            {
+                creators.Clear();
+                foreach (var item in response.result)
+                {
+                    if (!creators.Contains(item.CreatorUUID.ToString())) creators.Add(item.CreatorUUID.ToString());
+                }
+            });
         }
 
-        static public (string, string) GetFirstKeyValueTags(Dictionary<string, List<string>> dict)
+        static public (string, string) GetFirstKeyValueTags(KeyvalueTagList dict)
         {
             if (dict.Count >= 1)
             {
@@ -529,62 +557,58 @@ namespace ETSI.ARF.WorldStorage.UI
             return ("", "");
         }
 
-        static public Matrix4x4 MatrixFromLocalCRS(List<float> localCRS)
-        {
-            Matrix4x4 matrix = new Matrix4x4();
-            matrix.m00 = localCRS[0]; matrix.m01 = localCRS[1]; matrix.m02 = localCRS[2]; matrix.m03 = localCRS[3];
-            matrix.m10 = localCRS[4]; matrix.m11 = localCRS[5]; matrix.m12 = localCRS[6]; matrix.m13 = localCRS[7];
-            matrix.m20 = localCRS[8]; matrix.m21 = localCRS[9]; matrix.m22 = localCRS[10]; matrix.m23 = localCRS[11];
-            matrix.m30 = localCRS[12]; matrix.m31 = localCRS[13]; matrix.m32 = localCRS[14]; matrix.m33 = localCRS[15];
-            return matrix;
-        }
-
         public void GetTrackables()
         {
             // Get all objects
             Debug.Log("Get all server objects");
-            List<Trackable> res = TrackableRequest.GetAllTrackables(worldStorageServer);
-            trackables.Clear();
-            foreach (var item in res)
-            {
-                if (filterByKeyValueTag != "")
-                {
-                    var first = GetFirstKeyValueTags(item.KeyvalueTags);
-                    if (first.Item1.ToLower() != "group" || first.Item2 != filterByKeyValueTag) continue;
+            TrackableRequest.GetTrackablesAsync(worldStorageServer, (response) =>
+            {
+                trackables.Clear();
+                foreach (var item in response.result)
+                {
+                    if (filterByKeyValueTag != "")
+                    {
+                        var first = GetFirstKeyValueTags(item.KeyvalueTags);
+                        if (first.Item1.ToLower() != "group" || first.Item2 != filterByKeyValueTag) continue;
+                    }
+                    if (!string.IsNullOrEmpty(item.Name)) trackables.Add(item.Name + " [" + item.UUID.ToString() + "]");
+                    else trackables.Add(item.UUID.ToString());
                 }
-                if (!string.IsNullOrEmpty(item.Name)) trackables.Add(item.Name + " [" + item.UUID.ToString() + "]");
-                else trackables.Add(item.UUID.ToString());
-            }
+            });
         }
 
         public void GetWorldAnchors()
         {
             // Get all objects
             Debug.Log("Get all server objects");
-            List<WorldAnchor> res = WorldAnchorRequest.GetAllWorldAnchors(worldStorageServer);
-            anchors.Clear();
-            foreach (var item in res)
-            {
-                if (filterByKeyValueTag != "")
+            WorldAnchorRequest.GetWorldAnchorsAsync(worldStorageServer, (response) =>
+            {
+                anchors.Clear();
+                foreach (var item in response.result)
                 {
-                    var first = GetFirstKeyValueTags(item.KeyvalueTags);
-                    if (first.Item1.ToLower() != "group" || first.Item2 != filterByKeyValueTag) continue;
+                    if (filterByKeyValueTag != "")
+                    {
+                        var first = GetFirstKeyValueTags(item.KeyvalueTags);
+                        if (first.Item1.ToLower() != "group" || first.Item2 != filterByKeyValueTag) continue;
+                    }
+                    if (!string.IsNullOrEmpty(item.Name)) anchors.Add(item.Name + " [" + item.UUID.ToString() + "]");
+                    else anchors.Add(item.UUID.ToString());
                 }
-                if (!string.IsNullOrEmpty(item.Name)) anchors.Add(item.Name + " [" + item.UUID.ToString() + "]");
-                else anchors.Add(item.UUID.ToString());
-            }
+            });
         }
 
         public void GetWorldLinks()
         {
             // Get all objects
             Debug.Log("Get all server objects");
-            List<WorldLink> res = WorldLinkRequest.GetAllWorldLinks(worldStorageServer);
-            links.Clear();
-            foreach (var item in res)
-            {
-                links.Add(item.UUID.ToString());
-            }
+            WorldLinkRequest.GetWorldLinksAsync(worldStorageServer, (response) =>
+            {
+                links.Clear();
+                foreach (var item in response.result)
+                {
+                    links.Add(item.UUID.ToString());
+                }
+            });
         }
         #endregion
     }
diff --git a/Assets/ETSI.ARF/ARF World Storage API/Scripts/WorldStorageRequest.cs b/Assets/ETSI.ARF/ARF World Storage API/Scripts/WorldStorageRequest.cs
index 77184d2fe28d2ec1ff711ae9845c6c3ad6633d21..cdda36ce34012a18789cadf9d15f5a6e4b4f6a4d 100644
--- a/Assets/ETSI.ARF/ARF World Storage API/Scripts/WorldStorageRequest.cs	
+++ b/Assets/ETSI.ARF/ARF World Storage API/Scripts/WorldStorageRequest.cs	
@@ -18,6 +18,7 @@ using UnityEngine;
 
 using ETSI.ARF.OpenAPI;
 using ETSI.ARF.OpenAPI.WorldStorage;
+using ETSI.ARF.WorldStorage.REST;
 
 namespace ETSI.ARF.WorldStorage
 {
@@ -28,14 +29,26 @@ namespace ETSI.ARF.WorldStorage
     /// </summary>
     public class WorldStorageRequest : WorldStorageCollections
     {
-        private string serverUri;
+        private WorldStorageServer wsServer;
         private WorldStorageClient apiClient;
+        private string serverUri;
 
         public string URI => serverUri;
         public WorldStorageClient Client => apiClient;
 
+        public WorldStorageRequest(WorldStorageServer server) : base()
+        {
+            wsServer = server;
+            serverUri = wsServer.URI;
+            var httpClient = new UnityWebRequestHttpClient(serverUri);
+            apiClient = new WorldStorageClient(httpClient);
+        }
+        
         public WorldStorageRequest(string uri) : base()
         {
+            wsServer = new WorldStorageServer();
+            wsServer.basePath = uri;
+            wsServer.port = 0;
             serverUri = uri;
             var httpClient = new UnityWebRequestHttpClient(serverUri);
             apiClient = new WorldStorageClient(httpClient);
@@ -75,28 +88,6 @@ namespace ETSI.ARF.WorldStorage
             }
             else Debug.Log("[REST] OpenAPI Timeout!");
         }
-
-        //private void OnReceiveAssetList(Task<List<Asset>> t, object id)
-        //{
-        //    if (t.IsCompleted)
-        //    {
-        //        ResponseList<Asset> o = (ResponseList<Asset>)id;
-        //        o.responseTime = DateTime.Now;
-        //        o.list = t.Result;
-        //        Debug.Log($"[REST] Server Response = Got {o.list.Count} asset(s) (#{o.transactionId}, {o.message})");
-
-        //        trackables.list.Clear();
-        //        foreach (var i in o.list)
-        //        {
-        //            i.where = Model.Localisation.SERVER;
-        //            //todo: GUID already exists???
-        //            trackables.list.Add(i.GUID, i);
-        //        }
-        //        trackables.PreCount = trackables.Count; // sync value
-        //        o.callback?.Invoke(o);
-        //    }
-        //    else Debug.Log("[REST] OpenAPI Timeout!");
-        //}
         #endregion
 
         //
@@ -107,20 +98,14 @@ namespace ETSI.ARF.WorldStorage
 
         public ResponseObject<string> PingAsync(Action<ResponseObject<string>> func)
         {
-            Debug.Log("[REST] Request Ping...");
-            ResponseObject<string> ro = new ResponseObject<string>("Ping", func);
-            apiClient.GetPingAsync().ContinueWith(ReceiveTextCallback, ro);
-            return ro; // if the cancel token is needed!
+            return AdminRequest.PingAsync(wsServer, func);
         }
 
         public string Status() => apiClient.GetAdmin();
 
         public ResponseObject<string> StatusAsync(Action<ResponseObject<string>> func)
         {
-            Debug.Log("[REST] Request Status...");
-            ResponseObject<string> ro = new ResponseObject<string>("Status", func);
-            apiClient.GetAdminAsync().ContinueWith(ReceiveTextCallback, ro);
-            return ro; // if the cancel token is needed!
+            return AdminRequest.AdminAsync(wsServer, func);
         }
 
         public string Version() => apiClient.GetVersion();
@@ -128,10 +113,7 @@ namespace ETSI.ARF.WorldStorage
 
         public ResponseObject<string> VersionAsync(Action<ResponseObject<string>> func)
         {
-            Debug.Log("[REST] Request Version...");
-            ResponseObject<string> ro = new ResponseObject<string>("Version", func);
-            apiClient.GetVersionAsync().ContinueWith(ReceiveTextCallback, ro);
-            return ro; // if the cancel token is needed!
+            return AdminRequest.VersionAsync(wsServer, func);
         }
         #endregion
 
@@ -142,46 +124,30 @@ namespace ETSI.ARF.WorldStorage
 
         //public Task<int> GetNumOfAssets() => apiClient.NumOfAssetsAsync();
         //public bool IsAssetExists(Guid id) => apiClient.IsAssetId(id);
-        public ResponseObject<string> AddTrackableAsync(Action<ResponseObject<string>> func, Trackable asset)
+        public ResponseObject<string> AddTrackableAsync(Action<ResponseObject<string>> func, Trackable trackable)
         {
-            Debug.Log("[REST] Create trackable...");
-            ResponseObject<string> ro = new ResponseObject<string>("AddTrackableAsync", func);
-            apiClient.AddTrackableAsync("", asset).ContinueWith(ReceiveTextCallback, ro, ro.cancellationToken);
-            return ro; // if the cancel token is needed!
+            return TrackableRequest.CreateTrackableAsync(wsServer, trackable, func);
         }
 
         public ResponseObject<string> DeleteTrackableAsync(Action<ResponseObject<string>> func, Guid id)
         {
-            Debug.Log("[REST] Delete trackable...");
-            ResponseObject<string> ro = new ResponseObject<string>("DeleteAssetAsync", func);
-            apiClient.DeleteTrackableAsync("", id).ContinueWith(ReceiveTextCallback, ro, ro.cancellationToken);
-            return ro; // if the cancel token is needed!
+            return TrackableRequest.DeleteTrackableAsync(wsServer, id, func);
         }
 
-        public ResponseObject<string> ModifyTrackableAsync(Action<ResponseObject<string>> func, Trackable asset)
+        public ResponseObject<string> ModifyTrackableAsync(Action<ResponseObject<string>> func, Trackable trackable)
         {
-            Debug.Log("[REST] Modify trackable...");
-            ResponseObject<string> ro = new ResponseObject<string>("ModifyTrackableAsync", func);
-            apiClient.ModifyTrackableAsync("", asset).ContinueWith(ReceiveTextCallback, ro, ro.cancellationToken);
-            return ro; // if the cancel token is needed!
+            return TrackableRequest.UpdateTrackableAsync(wsServer, trackable, func);
         }
 
         public ResponseObject<Trackable> GetTrackableByIdAsync(Action<ResponseObject<Trackable>> func, Guid id)
         {
-            Debug.Log("[REST] Request trackable...");
-            ResponseObject<Trackable> ro = new ResponseObject<Trackable>("GetTrackableById", func);
-            apiClient.GetTrackableByIdAsync("", id).ContinueWith(ReceiveTrackableCallback, ro, ro.cancellationToken);
-            return ro; // if the cancel token is needed!
+            return TrackableRequest.GetTrackableAsync(wsServer, id, func);
         }
 
-        //public ResponseList<Trackable> GetAssetListAsync(Action<ResponseList<Trackable>> func, int? max = 1)
-        //{
-        //    Debug.Log("[REST] Requesting trackable list...");
-        //    ResponseList<Trackable> ro = new ResponseList<Trackable>("GetAssetListAsync", func);
-        //    apiClient.GetAssetListAsync().ContinueWith(OnReceiveAssetList, ro, ro.cancellationToken);
-        //    //ro.Cancel();  // a process should call this function to stop the request
-        //    return ro; // if the cancel token is needed!
-        //}
+        public ResponseObject<List<Trackable>> GetTrackableListAsync(Action<ResponseObject<List<Trackable>>> func, int? max = 1)
+        {
+            return TrackableRequest.GetTrackablesAsync(wsServer, func);
+        }
         #endregion
     }
 }
diff --git a/Packages/unity-world-storage-package b/Packages/unity-world-storage-package
index 5dd117cc3a4b21f1f63fc1be336a29cbf5e96ec0..8d0b687c978d5319b2903b24bf9e63b289c7777f 160000
--- a/Packages/unity-world-storage-package
+++ b/Packages/unity-world-storage-package
@@ -1 +1 @@
-Subproject commit 5dd117cc3a4b21f1f63fc1be336a29cbf5e96ec0
+Subproject commit 8d0b687c978d5319b2903b24bf9e63b289c7777f
diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset
index ba5371316530ac94cb1c691004ad00754efc92c2..5bbf3d783d9626eeaa6e424740a0b2dd73e08cf6 100644
--- a/UserSettings/EditorUserSettings.asset
+++ b/UserSettings/EditorUserSettings.asset
@@ -11,6 +11,9 @@ EditorUserSettings:
     RecentlyUsedSceneGuid-1:
       value: 5a08575f5207595a0f5d59741173094444164f7d7d2a23317c7a4465bbe1646d
       flags: 0
+    RecentlyUsedSceneGuid-2:
+      value: 5605565456500d5d5d5e597742740b444316497b7e7e72347f7d4a67b3b1676b
+      flags: 0
     vcSharedLogLevel:
       value: 0d5e400f0650
       flags: 0