diff --git a/src/main/java/org/opencord/cordvtn/impl/CordVtnManager.java b/src/main/java/org/opencord/cordvtn/impl/CordVtnManager.java
index bd17814..f325143 100644
--- a/src/main/java/org/opencord/cordvtn/impl/CordVtnManager.java
+++ b/src/main/java/org/opencord/cordvtn/impl/CordVtnManager.java
@@ -56,10 +56,10 @@
 import org.openstack4j.model.network.Subnet;
 import org.slf4j.Logger;
 
-import java.util.HashSet;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -350,8 +350,10 @@
 
     @Override
     public Set<VtnNetwork> vtnNetworks() {
-        // TODO implement
-        return ImmutableSet.of();
+        Set<VtnNetwork> vtnNetworks = networks().stream()
+                .map(net -> vtnNetwork(NetworkId.of(net.getId())))
+                .collect(Collectors.toSet());
+        return ImmutableSet.copyOf(vtnNetworks);
     }
 
     @Override
@@ -377,8 +379,10 @@
 
     @Override
     public Set<VtnPort> vtnPorts() {
-        // TODO implement
-        return ImmutableSet.of();
+        Set<VtnPort> vtnPorts = ports().stream()
+                .map(port -> vtnPort(PortId.of(port.getId())))
+                .collect(Collectors.toSet());
+        return ImmutableSet.copyOf(vtnPorts);
     }
 
     @Override
@@ -389,7 +393,7 @@
 
     @Override
     public Set<ServiceNetwork> serviceNetworks() {
-        return new HashSet<>(store.vtnNetworks());
+        return ImmutableSet.copyOf(store.vtnNetworks());
     }
 
     @Override
@@ -400,7 +404,7 @@
 
     @Override
     public Set<ServicePort> servicePorts() {
-        return new HashSet<>(store.vtnPorts());
+        return ImmutableSet.copyOf(store.vtnPorts());
     }
 
     @Override
@@ -411,7 +415,7 @@
 
     @Override
     public Set<Network> networks() {
-        return store.networks();
+        return ImmutableSet.copyOf(store.networks());
     }
 
     @Override
@@ -422,7 +426,7 @@
 
     @Override
     public Set<Port> ports() {
-        return store.ports();
+        return ImmutableSet.copyOf(store.ports());
     }
 
     @Override
@@ -433,7 +437,7 @@
 
     @Override
     public Set<Subnet> subnets() {
-        return store.subnets();
+        return ImmutableSet.copyOf(store.subnets());
     }
 
     private void syncNetwork() {
diff --git a/src/main/java/org/opencord/cordvtn/impl/DistributedCordVtnStore.java b/src/main/java/org/opencord/cordvtn/impl/DistributedCordVtnStore.java
index 9b4b215..e4176e5 100644
--- a/src/main/java/org/opencord/cordvtn/impl/DistributedCordVtnStore.java
+++ b/src/main/java/org/opencord/cordvtn/impl/DistributedCordVtnStore.java
@@ -244,8 +244,10 @@
 
     @Override
     public Set<VtnNetwork> vtnNetworks() {
-        return vtnNetworkStore.values().stream().map(Versioned::value)
+        Set<VtnNetwork> vtnNetworks = vtnNetworkStore.values().stream()
+                .map(Versioned::value)
                 .collect(Collectors.toSet());
+        return ImmutableSet.copyOf(vtnNetworks);
     }
 
     @Override
@@ -279,8 +281,10 @@
 
     @Override
     public Set<VtnPort> vtnPorts() {
-        return vtnPortStore.values().stream().map(Versioned::value)
+        Set<VtnPort> vtnPorts = vtnPortStore.values().stream()
+                .map(Versioned::value)
                 .collect(Collectors.toSet());
+        return ImmutableSet.copyOf(vtnPorts);
     }
 
     @Override
@@ -314,8 +318,10 @@
 
     @Override
     public Set<Network> networks() {
-        return networkStore.values().stream().map(Versioned::value)
+        Set<Network> networks = networkStore.values().stream()
+                .map(Versioned::value)
                 .collect(Collectors.toSet());
+        return ImmutableSet.copyOf(networks);
     }
 
     @Override
@@ -349,8 +355,10 @@
 
     @Override
     public Set<Port> ports() {
-        return portStore.values().stream().map(Versioned::value)
+        Set<Port> ports = portStore.values().stream()
+                .map(Versioned::value)
                 .collect(Collectors.toSet());
+        return ImmutableSet.copyOf(ports);
     }
 
     @Override
@@ -384,13 +392,17 @@
 
     @Override
     public Set<Subnet> subnets() {
-        return subnetStore.values().stream().map(Versioned::value)
+        Set<Subnet> subnets = subnetStore.values().stream()
+                .map(Versioned::value)
                 .collect(Collectors.toSet());
+        return ImmutableSet.copyOf(subnets);
     }
 
     private Set<VtnNetwork> getSubscribers(NetworkId netId) {
-        return vtnNetworks().stream().filter(net -> net.isProvider(netId))
+        Set<VtnNetwork> subscribers = vtnNetworks().stream()
+                .filter(net -> net.isProvider(netId))
                 .collect(Collectors.toSet());
+        return ImmutableSet.copyOf(subscribers);
     }
 
     private boolean equalNetworks(Network netA, Network netB) {
