diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/LinkCollectionIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/LinkCollectionIntentCompiler.java
index 43a7fb7..cd7200a 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/LinkCollectionIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/LinkCollectionIntentCompiler.java
@@ -27,7 +27,6 @@
 import org.onosproject.core.DefaultGroupId;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
-import org.onosproject.net.EdgeLink;
 import org.onosproject.net.Link;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.DefaultFlowRule;
@@ -78,18 +77,8 @@
         SetMultimap<DeviceId, PortNumber> outputPorts = HashMultimap.create();
 
         for (Link link : intent.links()) {
-            DeviceId srcDeviceId;
-            DeviceId dstDeviceId;
-
-            if (link instanceof EdgeLink) {
-                EdgeLink edgeLink = (EdgeLink) link;
-                dstDeviceId = edgeLink.hostLocation().deviceId();
-                srcDeviceId = dstDeviceId;
-            } else {
-                inputPorts.put(link.dst().deviceId(), link.dst().port());
-                srcDeviceId = link.src().deviceId();
-            }
-            outputPorts.put(srcDeviceId, link.src().port());
+            inputPorts.put(link.dst().deviceId(), link.dst().port());
+            outputPorts.put(link.src().deviceId(), link.src().port());
         }
 
         for (ConnectPoint ingressPoint : intent.ingressPoints()) {
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MultiPointToSinglePointIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MultiPointToSinglePointIntentCompiler.java
index 3a40622..5c158e0 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MultiPointToSinglePointIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/MultiPointToSinglePointIntentCompiler.java
@@ -15,12 +15,8 @@
  */
 package org.onosproject.net.intent.impl.compiler;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -40,10 +36,11 @@
 import org.onosproject.net.resource.link.LinkResourceAllocations;
 import org.onosproject.net.topology.PathService;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-
-import static org.onosproject.net.DefaultEdgeLink.createEdgeLink;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * An intent compiler for
@@ -73,37 +70,32 @@
     public List<Intent> compile(MultiPointToSinglePointIntent intent, List<Intent> installable,
                                 Set<LinkResourceAllocations> resources) {
         Map<DeviceId, Link> links = new HashMap<>();
-        Map<DeviceId, Link> edgeLinks = new HashMap<>();
         ConnectPoint egressPoint = intent.egressPoint();
 
         for (ConnectPoint ingressPoint : intent.ingressPoints()) {
             if (ingressPoint.deviceId().equals(egressPoint.deviceId())) {
-                edgeLinks.put(ingressPoint.deviceId(), createEdgeLink(ingressPoint, true));
-                edgeLinks.put(egressPoint.deviceId(), createEdgeLink(egressPoint, false));
-            } else {
-                Path path = getPath(ingressPoint, intent.egressPoint());
-                for (Link link : path.links()) {
-                    if (links.containsKey(link.src().deviceId())) {
-                        // We've already reached the existing tree with the first
-                        // part of this path. Add the merging point with different
-                        // incoming port, but don't add the remainder of the path
-                        // in case it differs from the path we already have.
-                        links.put(link.src().deviceId(), link);
-                        break;
-                    }
-
+                continue;
+            }
+            Path path = getPath(ingressPoint, intent.egressPoint());
+            for (Link link : path.links()) {
+                if (links.containsKey(link.src().deviceId())) {
+                    // We've already reached the existing tree with the first
+                    // part of this path. Add the merging point with different
+                    // incoming port, but don't add the remainder of the path
+                    // in case it differs from the path we already have.
                     links.put(link.src().deviceId(), link);
+                    break;
                 }
+
+                links.put(link.src().deviceId(), link);
             }
         }
 
-        Set<Link> allLinks = Sets.newHashSet(links.values());
-        allLinks.addAll(edgeLinks.values());
         Intent result = LinkCollectionIntent.builder()
                 .appId(intent.appId())
                 .selector(intent.selector())
                 .treatment(intent.treatment())
-                .links(Sets.newHashSet(allLinks))
+                .links(Sets.newHashSet(links.values()))
                 .ingressPoints(intent.ingressPoints())
                 .egressPoints(ImmutableSet.of(intent.egressPoint()))
                 .priority(intent.priority())
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/SinglePointToMultiPointIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/SinglePointToMultiPointIntentCompiler.java
index 91341d2..5656590 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/SinglePointToMultiPointIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/SinglePointToMultiPointIntentCompiler.java
@@ -15,11 +15,7 @@
  */
 package org.onosproject.net.intent.impl.compiler;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
+import com.google.common.collect.ImmutableSet;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -32,7 +28,10 @@
 import org.onosproject.net.provider.ProviderId;
 import org.onosproject.net.resource.link.LinkResourceAllocations;
 
-import com.google.common.collect.ImmutableSet;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 @Component(immediate = true)
 public class SinglePointToMultiPointIntentCompiler
@@ -59,8 +58,12 @@
                                 List<Intent> installable,
                                 Set<LinkResourceAllocations> resources) {
         Set<Link> links = new HashSet<>();
-        //FIXME: need to handle the case where ingress/egress points are on same switch
+
         for (ConnectPoint egressPoint : intent.egressPoints()) {
+            if (egressPoint.deviceId().equals(intent.ingressPoint().deviceId())) {
+                continue;
+            }
+
             Path path = getPath(intent, intent.ingressPoint().deviceId(), egressPoint.deviceId());
             links.addAll(path.links());
         }
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MultiPointToSinglePointIntentCompilerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MultiPointToSinglePointIntentCompilerTest.java
index a3b4525..b9b2c54 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MultiPointToSinglePointIntentCompilerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/MultiPointToSinglePointIntentCompilerTest.java
@@ -15,10 +15,6 @@
  */
 package org.onosproject.net.intent.impl.compiler;
 
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 import org.hamcrest.Matchers;
 import org.junit.Test;
 import org.onosproject.TestApplicationId;
@@ -36,6 +32,10 @@
 import org.onosproject.net.topology.LinkWeight;
 import org.onosproject.net.topology.PathService;
 
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -255,11 +255,9 @@
 
         if (resultIntent instanceof LinkCollectionIntent) {
             LinkCollectionIntent linkIntent = (LinkCollectionIntent) resultIntent;
-            assertThat(linkIntent.links(), hasSize(ingress.length + 1));
+            assertThat(linkIntent.links(), hasSize(ingress.length));
 
             assertThat(linkIntent.links(), linksHasPath("i2", "i1"));
-
-            assertThat(linkIntent.links(), linksHasPath("i1", "i1"));
         }
     }
 }
