diff --git a/src/main/java/net/unicon/cas/addons/serviceregistry/ReadWriteJsonServiceRegistryDao.java b/src/main/java/net/unicon/cas/addons/serviceregistry/ReadWriteJsonServiceRegistryDao.java
index 351b977..cf5c132 100644
--- a/src/main/java/net/unicon/cas/addons/serviceregistry/ReadWriteJsonServiceRegistryDao.java
+++ b/src/main/java/net/unicon/cas/addons/serviceregistry/ReadWriteJsonServiceRegistryDao.java
@@ -34,10 +34,19 @@ public final class ReadWriteJsonServiceRegistryDao extends JsonServiceRegistryDa
         logger.debug("Loading service definitions from resource [{}]", this.servicesConfigFile.getFilename());
         final List<RegisteredService> resolvedServices = super.loadServices();
         final List<RegisteredService> col = new ArrayList<RegisteredService>(resolvedServices);
-        col.add(registeredService);
-
+        /* this means it is a modification so we need to remove the old entry */
+        if (registeredService.getId() > -1 ) {
+          /* need to search by ID because the new service object won't match the old one we want to remove */ 
+          final RegisteredService regServiceToDelete = findServiceById(registeredService.getId());
+          col.remove(regServiceToDelete);
+        }
+        /* call to super uses the CAS-standard in memory object registry which makes sure the ID incremeting
+         * when adding a new service logic takes place, may be to better import the simple get highest ID logic
+         * instead.  Planning to consult with upstream. */
+        final RegisteredService actualRegisteredService = super.saveInternal(registeredService);
+        col.add(actualRegisteredService);
         saveListOfRegisteredServices(col);
-        return registeredService;
+        return actualRegisteredService; 
     }
 
     @Override
