diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java
index dfca98b..f9bf42e 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java
@@ -16,7 +16,7 @@
 package org.onosproject.net.intent.constraint;
 
 import org.onosproject.net.Link;
-import org.onosproject.net.resource.Lambda;
+import org.onosproject.net.resource.LambdaResource;
 import org.onosproject.net.resource.LinkResourceService;
 import org.onosproject.net.resource.ResourceRequest;
 import org.onosproject.net.resource.ResourceType;
@@ -30,14 +30,14 @@
  */
 public class LambdaConstraint extends BooleanConstraint {
 
-    private final Lambda lambda;
+    private final LambdaResource lambda;
 
     /**
      * Creates a new optical lambda constraint.
      *
      * @param lambda optional lambda to indicate a specific lambda
      */
-    public LambdaConstraint(Lambda lambda) {
+    public LambdaConstraint(LambdaResource lambda) {
         this.lambda = lambda;
     }
 
@@ -61,7 +61,7 @@
      *
      * @return required lambda
      */
-    public Lambda lambda() {
+    public LambdaResource lambda() {
         return lambda;
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/Lambda.java b/core/api/src/main/java/org/onosproject/net/resource/LambdaResource.java
similarity index 79%
rename from core/api/src/main/java/org/onosproject/net/resource/Lambda.java
rename to core/api/src/main/java/org/onosproject/net/resource/LambdaResource.java
index 3555b12..aa14f70 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/Lambda.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/LambdaResource.java
@@ -20,7 +20,7 @@
 /**
  * Representation of lambda resource.
  */
-public final class Lambda extends LinkResource {
+public final class LambdaResource extends LinkResource {
 
     private final int lambda;
 
@@ -29,12 +29,12 @@
      *
      * @param lambda lambda value to be assigned
      */
-    private Lambda(int lambda) {
+    private LambdaResource(int lambda) {
         this.lambda = lambda;
     }
 
     // Constructor for serialization
-    private Lambda() {
+    private LambdaResource() {
         this.lambda = 0;
     }
 
@@ -42,10 +42,10 @@
      * Creates a new instance with given lambda.
      *
      * @param lambda lambda value to be assigned
-     * @return {@link Lambda} instance with given lambda
+     * @return {@link LambdaResource} instance with given lambda
      */
-    public static Lambda valueOf(int lambda) {
-        return new Lambda(lambda);
+    public static LambdaResource valueOf(int lambda) {
+        return new LambdaResource(lambda);
     }
 
     /**
@@ -59,8 +59,8 @@
 
     @Override
     public boolean equals(Object obj) {
-        if (obj instanceof Lambda) {
-            Lambda that = (Lambda) obj;
+        if (obj instanceof LambdaResource) {
+            LambdaResource that = (LambdaResource) obj;
             return Objects.equals(this.lambda, that.lambda);
         }
         return false;
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LambdaResourceAllocation.java b/core/api/src/main/java/org/onosproject/net/resource/LambdaResourceAllocation.java
index e564059..e34dab5 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LambdaResourceAllocation.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/LambdaResourceAllocation.java
@@ -24,7 +24,7 @@
  */
 public class LambdaResourceAllocation extends LambdaResourceRequest
         implements ResourceAllocation {
-    private final Lambda lambda;
+    private final LambdaResource lambda;
 
     @Override
     public ResourceType type() {
@@ -32,12 +32,12 @@
     }
 
     /**
-     * Creates a new {@link LambdaResourceAllocation} with {@link Lambda}
+     * Creates a new {@link LambdaResourceAllocation} with {@link LambdaResource}
      * object.
      *
      * @param lambda allocated lambda
      */
-    public LambdaResourceAllocation(Lambda lambda) {
+    public LambdaResourceAllocation(LambdaResource lambda) {
         this.lambda = lambda;
     }
 
@@ -46,7 +46,7 @@
      *
      * @return the lambda resource
      */
-    public Lambda lambda() {
+    public LambdaResource lambda() {
         return lambda;
     }
 
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
index 8e89632..279a8bb 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
@@ -37,7 +37,7 @@
 import org.onosproject.net.flow.instructions.Instructions;
 import org.onosproject.net.resource.Bandwidth;
 import org.onosproject.net.resource.BandwidthResourceRequest;
-import org.onosproject.net.resource.Lambda;
+import org.onosproject.net.resource.LambdaResource;
 import org.onosproject.net.resource.LambdaResourceAllocation;
 import org.onosproject.net.resource.LambdaResourceRequest;
 import org.onosproject.net.resource.LinkResourceAllocations;
@@ -179,7 +179,7 @@
         @Override
         public Set<ResourceAllocation> getResourceAllocation(Link link) {
             return ImmutableSet.of(
-                    new LambdaResourceAllocation(Lambda.valueOf(77)),
+                    new LambdaResourceAllocation(LambdaResource.valueOf(77)),
                     new MplsLabelResourceAllocation(MplsLabel.valueOf(10)));
         }
 
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 16a5e9f..988b0b4 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
@@ -26,7 +26,7 @@
 import org.onosproject.net.NetTestTools;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.intent.constraint.LambdaConstraint;
-import org.onosproject.net.resource.Lambda;
+import org.onosproject.net.resource.LambdaResource;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.testing.EqualsTester;
@@ -132,7 +132,7 @@
         final LinkedList<Constraint> constraints = new LinkedList<>();
 
         links1.add(link("src", 1, "dst", 2));
-        constraints.add(new LambdaConstraint(Lambda.valueOf(23)));
+        constraints.add(new LambdaConstraint(LambdaResource.valueOf(23)));
         final LinkCollectionIntent collectionIntent =
                 LinkCollectionIntent.builder()
                         .appId(APP_ID)
diff --git a/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java b/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
index 60006a7..4e549ea 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
@@ -18,7 +18,7 @@
 import org.junit.Test;
 import org.onosproject.net.Link;
 import org.onosproject.net.resource.Bandwidth;
-import org.onosproject.net.resource.Lambda;
+import org.onosproject.net.resource.LambdaResource;
 
 import com.google.common.testing.EqualsTester;
 
@@ -65,11 +65,11 @@
     // Lambda Constraint
 
     final LambdaConstraint lambdaConstraint1 =
-            new LambdaConstraint(Lambda.valueOf(100));
+            new LambdaConstraint(LambdaResource.valueOf(100));
     final LambdaConstraint lambdaConstraintSameAs1 =
-            new LambdaConstraint(Lambda.valueOf(100));
+            new LambdaConstraint(LambdaResource.valueOf(100));
     final LambdaConstraint lambdaConstraint2 =
-            new LambdaConstraint(Lambda.valueOf(200));
+            new LambdaConstraint(LambdaResource.valueOf(200));
 
     /**
      * Checks that the objects were created properly.
