diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceQueryPathCommand.java b/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceQueryPathCommand.java
index 284f776..09a396e 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceQueryPathCommand.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceQueryPathCommand.java
@@ -80,7 +80,8 @@
                 "constraints:            \n" +
                 "   cost            : %s \n" +
                 "   bandwidth       : %s",
-                tunnel.tunnelId().id(), tunnel.src().toString(), tunnel.dst().toString(),
+                tunnel.tunnelId().id(), tunnel.path().src().deviceId().toString(),
+                tunnel.path().dst().deviceId().toString(),
                 tunnel.type().name(), tunnel.tunnelName(), tunnel.annotations().value(COST_TYPE),
                 tunnel.annotations().value(AnnotationKeys.BANDWIDTH));
     }
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceUpdatePathCommand.java b/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceUpdatePathCommand.java
index 058a17f..97a6913 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceUpdatePathCommand.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceUpdatePathCommand.java
@@ -47,7 +47,7 @@
 
     @Option(name = "-c", aliases = "--cost", description = "The cost attribute IGP cost (1) or TE cost (2).",
             required = false, multiValued = false)
-    int cost = -1;
+    Integer cost = null;
 
     @Option(name = "-b", aliases = "--bandwidth", description = "The bandwidth attribute of path. "
             + "Data rate unit is in Bps.", required = false, multiValued = false)
@@ -66,7 +66,7 @@
         }
 
         // Cost validation
-        if (cost != -1) {
+        if (cost != null) {
             if ((cost < 1) || (cost > 2)) {
                 error("The cost attribute value is either IGP cost(1) or TE cost(2).");
                 return;
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/DefaultPcePath.java b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/DefaultPcePath.java
index 42ee274..f0472aa 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/DefaultPcePath.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/DefaultPcePath.java
@@ -162,13 +162,14 @@
     @Override
     public String toString() {
         return toStringHelper(this)
+                .omitNullValues()
                 .add("id", id())
                 .add("source", source)
                 .add("destination", destination)
                 .add("lsptype", lspType)
                 .add("name", name)
-                .add("costConstraint", costConstraint.toString())
-                .add("bandwidthConstraint", bandwidthConstraint.toString())
+                .add("costConstraint", costConstraint)
+                .add("bandwidthConstraint", bandwidthConstraint)
                 .toString();
     }
 
@@ -241,8 +242,8 @@
         @Override
         public Builder of(Tunnel tunnel) {
             this.id = TunnelId.valueOf(tunnel.tunnelId().id());
-            this.source = tunnel.src().toString();
-            this.destination = tunnel.dst().toString();
+            this.source = tunnel.path().src().deviceId().toString();
+            this.destination = tunnel.path().dst().deviceId().toString();
             this.name = tunnel.tunnelName().toString();
             // LSP type
             String lspType = tunnel.annotations().value(PcepAnnotationKeys.LSP_SIG_TYPE);
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
index 4a0b3ac..c622f0e 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
@@ -509,7 +509,7 @@
             }
 
             if (existingBwValue != null) {
-                if (bwConstraintValue == 0 && bwConstraint != null) {
+                if (bwConstraint == null) {
                     bwConstraintValue = existingBwValue.bps();
                 }
                 //If bandwidth constraints not specified , take existing bandwidth for shared bandwidth calculation
@@ -526,6 +526,11 @@
         constraints.add(CapabilityConstraint.of(CapabilityType.valueOf(lspSigType)));
         if (costConstraint != null) {
             constraints.add(costConstraint);
+        } else {
+            //Take cost constraint from old tunnel if it is not specified in update flow
+            costType = tunnel.annotations().value(COST_TYPE);
+            costConstraint = CostConstraint.of(CostConstraint.Type.valueOf(costType));
+            constraints.add(costConstraint);
         }
 
         computedPathSet = computePath(links.get(0).src().deviceId(), links.get(links.size() - 1).dst().deviceId(),
@@ -845,6 +850,10 @@
             return;
         }
 
+        if (pceStore.getTunnelInfo(tunnel.tunnelId()) == null) {
+            //If bandwidth for old tunnel is not allocated i,e 0 then no need to release
+            return;
+        }
         resourceService.release(pceStore.getTunnelInfo(tunnel.tunnelId()).tunnelConsumerId());
         return;
 
@@ -1211,7 +1220,7 @@
                     localLspIdFreeList.add(Short.valueOf(tunnel.annotations().value(LOCAL_LSP_ID)));
                 }
                 // If not zero bandwidth, and delegated (initiated LSPs will also be delegated).
-                if (Float.parseFloat(tunnel.annotations().value(BANDWIDTH)) != 0
+                if (bwConstraintValue != 0
                         && mastershipService.getLocalRole(tunnel.path().src().deviceId()) == MastershipRole.MASTER) {
                     releaseBandwidth(tunnel);
                 }
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/DistributedPceStore.java b/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/DistributedPceStore.java
index ea5dca0..47f1c46 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/DistributedPceStore.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/DistributedPceStore.java
@@ -98,6 +98,17 @@
     // List of PCC LSR ids whose BGP device information was not available to perform
     // label db sync.
     private HashSet<DeviceId> pendinglabelDbSyncPccMap = new HashSet();
+    private static final Serializer SERIALIZER = Serializer
+            .using(new KryoNamespace.Builder().register(KryoNamespaces.API)
+                    .register(PcePathInfo.class)
+                    .register(CostConstraint.class)
+                    .register(CostConstraint.Type.class)
+                    .register(BandwidthConstraint.class)
+                    .register(SharedBandwidthConstraint.class)
+                    .register(CapabilityConstraint.class)
+                    .register(CapabilityConstraint.CapabilityType.class)
+                    .register(LspType.class)
+                    .build());
 
     @Activate
     protected void activate() {
@@ -136,19 +147,7 @@
 
         failedPathSet = storageService.<PcePathInfo>setBuilder()
                 .withName("failed-path-info")
-                .withSerializer(Serializer.using(
-                        new KryoNamespace.Builder()
-                                .register(KryoNamespaces.API)
-                                .register(PcePathInfo.class,
-                                          CostConstraint.class,
-                                          CostConstraint.Type.class,
-                                          BandwidthConstraint.class,
-                                          SharedBandwidthConstraint.class,
-                                          CapabilityConstraint.class,
-                                          CapabilityConstraint.CapabilityType.class,
-                                          LspType.class)
-                                .build()))
-
+                .withSerializer(SERIALIZER)
                 .build()
                 .asDistributedSet();
 
diff --git a/apps/pce/app/src/test/java/org/onosproject/pce/pceservice/PceManagerTest.java b/apps/pce/app/src/test/java/org/onosproject/pce/pceservice/PceManagerTest.java
index c3e21b4..6962b49 100644
--- a/apps/pce/app/src/test/java/org/onosproject/pce/pceservice/PceManagerTest.java
+++ b/apps/pce/app/src/test/java/org/onosproject/pce/pceservice/PceManagerTest.java
@@ -618,7 +618,10 @@
         build4RouterTopo(false, true, true, true, 100);
 
         // Setup tunnel.
-        boolean result = pceManager.setupPath(D1.deviceId(), D2.deviceId(), "T123", null, WITH_SIGNALLING);
+        List<Constraint> constraints = new LinkedList<Constraint>();
+        CostConstraint costConstraint = new CostConstraint(TE_COST);
+        constraints.add(costConstraint);
+        boolean result = pceManager.setupPath(D1.deviceId(), D2.deviceId(), "T123", constraints, WITH_SIGNALLING);
         assertThat(result, is(true));
 
         Collection<Tunnel> tunnels = (Collection<Tunnel>) pceManager.queryAllPath();
diff --git a/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathCodec.java b/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathCodec.java
index 034d045..7692c7d 100644
--- a/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathCodec.java
+++ b/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathCodec.java
@@ -21,6 +21,8 @@
 import org.onosproject.codec.JsonCodec;
 import org.onosproject.pce.pceservice.PcePath;
 import org.onosproject.pce.pceservice.DefaultPcePath;
+import org.onosproject.net.intent.constraint.BandwidthConstraint;
+import org.onosproject.pce.pceservice.constraint.CostConstraint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -70,6 +72,11 @@
         jNode = json.get(LSP_TYPE);
         if (jNode != null) {
             String lspType = jNode.asText();
+            //Validating LSP type
+            int type = Integer.parseInt(lspType);
+            if ((type < 0) || (type > 2)) {
+                return null;
+            }
             resultBuilder.lspType(lspType);
         }
 
@@ -87,6 +94,11 @@
             jNode = constraintJNode.get(COST);
             if (jNode != null) {
                 String cost = jNode.asText();
+                //Validating Cost type
+                int costType = Integer.parseInt(cost);
+                if ((costType < 1) || (costType > 2)) {
+                    return null;
+                }
                 resultBuilder.costConstraint(cost);
             }
 
@@ -94,6 +106,10 @@
             jNode = constraintJNode.get(BANDWIDTH);
             if (jNode != null) {
                 String bandwidth = jNode.asText();
+                double bw = Double.parseDouble(bandwidth);
+                if (bw < 0) {
+                    return null;
+                }
                 resultBuilder.bandwidthConstraint(bandwidth);
             }
         }
@@ -114,8 +130,8 @@
 
         ObjectNode constraintNode = context.mapper()
                 .createObjectNode()
-                .put(COST, path.costConstraint().toString())
-                .put(BANDWIDTH, path.bandwidthConstraint().toString());
+                .put(COST, ((CostConstraint) path.costConstraint()).type().type())
+                .put(BANDWIDTH, ((BandwidthConstraint) path.bandwidthConstraint()).bandwidth().bps());
 
         result.set(CONSTRAINT, constraintNode);
         return result;
diff --git a/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathWebResource.java b/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathWebResource.java
index 2b0ba86..a3cd11e 100644
--- a/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathWebResource.java
+++ b/apps/pce/pcerest/src/main/java/org/onosproject/pcerest/PcePathWebResource.java
@@ -101,6 +101,9 @@
         Tunnel tunnel = nullIsNotFound(get(PceService.class).queryPath(TunnelId.valueOf(id)),
                                        PCE_PATH_NOT_FOUND);
         PcePath path = DefaultPcePath.builder().of(tunnel).build();
+        if (path == null) {
+            return Response.status(OK).entity(PCE_SETUP_PATH_FAILED).build();
+        }
         ObjectNode result = mapper().createObjectNode();
         result.set("path", codec(PcePath.class).encode(path, this));
         return ok(result.toString()).build();
@@ -122,6 +125,10 @@
             JsonNode port = jsonTree.get("path");
             TunnelService tunnelService = get(TunnelService.class);
             PcePath path = codec(PcePath.class).decode((ObjectNode) port, this);
+            if (path == null) {
+                return Response.status(OK).entity(PCE_SETUP_PATH_FAILED).build();
+            }
+
             //Validating tunnel name, duplicated tunnel names not allowed
             Collection<Tunnel> existingTunnels = tunnelService.queryTunnel(Tunnel.Type.MPLS);
             if (existingTunnels != null) {
@@ -171,6 +178,9 @@
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
             JsonNode pathNode = jsonTree.get("path");
             PcePath path = codec(PcePath.class).decode((ObjectNode) pathNode, this);
+            if (path == null) {
+                return Response.status(OK).entity(PCE_SETUP_PATH_FAILED).build();
+            }
             List<Constraint> constrntList = new LinkedList<Constraint>();
             // Assign bandwidth
             if (path.bandwidthConstraint() != null) {
