diff --git a/src/main/java/org/springframework/samples/petclinic/web/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/web/OwnerController.java
index a7f760a97b423403c1742a3db223a3774c4576b3..a7fcfe4e43bee4c9ccd2201b0e41f2db4193bfcb 100644
--- a/src/main/java/org/springframework/samples/petclinic/web/OwnerController.java
+++ b/src/main/java/org/springframework/samples/petclinic/web/OwnerController.java
@@ -22,7 +22,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 /**
  * JavaBean form controller that is used to handle <code>Owner</code>s .
- * 
+ *
  * @author Juergen Hoeller
  * @author Ken Krebs
  * @author Arjen Poutsma
@@ -63,7 +63,7 @@ public class OwnerController {
 			return "redirect:/owners/" + owner.getId();
 		}
 	}
-	
+
 	@RequestMapping(value = "/owners/find", method = RequestMethod.GET)
 	public String initFindForm(Model model) {
 		model.addAttribute("owner", new Owner());
@@ -96,7 +96,7 @@ public class OwnerController {
 			return "redirect:/owners/" + owner.getId();
 		}
 	}
-	
+
 	@RequestMapping(value="/owners/{ownerId}/edit", method = RequestMethod.GET)
 	public String initUpdateOwnerForm(@PathVariable("ownerId") int ownerId, Model model) {
 		Owner owner = this.ownerRepository.findById(ownerId);
@@ -112,10 +112,10 @@ public class OwnerController {
 		else {
 			this.ownerRepository.save(owner);
 			status.setComplete();
-			return "redirect:/owners/" + owner.getId();
+			return "redirect:/owners/{ownerId}";
 		}
 	}
-	
+
 	/**
 	 * Custom handler for displaying an owner.
 	 *
diff --git a/src/main/java/org/springframework/samples/petclinic/web/PetController.java b/src/main/java/org/springframework/samples/petclinic/web/PetController.java
index ad94356ac57ab75c4fe46ee932d0318ba2c0843e..810985a1511c8c8ae98607ab69eba684b276d79f 100644
--- a/src/main/java/org/springframework/samples/petclinic/web/PetController.java
+++ b/src/main/java/org/springframework/samples/petclinic/web/PetController.java
@@ -24,7 +24,7 @@ import org.springframework.web.bind.support.SessionStatus;
 /**
  * JavaBean form controller that is used to add a new <code>Pet</code> to the
  * system.
- * 
+ *
  * @author Juergen Hoeller
  * @author Ken Krebs
  * @author Arjen Poutsma
@@ -35,7 +35,7 @@ public class PetController {
 
 	private final ClinicService clinicService;
 
- 
+
 	@Autowired
 	public PetController(ClinicService clinicService) {
 		this.clinicService = clinicService;
@@ -69,10 +69,10 @@ public class PetController {
 		else {
 			this.clinicService.savePet(pet);
 			status.setComplete();
-			return "redirect:/owners/" + pet.getOwner().getId();
+			return "redirect:/owners/{ownerId}";
 		}
 	}
-	
+
 	@RequestMapping(value="/owners/*/pets/{petId}/edit", method = RequestMethod.GET)
 	public String initUpdateForm(@PathVariable("petId") int petId, Model model) {
 		Pet pet = this.clinicService.findPetById(petId);
@@ -80,7 +80,7 @@ public class PetController {
 		return "pets/createOrUpdatePetForm";
 	}
 
-	@RequestMapping(value="/owners/*/pets/{petId}/edit", method = { RequestMethod.PUT, RequestMethod.POST })
+	@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = { RequestMethod.PUT, RequestMethod.POST })
 	public String processUpdateForm(@ModelAttribute("pet") Pet pet, BindingResult result, SessionStatus status) {
 		// we're not using @Valid annotation here because it is easier to define such validation rule in Java
 		new PetValidator().validate(pet, result);
@@ -90,7 +90,7 @@ public class PetController {
 		else {
 			this.clinicService.savePet(pet);
 			status.setComplete();
-			return "redirect:/owners/" + pet.getOwner().getId();
+			return "redirect:/owners/{ownerId}";
 		}
 	}
 
diff --git a/src/main/java/org/springframework/samples/petclinic/web/VisitController.java b/src/main/java/org/springframework/samples/petclinic/web/VisitController.java
index 85a4d54295db84a4ea57190f82f541bc9091baec..1c61dffc16faef533aba4af00598842c07fb6c3a 100644
--- a/src/main/java/org/springframework/samples/petclinic/web/VisitController.java
+++ b/src/main/java/org/springframework/samples/petclinic/web/VisitController.java
@@ -22,7 +22,7 @@ import org.springframework.web.servlet.ModelAndView;
 /**
  * JavaBean form controller that is used to add a new <code>Visit</code> to the
  * system.
- * 
+ *
  * @author Juergen Hoeller
  * @author Ken Krebs
  * @author Arjen Poutsma
@@ -53,7 +53,7 @@ public class VisitController {
 		return "pets/createOrUpdateVisitForm";
 	}
 
-	@RequestMapping(value="/owners/*/pets/{petId}/visits/new", method = RequestMethod.POST)
+	@RequestMapping(value="/owners/{ownerId}/pets/{petId}/visits/new", method = RequestMethod.POST)
 	public String processNewVisitForm(@Valid Visit visit, BindingResult result, SessionStatus status) {
 		if (result.hasErrors()) {
 			return "pets/createOrUpdateVisitForm";
@@ -61,10 +61,10 @@ public class VisitController {
 		else {
 			this.clinicService.saveVisit(visit);
 			status.setComplete();
-			return "redirect:/owners/" + visit.getPet().getOwner().getId();
+			return "redirect:/owners/{ownerId}";
 		}
 	}
-	
+
 	/**
 	 * Custom handler for displaying an list of visits.
 	 *
diff --git a/src/main/webapp/WEB-INF/mvc-core-config.xml b/src/main/webapp/WEB-INF/mvc-core-config.xml
index 6ce11a4a6efbff6b42c47488ef8101aa68079b6c..2678f7ceaf268869a916f34fe16053053cc78ee6 100644
--- a/src/main/webapp/WEB-INF/mvc-core-config.xml
+++ b/src/main/webapp/WEB-INF/mvc-core-config.xml
@@ -17,7 +17,7 @@
 	-->
 	<context:component-scan base-package="org.springframework.samples.petclinic.web, org.springframework.samples.petclinic.service"/>
 	
-	 <mvc:annotation-driven  conversion-service="conversionService"/>
+	<mvc:annotation-driven conversion-service="conversionService" />
 	
 	<!--  all resources inside folder src/main/webapp/resources are mapped so they can be refered to inside JSP files
 		(see header.jsp for more details) -->
diff --git a/src/main/webapp/WEB-INF/mvc-view-config.xml b/src/main/webapp/WEB-INF/mvc-view-config.xml
index 94ca95fa0f630521a68e6b756343fdf890b14803..0487164ccff3e53e443ef91dd1bccf64d74bd713 100644
--- a/src/main/webapp/WEB-INF/mvc-view-config.xml
+++ b/src/main/webapp/WEB-INF/mvc-view-config.xml
@@ -19,23 +19,19 @@
 		- property of the vets view bean, setting it to 'application/vnd.springsource.samples.petclinic+xml'.
 	-->
 	<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
-		<property name="contentNegotiationManager">
-            <bean class="org.springframework.web.accept.ContentNegotiationManager">
-                <constructor-arg>
-                    <bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
-                        <constructor-arg>
-                            <map>
-				 				<entry key="xml" value="application/vnd.springsource.samples.petclinic+xml"/>
-								<entry key="atom" value="#{visitList.contentType}"/>
-                           </map>
-                        </constructor-arg>
-                    </bean>
-                </constructor-arg>
-            </bean>
-        </property>
+		<property name="contentNegotiationManager" ref="cnManager"/>
 		<property name="order" value="0"/>
 	</bean>
 	
+	<bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
+		<property name="mediaTypes">
+			<value>
+				xml=application/vnd.springsource.samples.petclinic+xml
+				atom=#{visitList.contentType}
+			</value>
+		</property>
+	</bean>
+
 	<!--
 		- The BeanNameViewResolver is used to pick up the visits view name (below).
 		- It has the order property set to 2, which means that this will