diff --git a/src/main/java/net/onrc/onos/core/topology/HostImpl.java b/src/main/java/net/onrc/onos/core/topology/HostImpl.java
index 8ddca10..469d335 100644
--- a/src/main/java/net/onrc/onos/core/topology/HostImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/HostImpl.java
@@ -19,11 +19,6 @@
     //////////////////////////////////////////////////////
     private HostEvent deviceObj;
 
-    ///////////////////
-    /// In-memory index
-    ///////////////////
-
-    // none
 
     /**
      * Creates a Host object based on {@link HostEvent}.
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
index 1618425..831b407 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
@@ -25,6 +25,8 @@
 
     private final LinkTuple id;
     // TODO add LastSeenTime, Capacity if appropriate
+    protected static final Double DEFAULT_CAPACITY = Double.POSITIVE_INFINITY;
+    private Double capacity = DEFAULT_CAPACITY;
 
     /**
      * Default constructor for Serializer to use.
@@ -62,8 +64,6 @@
      */
     public LinkEvent(LinkEvent original) {
         super(original);
-        Validate.isTrue(Objects.equals(this.id, original.id));
-
         this.id = original.id;
     }
 
@@ -113,6 +113,30 @@
         return getLinkTuple().getDst();
     }
 
+    /**
+     * Gets the link capacity.
+     * TODO: What is the unit?
+     *
+     * @return capacity
+     */
+    public Double getCapacity() {
+        return capacity;
+    }
+
+    /**
+     * Sets the link capacity.
+     * TODO: What is the unit?
+     *
+     * @param capacity capacity
+     */
+    void setCapacity(Double capacity) {
+        if (isFrozen()) {
+            throw new IllegalStateException("Tried to modify frozen instance: " + this);
+        }
+
+        this.capacity = capacity;
+    }
+
     @Override
     public String toString() {
         return "[LinkEvent " + getSrc() + "->" + getDst() + "]";
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
index fce965a..5ad0194 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
@@ -20,15 +20,6 @@
     //////////////////////////////////////////////////////
     private LinkEvent linkObj;
 
-    // TODO remove?
-    protected static final Double DEFAULT_CAPACITY = Double.POSITIVE_INFINITY;
-    protected Double capacity = DEFAULT_CAPACITY;
-
-    ///////////////////
-    /// In-memory index
-    ///////////////////
-
-    // none
 
     /**
      * Creates a Link object based on {@link LinkEvent}.
@@ -116,13 +107,20 @@
 
     @Override
     public Double getCapacity() {
-        return capacity;
+        return this.linkObj.getCapacity();
     }
 
     void setCapacity(Double capacity) {
-        this.capacity = capacity;
+        if (this.linkObj.isFrozen()) {
+            this.linkObj = new LinkEvent(this.linkObj);
+            this.linkObj.setCapacity(capacity);
+            this.linkObj.freeze();
+        } else {
+            this.linkObj.setCapacity(capacity);
+        }
     }
 
+    // XXX actually replaces everything
     void replaceStringAttributes(LinkEvent updated) {
         Validate.isTrue(this.linkObj.getSrc().equals(updated.getSrc()),
                 "Wrong LinkEvent given.");
diff --git a/src/main/java/net/onrc/onos/core/topology/PortImpl.java b/src/main/java/net/onrc/onos/core/topology/PortImpl.java
index 099fa41..935b3c5 100644
--- a/src/main/java/net/onrc/onos/core/topology/PortImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/PortImpl.java
@@ -23,10 +23,6 @@
     //////////////////////////////////////////////////////
     private PortEvent portObj;
 
-    ///////////////////
-    /// In-memory index
-    ///////////////////
-
 
     /**
      * Creates a Port object based on {@link PortEvent}.
diff --git a/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java b/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
index aa730c3..b0486b0 100644
--- a/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
@@ -27,11 +27,6 @@
     //////////////////////////////////////////////////////
     private SwitchEvent switchObj;
 
-    ///////////////////
-    /// In-memory index
-    ///////////////////
-
-    // none
 
     /**
      * Creates a Switch object with empty attributes.
