diff --git a/internal/pkg/application/service.go b/internal/pkg/application/service.go
index 9315b5b..e129b48 100644
--- a/internal/pkg/application/service.go
+++ b/internal/pkg/application/service.go
@@ -1174,47 +1174,39 @@
 		logger.Warnw(ctx, "Deleted service from DB/Cache successfully", log.Fields{"serviceName": vs.Name})
 	}
 
-	meterProfiles := make(map[*VoltMeter]bool)
-
 	if nil != newSvc {
 		logger.Infow(ctx, "Old Service meter profiles", log.Fields{"AGG": vs.AggDsMeterProfile, "DS": vs.DsMeterProfile, "US": vs.UsMeterProfile})
 		logger.Infow(ctx, "New Service meter profiles", log.Fields{"AGG": newSvc.AggDsMeterProfile, "DS": newSvc.DsMeterProfile, "US": newSvc.UsMeterProfile})
 	}
-	skipMeterDeletion := false
-	if aggMeter, ok := va.MeterMgr.GetMeterByID(vs.AggDsMeterID); ok {
-		if nil != newSvc && aggMeter.Name == newSvc.AggDsMeterProfile {
-			skipMeterDeletion = true
-		}
 
-		meterProfiles[aggMeter] = skipMeterDeletion
-		skipMeterDeletion = false
+	logger.Infow(ctx, "About to mark meter for deletion\n", log.Fields{"serviceName": vs.Name})
+
+	if aggMeter, ok := va.MeterMgr.GetMeterByID(vs.AggDsMeterID); ok {
+		if nil == newSvc || (nil != newSvc && aggMeter.Name != newSvc.AggDsMeterProfile) {
+                       if aggMeter.AssociatedServices > 0 {
+                               aggMeter.AssociatedServices--
+                               logger.Infow(ctx, "Agg Meter assocaited services updated\n", log.Fields{"MeterID": aggMeter})
+                               va.UpdateMeterProf(cntx, *aggMeter)
+                       }
+		}
 	}
 	if dsMeter, ok := va.MeterMgr.GetMeterByID(vs.DsMeterID); ok {
-		if nil != newSvc && dsMeter.Name == newSvc.DsMeterProfile {
-			skipMeterDeletion = true
+	       if nil == newSvc || (nil != newSvc && dsMeter.Name != newSvc.DsMeterProfile) {
+                       if dsMeter.AssociatedServices > 0 {
+                               dsMeter.AssociatedServices--
+                               logger.Infow(ctx, "DS Meter assocaited services updated\n", log.Fields{"MeterID": dsMeter})
+                               va.UpdateMeterProf(cntx, *dsMeter)
+                       }
 		}
-		meterProfiles[dsMeter] = skipMeterDeletion
-		skipMeterDeletion = false
 	}
 	if vs.AggDsMeterID != vs.UsMeterID {
 		if usMeter, ok := va.MeterMgr.GetMeterByID(vs.UsMeterID); ok {
-			if nil != newSvc && usMeter.Name == newSvc.UsMeterProfile {
-				skipMeterDeletion = true
-			}
-			meterProfiles[usMeter] = skipMeterDeletion
-		}
-	}
-
-	for meter, skipMeterDeletion := range meterProfiles {
-		if nil == meter {
-			logger.Debug(ctx, "Null meter found, continuing")
-			continue
-		}
-		if meter.AssociatedServices > 0 {
-			meter.AssociatedServices--
-			if meter.AssociatedServices == 0 && !skipMeterDeletion {
-				logger.Infow(ctx, "Meter should be deleted now\n", log.Fields{"MeterID": meter})
-				va.UpdateMeterProf(cntx, *meter)
+                       if nil == newSvc || (nil != newSvc && usMeter.Name != newSvc.UsMeterProfile) {
+                               if usMeter.AssociatedServices > 0 {
+                                       usMeter.AssociatedServices--
+                                       logger.Infow(ctx, "US Meter assocaited services updated\n", log.Fields{"MeterID": usMeter})
+                                       va.UpdateMeterProf(cntx, *usMeter)
+                               }
 			}
 		}
 	}
diff --git a/internal/pkg/controller/device.go b/internal/pkg/controller/device.go
index 8d185a3..a3527c8 100644
--- a/internal/pkg/controller/device.go
+++ b/internal/pkg/controller/device.go
@@ -393,6 +393,19 @@
 	return nil
 }
 
+// UpdateMeter to update meter
+func (d *Device) UpdateMeter(cntx context.Context, meter *of.Meter) error {
+       d.meterLock.Lock()
+       defer d.meterLock.Unlock()
+       if _, ok := d.meters[meter.ID]; ok {
+               d.meters[meter.ID] = meter
+               d.AddMeterToDb(cntx, meter)
+       } else {
+               return errors.New("Meter not found for updation")
+       }
+       return nil
+}
+
 // GetMeter to get meter
 func (d *Device) GetMeter(id uint32) (*of.Meter, error) {
 	d.meterLock.RLock()
diff --git a/internal/pkg/controller/modmeter.go b/internal/pkg/controller/modmeter.go
index 62d2f40..acbef44 100644
--- a/internal/pkg/controller/modmeter.go
+++ b/internal/pkg/controller/modmeter.go
@@ -93,6 +93,7 @@
 			// Meter already exists so we dont have to do anything here
 			return nil
 		}
+		logger.Infow(ctx, "Updated meter state to pending", log.Fields{"Meter": mmt.meter.ID})
 	} else {
 		if !mmt.device.DelMeter(ctx, mmt.meter) {
 			// Meter doesn't exist so we dont have to do anything here
@@ -114,6 +115,13 @@
 
 		if _, err = vc.UpdateLogicalDeviceMeterTable(mmt.ctx, meterMod); err != nil {
 			logger.Errorw(ctx, "Update Meter Table Failed", log.Fields{"Reason": err.Error()})
+		} else {
+			mmt.meter.State = of.MeterOperSuccess
+			if err := mmt.device.UpdateMeter(ctx, mmt.meter); err != nil {
+				// Meter does not exist, update failed
+				logger.Error(ctx, "Update meter to DB failed")
+			}
+			logger.Infow(ctx, "Updated meter state to success", log.Fields{"Meter": mmt.meter.ID})
 		}
 		//triggerMeterNotification(err)
 		return err
