diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryImpl.java
index fd0f21763b2c2fd18745f5987ad0154ab9c4b003..c7398df5ba5f66aef52d4ced953a4396746346bd 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryImpl.java
@@ -70,7 +70,12 @@ public class JpaOwnerRepositoryImpl implements OwnerRepository {
 
     @Override
     public void save(Owner owner) {
-        this.em.persist(owner);
+    	if (owner.getId() == null) {
+    		this.em.persist(owner);     		
+    	}
+    	else {
+    		this.em.merge(owner);    
+    	}
 
     }
 
diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryImpl.java
index 4823aabc1492e6e8f7aa0ee945ec594d94b86cb6..84d564da454754d008be973afdc2b5fcede04234 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryImpl.java
@@ -53,7 +53,12 @@ public class JpaPetRepositoryImpl implements PetRepository {
 
     @Override
     public void save(Pet pet) {
-        this.em.persist(pet);
+    	if (pet.getId() == null) {
+    		this.em.persist(pet);     		
+    	}
+    	else {
+    		this.em.merge(pet);    
+    	}
     }
 
 }
diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryImpl.java
index fccf79533fd95edd7c44c521fd658a6402503208..3415def96e1d5c5c554800bb074d003254a7e579 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryImpl.java
@@ -45,7 +45,12 @@ public class JpaVisitRepositoryImpl implements VisitRepository {
 
     @Override
     public void save(Visit visit) {
-        this.em.persist(visit);
+    	if (visit.getId() == null) {
+    		this.em.persist(visit);     		
+    	}
+    	else {
+    		this.em.merge(visit);    
+    	}
     }
 
 
diff --git a/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java b/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
index e3c5f0a5739588c539d5b7e05fec4b3d906d2df5..02a21ac4df632b8314fe6317f104969478303198 100644
--- a/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
+++ b/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
@@ -89,8 +89,8 @@ public abstract class AbstractClinicServiceTests {
         owner.setCity("Wollongong");
         owner.setTelephone("4444444444");
         this.clinicService.saveOwner(owner);
+        Assert.assertNotEquals("Owner Id should have been generated", owner.getId().longValue(), 0);
         owners = this.clinicService.findOwnerByLastName("Schultz");
-        assertNotNull("Owner Id should have been generated", owner.getId());
         assertEquals("Verifying number of owners after inserting a new one.", found + 1, owners.size());
     }