diff --git a/apps/castor/src/main/java/org/onosproject/castor/ConnectivityManager.java b/apps/castor/src/main/java/org/onosproject/castor/ConnectivityManager.java
index 7a1fcec..2d40f6d 100644
--- a/apps/castor/src/main/java/org/onosproject/castor/ConnectivityManager.java
+++ b/apps/castor/src/main/java/org/onosproject/castor/ConnectivityManager.java
@@ -30,6 +30,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficSelector;
@@ -188,8 +189,8 @@
                 .key(key)
                 .selector(selector)
                 .treatment(treatment)
-                .ingressPoint(portOne)
-                .egressPoint(portTwo)
+                .filteredIngressPoint(new FilteredConnectPoint(portOne))
+                .filteredEgressPoint(new FilteredConnectPoint(portTwo))
                 .priority(PRIORITY_OFFSET)
                 .build());
 
@@ -207,8 +208,8 @@
                 .key(key)
                 .selector(selector)
                 .treatment(treatment)
-                .ingressPoint(portTwo)
-                .egressPoint(portOne)
+                .filteredIngressPoint(new FilteredConnectPoint(portTwo))
+                .filteredEgressPoint(new FilteredConnectPoint(portOne))
                 .priority(PRIORITY_OFFSET)
                 .build());
 
@@ -226,8 +227,8 @@
                 .key(key)
                 .selector(selector)
                 .treatment(treatment)
-                .ingressPoint(portOne)
-                .egressPoint(portTwo)
+                .filteredIngressPoint(new FilteredConnectPoint(portOne))
+                .filteredEgressPoint(new FilteredConnectPoint(portTwo))
                 .priority(PRIORITY_OFFSET)
                 .build());
 
@@ -245,8 +246,8 @@
                 .key(key)
                 .selector(selector)
                 .treatment(treatment)
-                .ingressPoint(portTwo)
-                .egressPoint(portOne)
+                .filteredIngressPoint(new FilteredConnectPoint(portTwo))
+                .filteredEgressPoint(new FilteredConnectPoint(portOne))
                 .priority(PRIORITY_OFFSET)
                 .build());
 
diff --git a/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java b/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java
index aa00738..19e898e 100644
--- a/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java
+++ b/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java
@@ -28,13 +28,11 @@
 import org.onlab.packet.VlanId;
 import org.onosproject.TestApplicationId;
 import org.onosproject.core.ApplicationId;
-import org.onosproject.net.intf.Interface;
-import org.onosproject.net.intf.InterfaceListener;
-import org.onosproject.net.intf.InterfaceService;
 import org.onosproject.intentsync.IntentSynchronizationService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.EncapsulationType;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.config.NetworkConfigListener;
 import org.onosproject.net.config.NetworkConfigService;
@@ -47,6 +45,9 @@
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.Key;
 import org.onosproject.net.intent.PointToPointIntent;
+import org.onosproject.net.intf.Interface;
+import org.onosproject.net.intf.InterfaceListener;
+import org.onosproject.net.intf.InterfaceService;
 import org.onosproject.routing.config.BgpConfig;
 import org.onosproject.sdnip.config.SdnIpConfig;
 
@@ -58,7 +59,13 @@
 import java.util.Optional;
 import java.util.Set;
 
-import static org.easymock.EasyMock.*;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
 import static org.onosproject.routing.TestIntentServiceHelper.eqExceptId;
 
 /**
@@ -339,8 +346,8 @@
                 .key(key)
                 .selector(builder.build())
                 .treatment(treatment.build())
-                .ingressPoint(srcConnectPoint)
-                .egressPoint(dstConnectPoint)
+                .filteredIngressPoint(new FilteredConnectPoint(srcConnectPoint))
+                .filteredEgressPoint(new FilteredConnectPoint(dstConnectPoint))
                 .build();
 
         intentList.add(intent);
@@ -511,8 +518,8 @@
                 .key(key)
                 .selector(builder.build())
                 .treatment(treatment.build())
-                .ingressPoint(srcConnectPoint)
-                .egressPoint(dstConnectPoint)
+                .filteredIngressPoint(new FilteredConnectPoint(srcConnectPoint))
+                .filteredEgressPoint(new FilteredConnectPoint(dstConnectPoint))
                 .build();
 
         intentList.add(intent);
diff --git a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfInstaller.java b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfInstaller.java
index f7e46cc..4784475 100644
--- a/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfInstaller.java
+++ b/apps/test/intent-perf/src/main/java/org/onosproject/intentperf/IntentPerfInstaller.java
@@ -40,6 +40,7 @@
 import org.onosproject.mastership.MastershipService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.flow.DefaultTrafficSelector;
@@ -333,8 +334,8 @@
                 .key(key)
                 .selector(selector)
                 .treatment(treatment)
-                .ingressPoint(ingress)
-                .egressPoint(egress)
+                .filteredIngressPoint(new FilteredConnectPoint(ingress))
+                .filteredEgressPoint(new FilteredConnectPoint(egress))
                 .build();
     }
 
diff --git a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngManager.java b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngManager.java
index 4f8e6d9..35ca7f9 100644
--- a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngManager.java
+++ b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngManager.java
@@ -32,6 +32,7 @@
 import org.onosproject.core.CoreService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.Host;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
@@ -446,8 +447,8 @@
                 .key(key)
                 .selector(selector.build())
                 .treatment(treatment.build())
-                .egressPoint(dstConnectPoint)
-                .ingressPoint(srcConnectPoint)
+                .filteredEgressPoint(new FilteredConnectPoint(dstConnectPoint))
+                .filteredIngressPoint(new FilteredConnectPoint(srcConnectPoint))
                 .build();
 
         log.info("Generated a PointToPointIntent for traffic from local host "
@@ -496,8 +497,8 @@
                 .key(key)
                 .selector(selector.build())
                 .treatment(treatment.build())
-                .egressPoint(dstConnectPoint)
-                .ingressPoint(srcConnectPoint)
+                .filteredEgressPoint(new FilteredConnectPoint(dstConnectPoint))
+                .filteredIngressPoint(new FilteredConnectPoint(srcConnectPoint))
                 .build();
         log.info("Generated a PointToPointIntent for traffic to local host "
                 + ": {}", intent);
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddPointToPointIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddPointToPointIntentCommand.java
index 99ed470..b14d956 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddPointToPointIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddPointToPointIntentCommand.java
@@ -19,6 +19,7 @@
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.intent.Constraint;
@@ -92,8 +93,8 @@
                 .key(key())
                 .selector(selector)
                 .treatment(treatment)
-                .ingressPoint(ingress)
-                .egressPoint(egress)
+                .filteredIngressPoint(new FilteredConnectPoint(ingress))
+                .filteredEgressPoint(new FilteredConnectPoint(egress))
                 .constraints(constraints)
                 .priority(priority())
                 .resourceGroup(resourceGroup())
diff --git a/cli/src/main/java/org/onosproject/cli/net/IntentCycleCommand.java b/cli/src/main/java/org/onosproject/cli/net/IntentCycleCommand.java
index db86d5f..fa764fb 100644
--- a/cli/src/main/java/org/onosproject/cli/net/IntentCycleCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/IntentCycleCommand.java
@@ -26,6 +26,7 @@
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
@@ -131,8 +132,8 @@
                         .key(Key.of(i + keyOffset, appId()))
                         .selector(selector)
                         .treatment(treatment)
-                        .ingressPoint(ingress)
-                        .egressPoint(egress)
+                        .filteredIngressPoint(new FilteredConnectPoint(ingress))
+                        .filteredEgressPoint(new FilteredConnectPoint(egress))
                         .build());
 
 
diff --git a/cli/src/main/java/org/onosproject/cli/net/IntentPushTestCommand.java b/cli/src/main/java/org/onosproject/cli/net/IntentPushTestCommand.java
index 0b28f92..4fcb0c8 100644
--- a/cli/src/main/java/org/onosproject/cli/net/IntentPushTestCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/IntentPushTestCommand.java
@@ -24,6 +24,7 @@
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
@@ -143,8 +144,8 @@
                     .key(Key.of(i + keyOffset, appId()))
                     .selector(selector)
                     .treatment(treatment)
-                    .ingressPoint(ingress)
-                    .egressPoint(egress)
+                    .filteredIngressPoint(new FilteredConnectPoint(ingress))
+                    .filteredEgressPoint(new FilteredConnectPoint(egress))
                     .build());
             keysForInstall.add(Key.of(i + keyOffset, appId()));
             keysForWithdraw.add(Key.of(i + keyOffset, appId()));
diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentUtils.java b/core/api/src/main/java/org/onosproject/net/intent/IntentUtils.java
index fb5fb34..1f1f894 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentUtils.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentUtils.java
@@ -77,8 +77,10 @@
             return Objects.equals(intent1.selector(), intent2.selector()) &&
                     Objects.equals(intent1.treatment(), intent2.treatment()) &&
                     Objects.equals(intent1.constraints(), intent2.constraints()) &&
-                    Objects.equals(intent1.ingressPoint(), intent2.ingressPoint()) &&
-                    Objects.equals(intent1.egressPoint(), intent2.egressPoint());
+                    Objects.equals(intent1.filteredIngressPoint().connectPoint(),
+                            intent2.filteredIngressPoint().connectPoint()) &&
+                    Objects.equals(intent1.filteredEgressPoint().connectPoint(),
+                            intent2.filteredEgressPoint().connectPoint());
         } else {
             log.error("Unimplemented intent type");
             return false;
diff --git a/core/api/src/main/java/org/onosproject/net/intent/PointToPointIntent.java b/core/api/src/main/java/org/onosproject/net/intent/PointToPointIntent.java
index 4b191ea..1a38bfd 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/PointToPointIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/PointToPointIntent.java
@@ -15,18 +15,16 @@
  */
 package org.onosproject.net.intent;
 
-import java.util.Collections;
-import java.util.List;
-
 import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects;
 import org.onosproject.core.ApplicationId;
-import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.ResourceGroup;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 
-import com.google.common.base.MoreObjects;
+import java.util.Collections;
+import java.util.List;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -99,30 +97,6 @@
         }
 
         /**
-         * Sets the ingress point of the point to point intent that will be built.
-         *
-         * @param ingressPoint ingress connect point
-         * @return this builder
-         */
-        @Deprecated
-        public Builder ingressPoint(ConnectPoint ingressPoint) {
-            this.ingressPoint = new FilteredConnectPoint(ingressPoint);
-            return this;
-        }
-
-        /**
-         * Sets the egress point of the point to point intent that will be built.
-         *
-         * @param egressPoint egress connect point
-         * @return this builder
-         */
-        @Deprecated
-        public Builder egressPoint(ConnectPoint egressPoint) {
-            this.egressPoint = new FilteredConnectPoint(egressPoint);
-            return this;
-        }
-
-        /**
          * Sets the filtered ingress point of the point to
          * point intent that will be built.
          *
@@ -213,27 +187,6 @@
     }
 
     /**
-     * Returns the port on which the ingress traffic should be connected to
-     * the egress.
-     *
-     * @return ingress port
-     */
-    @Deprecated
-    public ConnectPoint ingressPoint() {
-        return ingressPoint.connectPoint();
-    }
-
-    /**
-     * Returns the port on which the traffic should egress.
-     *
-     * @return egress port
-     */
-    @Deprecated
-    public ConnectPoint egressPoint() {
-        return egressPoint.connectPoint();
-    }
-
-    /**
      * Returns the filtered port on which the ingress traffic should be connected to the
      * egress.
      *
diff --git a/core/api/src/test/java/org/onosproject/net/intent/PointToPointIntentTest.java b/core/api/src/test/java/org/onosproject/net/intent/PointToPointIntentTest.java
index 02bfad6..3b170a0 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/PointToPointIntentTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/PointToPointIntentTest.java
@@ -16,6 +16,7 @@
 package org.onosproject.net.intent;
 
 import org.junit.Test;
+import org.onosproject.net.FilteredConnectPoint;
 
 import static org.junit.Assert.assertEquals;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass;
@@ -38,14 +39,14 @@
         PointToPointIntent intent = createOne();
         assertEquals("incorrect id", APPID, intent.appId());
         assertEquals("incorrect match", MATCH, intent.selector());
-        assertEquals("incorrect ingress", P1, intent.ingressPoint());
-        assertEquals("incorrect egress", P2, intent.egressPoint());
+        assertEquals("incorrect ingress", P1, intent.filteredIngressPoint().connectPoint());
+        assertEquals("incorrect egress", P2, intent.filteredEgressPoint().connectPoint());
 
         intent = createWithResourceGroup();
         assertEquals("incorrect id", APPID, intent.appId());
         assertEquals("incorrect match", MATCH, intent.selector());
-        assertEquals("incorrect ingress", P1, intent.ingressPoint());
-        assertEquals("incorrect egress", P2, intent.egressPoint());
+        assertEquals("incorrect ingress", P1, intent.filteredIngressPoint().connectPoint());
+        assertEquals("incorrect egress", P2, intent.filteredEgressPoint().connectPoint());
         assertEquals("incorrect resource group", RESOURCE_GROUP, intent.resourceGroup());
     }
 
@@ -64,8 +65,8 @@
                 .appId(APPID)
                 .selector(MATCH)
                 .treatment(NOP)
-                .ingressPoint(P1)
-                .egressPoint(P2)
+                .filteredIngressPoint(new FilteredConnectPoint(P1))
+                .filteredEgressPoint(new FilteredConnectPoint(P2))
                 .build();
     }
 
@@ -74,8 +75,8 @@
                 .appId(APPID)
                 .selector(MATCH)
                 .treatment(NOP)
-                .ingressPoint(P1)
-                .egressPoint(P2)
+                .filteredIngressPoint(new FilteredConnectPoint(P1))
+                .filteredEgressPoint(new FilteredConnectPoint(P2))
                 .resourceGroup(RESOURCE_GROUP)
                 .build();
     }
@@ -86,8 +87,8 @@
                 .appId(APPID)
                 .selector(MATCH)
                 .treatment(NOP)
-                .ingressPoint(P2)
-                .egressPoint(P1)
+                .filteredIngressPoint(new FilteredConnectPoint(P2))
+                .filteredEgressPoint(new FilteredConnectPoint(P1))
                 .build();
     }
 
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PointToPointIntentCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PointToPointIntentCodec.java
index f9e7ebc..eb5305e 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/PointToPointIntentCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/PointToPointIntentCodec.java
@@ -18,6 +18,7 @@
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.intent.ConnectivityIntent;
 import org.onosproject.net.intent.PointToPointIntent;
 
@@ -45,9 +46,9 @@
         final JsonCodec<ConnectPoint> connectPointCodec =
                 context.codec(ConnectPoint.class);
         final ObjectNode ingress =
-                connectPointCodec.encode(intent.ingressPoint(), context);
+                connectPointCodec.encode(intent.filteredIngressPoint().connectPoint(), context);
         final ObjectNode egress =
-                connectPointCodec.encode(intent.egressPoint(), context);
+                connectPointCodec.encode(intent.filteredEgressPoint().connectPoint(), context);
 
         result.set(INGRESS_POINT, ingress);
         result.set(EGRESS_POINT, egress);
@@ -67,13 +68,13 @@
                 INGRESS_POINT + IntentCodec.MISSING_MEMBER_MESSAGE);
         ConnectPoint ingress = context.codec(ConnectPoint.class)
                 .decode(ingressJson, context);
-        builder.ingressPoint(ingress);
+        builder.filteredIngressPoint(new FilteredConnectPoint(ingress));
 
         ObjectNode egressJson = nullIsIllegal(get(json, EGRESS_POINT),
                 EGRESS_POINT + IntentCodec.MISSING_MEMBER_MESSAGE);
         ConnectPoint egress = context.codec(ConnectPoint.class)
                 .decode(egressJson, context);
-        builder.egressPoint(egress);
+        builder.filteredEgressPoint(new FilteredConnectPoint(egress));
 
         return builder.build();
     }
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
index 5de5e97..b257c5a 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/IntentCodecTest.java
@@ -33,6 +33,7 @@
 import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.GridType;
 import org.onosproject.net.HostId;
 import org.onosproject.net.Lambda;
@@ -136,8 +137,9 @@
                         .appId(appId)
                         .selector(emptySelector)
                         .treatment(emptyTreatment)
-                        .ingressPoint(ingress)
-                        .egressPoint(egress).build();
+                        .filteredIngressPoint(new FilteredConnectPoint(ingress))
+                        .filteredEgressPoint(new FilteredConnectPoint(egress))
+                        .build();
 
         final JsonCodec<PointToPointIntent> intentCodec =
                 context.codec(PointToPointIntent.class);
@@ -187,8 +189,8 @@
                         .appId(appId)
                         .selector(selector)
                         .treatment(treatment)
-                        .ingressPoint(ingress)
-                        .egressPoint(egress)
+                        .filteredIngressPoint(new FilteredConnectPoint(ingress))
+                        .filteredEgressPoint(new FilteredConnectPoint(egress))
                         .constraints(constraints)
                         .build();
 
@@ -235,10 +237,10 @@
 
         PointToPointIntent pointIntent = (PointToPointIntent) intent;
         assertThat(pointIntent.priority(), is(55));
-        assertThat(pointIntent.ingressPoint().deviceId(), is(did("0000000000000001")));
-        assertThat(pointIntent.ingressPoint().port(), is(PortNumber.portNumber(1)));
-        assertThat(pointIntent.egressPoint().deviceId(), is(did("0000000000000007")));
-        assertThat(pointIntent.egressPoint().port(), is(PortNumber.portNumber(2)));
+        assertThat(pointIntent.filteredIngressPoint().connectPoint().deviceId(), is(did("0000000000000001")));
+        assertThat(pointIntent.filteredIngressPoint().connectPoint().port(), is(PortNumber.portNumber(1)));
+        assertThat(pointIntent.filteredEgressPoint().connectPoint().deviceId(), is(did("0000000000000007")));
+        assertThat(pointIntent.filteredEgressPoint().connectPoint().port(), is(PortNumber.portNumber(2)));
 
         assertThat(pointIntent.constraints(), hasSize(1));
 
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/IntentJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/IntentJsonMatcher.java
index f192e44..0a48e30 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/IntentJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/IntentJsonMatcher.java
@@ -98,7 +98,7 @@
         final PointToPointIntent pointToPointIntent = (PointToPointIntent) intent;
 
         // check ingress connection
-        final ConnectPoint ingress = pointToPointIntent.ingressPoint();
+        final ConnectPoint ingress = pointToPointIntent.filteredIngressPoint().connectPoint();
         final ConnectPointJsonMatcher ingressMatcher =
                 ConnectPointJsonMatcher.matchesConnectPoint(ingress);
         final JsonNode jsonIngress = jsonIntent.get("ingressPoint");
@@ -111,7 +111,7 @@
         }
 
         // check egress connection
-        final ConnectPoint egress = pointToPointIntent.egressPoint();
+        final ConnectPoint egress = pointToPointIntent.filteredEgressPoint().connectPoint();
         final ConnectPointJsonMatcher egressMatcher =
                 ConnectPointJsonMatcher.matchesConnectPoint(egress);
         final JsonNode jsonEgress = jsonIntent.get("egressPoint");
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
index f694dee..35876d6 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
@@ -261,7 +261,7 @@
         // remove associated group if there is one
         if (intent instanceof PointToPointIntent) {
             PointToPointIntent pointIntent = (PointToPointIntent) intent;
-            DeviceId deviceId = pointIntent.ingressPoint().deviceId();
+            DeviceId deviceId = pointIntent.filteredIngressPoint().connectPoint().deviceId();
             GroupKey groupKey = PointToPointIntentCompiler.makeGroupKey(intent.id());
             groupService.removeGroup(deviceId, groupKey,
                                      intent.appId());
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompiler.java
index b85addd..acdaddd 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompiler.java
@@ -461,7 +461,7 @@
     private List<FlowRule> createFailoverFlowRules(PointToPointIntent intent) {
         List<FlowRule> flowRules = new ArrayList<>();
 
-        ConnectPoint ingress = intent.ingressPoint();
+        ConnectPoint ingress = intent.filteredIngressPoint().connectPoint();
         DeviceId deviceId = ingress.deviceId();
 
         // flow rule with failover traffic treatment
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/TwoWayP2PIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/TwoWayP2PIntentCompiler.java
index 9f3d4b0..753e04f 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/TwoWayP2PIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/TwoWayP2PIntentCompiler.java
@@ -19,6 +19,7 @@
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.PointToPointIntent;
 import org.onosproject.net.intent.TwoWayP2PIntent;
@@ -50,8 +51,8 @@
                         .key(intent.key())
                         .selector(intent.selector())
                         .treatment(intent.treatment())
-                        .ingressPoint(intent.one())
-                        .egressPoint(intent.two())
+                        .filteredIngressPoint(new FilteredConnectPoint(intent.one()))
+                        .filteredEgressPoint(new FilteredConnectPoint(intent.two()))
                         .constraints(intent.constraints())
                         .priority(intent.priority())
                         .resourceGroup(intent.resourceGroup())
@@ -61,8 +62,8 @@
                         .key(intent.key())
                         .selector(intent.selector())
                         .treatment(intent.treatment())
-                        .ingressPoint(intent.two())
-                        .egressPoint(intent.one())
+                        .filteredIngressPoint(new FilteredConnectPoint(intent.two()))
+                        .filteredEgressPoint(new FilteredConnectPoint(intent.one()))
                         .constraints(intent.constraints())
                         .priority(intent.priority())
                         .resourceGroup(intent.resourceGroup())
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/VirtualNetworkIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/VirtualNetworkIntentCompiler.java
index 90ad393..bf92873 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/VirtualNetworkIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/VirtualNetworkIntentCompiler.java
@@ -31,6 +31,7 @@
 import org.onosproject.incubator.net.virtual.VirtualNetworkStore;
 import org.onosproject.incubator.net.virtual.VirtualPort;
 import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
 import org.onosproject.net.intent.Intent;
@@ -175,8 +176,8 @@
         PointToPointIntent physicalIntent = PointToPointIntent.builder()
                 .key(intentKey)
                 .appId(intent.appId())
-                .ingressPoint(ingressPoint)
-                .egressPoint(egressPoint)
+                .filteredIngressPoint(new FilteredConnectPoint(ingressPoint))
+                .filteredEgressPoint(new FilteredConnectPoint(egressPoint))
                 .constraints(intent.constraints())
                 .selector(intent.selector())
                 .treatment(intent.treatment())
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/phase/CompilingTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/phase/CompilingTest.java
index c504501..a4c5674 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/phase/CompilingTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/phase/CompilingTest.java
@@ -24,6 +24,7 @@
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultLink;
 import org.onosproject.net.DefaultPath;
+import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
 import org.onosproject.net.flow.DefaultTrafficSelector;
@@ -89,8 +90,8 @@
                 .appId(appId)
                 .selector(selector)
                 .treatment(treatment)
-                .ingressPoint(cp1)
-                .egressPoint(cp3)
+                .filteredIngressPoint(new FilteredConnectPoint(cp1))
+                .filteredEgressPoint(new FilteredConnectPoint(cp3))
                 .build();
         compiled = PathIntent.builder()
                 .appId(appId)
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java
index a9c1887..b32695d 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java
@@ -221,8 +221,8 @@
 
             private void buildPointToPointDetails(PointToPointIntent intent,
                                                   StringBuilder sb) {
-                ConnectPoint ingress = intent.ingressPoint();
-                ConnectPoint egress = intent.egressPoint();
+                ConnectPoint ingress = intent.filteredIngressPoint().connectPoint();
+                ConnectPoint egress = intent.filteredEgressPoint().connectPoint();
                 sb.append(" Ingress: ")
                         .append(ingress.elementId())
                         .append('/')
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TopoIntentFilter.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TopoIntentFilter.java
index 436bc0d..4565a4e 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TopoIntentFilter.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TopoIntentFilter.java
@@ -260,8 +260,8 @@
                                      Iterable<ConnectPoint> edgePoints) {
         for (ConnectPoint point : edgePoints) {
             // Bail if intent does not involve this edge point.
-            if (!point.equals(intent.egressPoint()) &&
-                    !point.equals(intent.ingressPoint())) {
+            if (!point.equals(intent.filteredEgressPoint().connectPoint()) &&
+                    !point.equals(intent.filteredIngressPoint().connectPoint())) {
                 return false;
             }
         }
