diff --git a/core/api/src/main/java/org/onosproject/net/intent/ConnectivityIntent.java b/core/api/src/main/java/org/onosproject/net/intent/ConnectivityIntent.java
index 305d103..23e6c02 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/ConnectivityIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/ConnectivityIntent.java
@@ -61,7 +61,8 @@
                                  Collection<NetworkResource> resources,
                                  TrafficSelector selector,
                                  TrafficTreatment treatment) {
-        this(appId, null, resources, selector, treatment, Collections.emptyList());
+        this(appId, null, resources, selector, treatment, Collections.emptyList(),
+                DEFAULT_INTENT_PRIORITY);
     }
 
     /**
@@ -83,7 +84,8 @@
                                  Collection<NetworkResource> resources,
                                  TrafficSelector selector,
                                  TrafficTreatment treatment) {
-        this(appId, key, resources, selector, treatment, Collections.emptyList());
+        this(appId, key, resources, selector, treatment, Collections.emptyList(),
+                DEFAULT_INTENT_PRIORITY);
     }
 
     /**
@@ -99,6 +101,7 @@
      * @param selector    traffic selector
      * @param treatment   treatment
      * @param constraints optional prioritized list of constraints
+     * @param priority    priority to use for flows generated by this intent
      * @throws NullPointerException if the selector or treatment is null
      */
 
@@ -107,8 +110,9 @@
                                  Collection<NetworkResource> resources,
                                  TrafficSelector selector,
                                  TrafficTreatment treatment,
-                                 List<Constraint> constraints) {
-        super(appId, key, resources);
+                                 List<Constraint> constraints,
+                                 int priority) {
+        super(appId, key, resources, priority);
         this.selector = checkNotNull(selector);
         this.treatment = checkNotNull(treatment);
         this.constraints = checkNotNull(constraints);
@@ -126,6 +130,7 @@
      * @param selector    traffic selector
      * @param treatment   treatment
      * @param constraints optional prioritized list of constraints
+     * @param priority    priority to use for flows generated by this intent
      * @throws NullPointerException if the selector or treatment is null
      */
 
@@ -133,8 +138,9 @@
                                  Collection<NetworkResource> resources,
                                  TrafficSelector selector,
                                  TrafficTreatment treatment,
-                                 List<Constraint> constraints) {
-        super(appId, null, resources);
+                                 List<Constraint> constraints,
+                                 int priority) {
+        super(appId, null, resources, priority);
         this.selector = checkNotNull(selector);
         this.treatment = checkNotNull(treatment);
         this.constraints = checkNotNull(constraints);
diff --git a/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java b/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java
index d47594a..d9a1feb 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java
@@ -106,7 +106,8 @@
                             TrafficSelector selector,
                             TrafficTreatment treatment,
                             List<Constraint> constraints) {
-        super(appId, key, Collections.emptyList(), selector, treatment, constraints);
+        super(appId, key, Collections.emptyList(), selector, treatment, constraints,
+                DEFAULT_INTENT_PRIORITY);
 
         // TODO: consider whether the case one and two are same is allowed
         this.one = checkNotNull(one);
@@ -146,6 +147,7 @@
                 .add("id", id())
                 .add("key", key())
                 .add("appId", appId())
+                .add("priority", priority())
                 .add("resources", resources())
                 .add("selector", selector())
                 .add("treatment", treatment())
diff --git a/core/api/src/main/java/org/onosproject/net/intent/Intent.java b/core/api/src/main/java/org/onosproject/net/intent/Intent.java
index 4cca45d..7621c7d 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/Intent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/Intent.java
@@ -22,6 +22,7 @@
 import java.util.Collection;
 import java.util.Objects;
 
+import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
@@ -38,6 +39,11 @@
     private final ApplicationId appId;
     private final Key key;
 
+    private final int priority;
+    public static final int DEFAULT_INTENT_PRIORITY = 100;
+    public static final int MAX_PRIORITY = (1 << 16) - 1;
+    public static final int MIN_PRIORITY = 1;
+
     private final Collection<NetworkResource> resources;
 
     private static IdGenerator idGenerator;
@@ -50,6 +56,7 @@
         this.appId = null;
         this.key = null;
         this.resources = null;
+        this.priority = DEFAULT_INTENT_PRIORITY;
     }
 
     /**
@@ -60,7 +67,7 @@
      */
     protected Intent(ApplicationId appId,
                      Collection<NetworkResource> resources) {
-        this(appId, null, resources);
+        this(appId, null, resources, DEFAULT_INTENT_PRIORITY);
     }
 
         /**
@@ -72,11 +79,14 @@
          */
     protected Intent(ApplicationId appId,
                      Key key,
-                     Collection<NetworkResource> resources) {
+                     Collection<NetworkResource> resources,
+                     int priority) {
         checkState(idGenerator != null, "Id generator is not bound.");
+        checkArgument(priority <= MAX_PRIORITY && priority >= MIN_PRIORITY);
         this.id = IntentId.valueOf(idGenerator.getNewId());
         this.appId = checkNotNull(appId, "Application ID cannot be null");
         this.key = (key != null) ? key : Key.of(id.fingerprint(), appId);
+        this.priority = priority;
         this.resources = checkNotNull(resources);
     }
 
@@ -99,6 +109,15 @@
     }
 
     /**
+     * Returns the priority of the intent.
+     *
+     * @return intent priority
+     */
+    public int priority() {
+        return priority;
+    }
+
+    /**
      * Returns the collection of resources required for this intent.
      *
      * @return collection of resources; may be null
diff --git a/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java b/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java
index 55c0cfb..17451cb 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java
@@ -59,7 +59,7 @@
                                 ConnectPoint ingressPoint,
                                 ConnectPoint egressPoint) {
         this(appId, selector, treatment, links, ingressPoint, egressPoint,
-             Collections.emptyList());
+             Collections.emptyList(), DEFAULT_INTENT_PRIORITY);
     }
 
     /**
@@ -74,6 +74,7 @@
      * @param ingressPoint ingress point
      * @param egressPoint egress point
      * @param constraints optional list of constraints
+     * @param priority    priority to use for the flows generated by this intent
      * @throws NullPointerException {@code path} is null
      */
     public LinkCollectionIntent(ApplicationId appId,
@@ -82,8 +83,9 @@
                                 Set<Link> links,
                                 ConnectPoint ingressPoint,
                                 ConnectPoint egressPoint,
-                                List<Constraint> constraints) {
-        super(appId, resources(links), selector, treatment, constraints);
+                                List<Constraint> constraints,
+                                int priority) {
+        super(appId, resources(links), selector, treatment, constraints, priority);
         this.links = links;
         this.ingressPoints = ImmutableSet.of(ingressPoint);
         this.egressPoints = ImmutableSet.of(egressPoint);
@@ -101,6 +103,7 @@
      * @param ingressPoints Set of ingress points
      * @param egressPoints Set of egress points
      * @param constraints  the constraints
+     * @param priority     priority to use for the flows generated by this intent
      * @throws NullPointerException {@code path} is null
      */
     public LinkCollectionIntent(ApplicationId appId,
@@ -109,8 +112,9 @@
                                 Set<Link> links,
                                 Set<ConnectPoint> ingressPoints,
                                 Set<ConnectPoint> egressPoints,
-                                List<Constraint> constraints) {
-        super(appId, resources(links), selector, treatment, constraints);
+                                List<Constraint> constraints,
+                                int priority) {
+        super(appId, resources(links), selector, treatment, constraints, priority);
 
         this.links = links;
         this.ingressPoints = ImmutableSet.copyOf(ingressPoints);
@@ -166,6 +170,7 @@
                 .add("id", id())
                 .add("key", key())
                 .add("appId", appId())
+                .add("priority", priority())
                 .add("resources", resources())
                 .add("selector", selector())
                 .add("treatment", treatment())
diff --git a/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java b/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java
index 0c13e3f..d7f8535 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java
@@ -74,7 +74,8 @@
                               Optional<MplsLabel> egressLabel,
                               List<Constraint> constraints) {
 
-        super(appId, Collections.emptyList(), selector, treatment, constraints);
+        super(appId, Collections.emptyList(), selector, treatment, constraints,
+                DEFAULT_INTENT_PRIORITY);
 
         checkNotNull(ingressPoint);
         checkNotNull(egressPoint);
@@ -144,6 +145,7 @@
         return MoreObjects.toStringHelper(getClass())
                 .add("id", id())
                 .add("appId", appId())
+                .add("priority", priority())
                 .add("selector", selector())
                 .add("treatment", treatment())
                 .add("ingressPoint", ingressPoint)
diff --git a/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java b/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java
index f6602c9..2102dba 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java
@@ -59,7 +59,8 @@
     public MplsPathIntent(ApplicationId appId, TrafficSelector selector,
             TrafficTreatment treatment, Path path, Optional<MplsLabel> ingressLabel,
             Optional<MplsLabel> egressLabel, List<Constraint> constraints) {
-        super(appId, selector, treatment, path, constraints);
+        super(appId, selector, treatment, path, constraints,
+                DEFAULT_INTENT_PRIORITY);
 
         checkNotNull(ingressLabel);
         checkNotNull(egressLabel);
diff --git a/core/api/src/main/java/org/onosproject/net/intent/MultiPointToSinglePointIntent.java b/core/api/src/main/java/org/onosproject/net/intent/MultiPointToSinglePointIntent.java
index 19fcc7c..721ff17 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/MultiPointToSinglePointIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/MultiPointToSinglePointIntent.java
@@ -56,7 +56,8 @@
                                          TrafficTreatment treatment,
                                          Set<ConnectPoint> ingressPoints,
                                          ConnectPoint egressPoint) {
-        this(appId, selector, treatment, ingressPoints, egressPoint, Collections.emptyList());
+        this(appId, selector, treatment, ingressPoints, egressPoint,
+                Collections.emptyList(), DEFAULT_INTENT_PRIORITY);
     }
 
     /**
@@ -70,6 +71,7 @@
      * @param ingressPoints set of ports from which ingress traffic originates
      * @param egressPoint   port to which traffic will egress
      * @param constraints   constraints to apply to the intent
+     * @param priority      priority to use for flows generated by this intent
      * @throws NullPointerException     if {@code ingressPoints} or
      *                                  {@code egressPoint} is null.
      * @throws IllegalArgumentException if the size of {@code ingressPoints} is
@@ -81,8 +83,10 @@
                                          TrafficTreatment treatment,
                                          Set<ConnectPoint> ingressPoints,
                                          ConnectPoint egressPoint,
-                                         List<Constraint> constraints) {
-        super(appId, key, Collections.emptyList(), selector, treatment, constraints);
+                                         List<Constraint> constraints,
+                                         int priority) {
+        super(appId, key, Collections.emptyList(), selector, treatment, constraints,
+                priority);
 
         checkNotNull(ingressPoints);
         checkArgument(!ingressPoints.isEmpty(), "Ingress point set cannot be empty");
@@ -104,6 +108,7 @@
      * @param ingressPoints set of ports from which ingress traffic originates
      * @param egressPoint   port to which traffic will egress
      * @param constraints   constraints to apply to the intent
+     * @param priority      priority to use for flows generated by this intent
      * @throws NullPointerException     if {@code ingressPoints} or
      *                                  {@code egressPoint} is null.
      * @throws IllegalArgumentException if the size of {@code ingressPoints} is
@@ -114,8 +119,10 @@
                                          TrafficTreatment treatment,
                                          Set<ConnectPoint> ingressPoints,
                                          ConnectPoint egressPoint,
-                                         List<Constraint> constraints) {
-        this(appId, null, selector, treatment, ingressPoints, egressPoint, constraints);
+                                         List<Constraint> constraints,
+                                         int priority) {
+        this(appId, null, selector, treatment, ingressPoints, egressPoint,
+                constraints, priority);
     }
 
     /**
@@ -152,6 +159,7 @@
                 .add("id", id())
                 .add("key", key())
                 .add("appId", appId())
+                .add("priority", priority())
                 .add("resources", resources())
                 .add("selector", selector())
                 .add("treatment", treatment())
diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
index d51abbb..091ebc5 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java
@@ -54,7 +54,7 @@
     public OpticalConnectivityIntent(ApplicationId appId,
                                      Key key,
                                      ConnectPoint src, ConnectPoint dst) {
-        super(appId, key, Collections.emptyList());
+        super(appId, key, Collections.emptyList(), DEFAULT_INTENT_PRIORITY);
         this.src = src;
         this.dst = dst;
     }
diff --git a/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java b/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java
index e307e2e..13fa61e 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java
@@ -48,7 +48,8 @@
      */
     public PathIntent(ApplicationId appId, TrafficSelector selector,
                       TrafficTreatment treatment, Path path) {
-        this(appId, selector, treatment, path, Collections.emptyList());
+        this(appId, selector, treatment, path, Collections.emptyList(),
+                DEFAULT_INTENT_PRIORITY);
     }
 
     /**
@@ -60,11 +61,14 @@
      * @param treatment treatment
      * @param path      traversed links
      * @param constraints  optional list of constraints
+     * @param priority  priority to use for the generated flows
      * @throws NullPointerException {@code path} is null
      */
     public PathIntent(ApplicationId appId, TrafficSelector selector,
-                      TrafficTreatment treatment, Path path, List<Constraint> constraints) {
-        super(appId, resources(path.links()), selector, treatment, constraints);
+                      TrafficTreatment treatment, Path path, List<Constraint> constraints,
+                      int priority) {
+        super(appId, resources(path.links()), selector, treatment, constraints,
+                priority);
         PathIntent.validate(path.links());
         this.path = path;
     }
@@ -123,6 +127,7 @@
         return MoreObjects.toStringHelper(getClass())
                 .add("id", id())
                 .add("appId", appId())
+                .add("priority", priority())
                 .add("resources", resources())
                 .add("selector", selector())
                 .add("treatment", treatment())
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 d8434ad..2df7b8b 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
@@ -49,6 +49,7 @@
      * @param ingressPoint ingress port
      * @param egressPoint  egress port
      * @param constraints  optional list of constraints
+     * @param priority     priority to use for flows generated by this intent
      * @throws NullPointerException if {@code ingressPoint} or {@code egressPoints} is null.
      */
     public PointToPointIntent(ApplicationId appId,
@@ -57,8 +58,10 @@
                               TrafficTreatment treatment,
                               ConnectPoint ingressPoint,
                               ConnectPoint egressPoint,
-                              List<Constraint> constraints) {
-        super(appId, key, Collections.emptyList(), selector, treatment, constraints);
+                              List<Constraint> constraints,
+                              int priority) {
+        super(appId, key, Collections.emptyList(), selector, treatment, constraints,
+                priority);
 
         checkNotNull(ingressPoint);
         checkNotNull(egressPoint);
@@ -85,7 +88,8 @@
                               ConnectPoint ingressPoint,
                               ConnectPoint egressPoint) {
         this(appId, null, selector, treatment, ingressPoint, egressPoint,
-             ImmutableList.of(new LinkTypeConstraint(false, Link.Type.OPTICAL)));
+             ImmutableList.of(new LinkTypeConstraint(false, Link.Type.OPTICAL)),
+                DEFAULT_INTENT_PRIORITY);
     }
 
     /**
@@ -98,14 +102,17 @@
      * @param ingressPoint ingress port
      * @param egressPoint  egress port
      * @param constraints  optional list of constraints
+     * @param priority     priority to use for flows generated by this intent
      * @throws NullPointerException if {@code ingressPoint} or {@code egressPoints} is null.
      */
     public PointToPointIntent(ApplicationId appId, TrafficSelector selector,
                               TrafficTreatment treatment,
                               ConnectPoint ingressPoint,
                               ConnectPoint egressPoint,
-                              List<Constraint> constraints) {
-        super(appId, null, Collections.emptyList(), selector, treatment, constraints);
+                              List<Constraint> constraints,
+                              int priority) {
+        super(appId, null, Collections.emptyList(), selector, treatment,
+                constraints, priority);
 
         checkNotNull(ingressPoint);
         checkNotNull(egressPoint);
@@ -150,6 +157,7 @@
                 .add("id", id())
                 .add("key", key())
                 .add("appId", appId())
+                .add("priority", priority())
                 .add("resources", resources())
                 .add("selector", selector())
                 .add("treatment", treatment())
diff --git a/core/api/src/main/java/org/onosproject/net/intent/SinglePointToMultiPointIntent.java b/core/api/src/main/java/org/onosproject/net/intent/SinglePointToMultiPointIntent.java
index 2531fae..129c4a6 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/SinglePointToMultiPointIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/SinglePointToMultiPointIntent.java
@@ -54,7 +54,9 @@
     public SinglePointToMultiPointIntent(ApplicationId appId,
             TrafficSelector selector, TrafficTreatment treatment,
             ConnectPoint ingressPoint, Set<ConnectPoint> egressPoints) {
-        this(appId, null, selector, treatment, ingressPoint, egressPoints, Collections.emptyList());
+        this(appId, null, selector, treatment, ingressPoint, egressPoints,
+                Collections.emptyList(),
+                DEFAULT_INTENT_PRIORITY);
     }
 
     /**
@@ -67,6 +69,7 @@
      * @param ingressPoint port on which traffic will ingress
      * @param egressPoints set of ports on which traffic will egress
      * @param constraints constraints to apply to the intent
+     * @param priority priority to use for flows generated by this intent
      * @throws NullPointerException if {@code ingressPoint} or
      *             {@code egressPoints} is null
      * @throws IllegalArgumentException if the size of {@code egressPoints} is
@@ -76,8 +79,10 @@
             Key key,
             TrafficSelector selector, TrafficTreatment treatment,
             ConnectPoint ingressPoint, Set<ConnectPoint> egressPoints,
-            List<Constraint> constraints) {
-        super(appId, key, Collections.emptyList(), selector, treatment, constraints);
+            List<Constraint> constraints,
+            int priority) {
+        super(appId, key, Collections.emptyList(), selector, treatment, constraints,
+                priority);
         checkNotNull(egressPoints);
         checkNotNull(ingressPoint);
         checkArgument(!egressPoints.isEmpty(), "Egress point set cannot be empty");
@@ -122,6 +127,7 @@
                 .add("id", id())
                 .add("key", key())
                 .add("appId", appId())
+                .add("priority", priority())
                 .add("resources", resources())
                 .add("selector", selector())
                 .add("treatment", treatment())
diff --git a/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java b/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java
index b6d0246..118e137 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java
@@ -107,7 +107,8 @@
                            TrafficSelector selector,
                            TrafficTreatment treatment,
                            List<Constraint> constraints) {
-        super(appId, key, Collections.emptyList(), selector, treatment, constraints);
+        super(appId, key, Collections.emptyList(), selector, treatment, constraints,
+                DEFAULT_INTENT_PRIORITY);
 
         // TODO: consider whether the case one and two are same is allowed
         this.one = checkNotNull(one);
@@ -147,6 +148,7 @@
                 .add("id", id())
                 .add("key", key())
                 .add("appId", appId())
+                .add("priority", priority())
                 .add("resources", resources())
                 .add("selector", selector())
                 .add("treatment", treatment())
diff --git a/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java b/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
index 0327390..a9ae782 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
@@ -134,7 +134,8 @@
                         links1,
                         ingress,
                         egress,
-                        constraints);
+                        constraints,
+                        8888);
 
         final Set<Link> createdLinks = collectionIntent.links();
         assertThat(createdLinks, hasSize(1));
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/HostToHostIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/HostToHostIntentCompiler.java
index df8ef04..60306b2 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/HostToHostIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/HostToHostIntentCompiler.java
@@ -98,7 +98,8 @@
         TrafficSelector selector = builder(intent.selector())
                 .matchEthSrc(src.mac()).matchEthDst(dst.mac()).build();
         return new PathIntent(intent.appId(), selector, intent.treatment(),
-                              path, intent.constraints());
+                              path, intent.constraints(),
+                              intent.priority());
     }
 
 }
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 b4889f4..6403019 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
@@ -89,12 +89,14 @@
             }
         }
 
+        Set<ConnectPoint> egress = ImmutableSet.of(intent.egressPoint());
         Intent result = new LinkCollectionIntent(intent.appId(),
                                                  intent.selector(), intent.treatment(),
                                                  Sets.newHashSet(links.values()),
                                                  intent.ingressPoints(),
                                                  ImmutableSet.of(intent.egressPoint()),
-                                                 Collections.emptyList());
+                                                 Collections.emptyList(),
+                                                 intent.priority());
         return Arrays.asList(result);
     }
 
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 9371586..0f897a4 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
@@ -93,7 +93,8 @@
                                     PointToPointIntent intent) {
         return new PathIntent(intent.appId(),
                               intent.selector(), intent.treatment(), path,
-                              intent.constraints());
+                              intent.constraints(),
+                              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 8360820..4b2260e 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
@@ -70,7 +70,9 @@
                                                  intent.selector(),
                                                  intent.treatment(), links,
                                                  ImmutableSet.of(intent.ingressPoint()),
-                                                 intent.egressPoints(), Collections.emptyList());
+                                                 intent.egressPoints(),
+                                                 Collections.emptyList(),
+                                                 intent.priority());
 
         return Arrays.asList(result);
     }
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 6c5b7f3..af603d5 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
@@ -51,11 +51,11 @@
                 new PointToPointIntent(intent.appId(), intent.key(),
                                        intent.selector(), intent.treatment(),
                                        intent.one(), intent.two(),
-                                       intent.constraints()),
+                                       intent.constraints(), Intent.DEFAULT_INTENT_PRIORITY),
                 new PointToPointIntent(intent.appId(), intent.key(),
                                        intent.selector(), intent.treatment(),
                                        intent.two(), intent.one(),
-                                       intent.constraints()));
+                                       intent.constraints(), Intent.DEFAULT_INTENT_PRIORITY));
 
     }
 }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/LinkCollectionIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/LinkCollectionIntentInstaller.java
index 54ff5fc..e715b87 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/LinkCollectionIntentInstaller.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/LinkCollectionIntentInstaller.java
@@ -186,7 +186,7 @@
                 treatment = intentTreatment;
             }
             FlowRule rule = new DefaultFlowRule(deviceId,
-                selector, treatment, 123, appId,
+                selector, treatment, intent.priority(), appId,
                 new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)),
                 0, true);
             result.add(new FlowRuleOperation(rule, operation));
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/MplsPathIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/MplsPathIntentInstaller.java
index dbe9233..bb38fa5 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/MplsPathIntentInstaller.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/MplsPathIntentInstaller.java
@@ -280,7 +280,7 @@
                                             deviceId,
                                             selector,
                                             treat,
-                                            123, // FIXME 123
+                                            intent.priority(),
                                             appId,
                                             0,
                                             true);
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/PathIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/PathIntentInstaller.java
index 5230736..7a06024 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/PathIntentInstaller.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/PathIntentInstaller.java
@@ -99,7 +99,7 @@
                     .setOutput(link.src().port()).build();
 
             FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
-                    builder.build(), treatment, 123, //FIXME 123
+                    builder.build(), treatment, intent.priority(),
                     appId,
                     new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)),
                     0, true);
@@ -127,7 +127,7 @@
                     (links.hasNext() ? builder() : builder(intent.treatment()))
                             .setOutput(link.src().port()).build();
             FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
-                    builder.build(), treatment, 123, appId,
+                    builder.build(), treatment, intent.priority(), appId,
                     new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)),
                     0, true);
             rules.add(new FlowRuleOperation(rule, FlowRuleOperation.Type.REMOVE));
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompilerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompilerTest.java
index b651beb..aedc124 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompilerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/compiler/PointToPointIntentCompilerTest.java
@@ -90,7 +90,7 @@
         return new PointToPointIntent(APPID, selector, treatment,
                 connectPoint(ingressIdString, 1),
                 connectPoint(egressIdString, 1),
-                constraints);
+                constraints, Intent.DEFAULT_INTENT_PRIORITY);
     }
 
     /**
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/PathConstraintCalculationTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/PathConstraintCalculationTest.java
index 0ae5903..d0bb843 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/PathConstraintCalculationTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/PathConstraintCalculationTest.java
@@ -74,7 +74,7 @@
     private PathIntent createPathIntent(List<Link> links, List<Constraint> constraints) {
         int hops = links.size() - 1;
         return new PathIntent(APP_ID, selector, treatment,
-                              new DefaultPath(PID, links, hops), constraints);
+                              new DefaultPath(PID, links, hops), constraints, 333);
     }
 
     /**
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/PathIntentInstallerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/PathIntentInstallerTest.java
index 39febcc..695f115 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/PathIntentInstallerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/PathIntentInstallerTest.java
@@ -62,7 +62,8 @@
         installer.coreService = testCoreService;
         installer.intentManager = new MockIntentManager(PathIntent.class);
         intent = new PathIntent(APP_ID, selector, treatment,
-                new DefaultPath(PID, links, hops), ImmutableList.of());
+                new DefaultPath(PID, links, hops), ImmutableList.of(),
+                77);
     }
 
     /**
