diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java
index ec19625a381cd073aa7d5a2279d1943eaee2bda4..934accd06c076b360269c4112aca62b06cab0e56 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java
@@ -14,12 +14,57 @@ public class Owner {
 
 	private String telephone;
 	
+	public Owner() {
+		
+	}
+	
+	public Owner(Long id) {
+		this.id = id;
+	}
+	
 	public Long getId() {
 		return id;
 	}
-	
-	public String getName() {
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	public String getLastName() {
 		return lastName;
 	}
 
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getTelephone() {
+		return telephone;
+	}
+
+	public void setTelephone(String telephone) {
+		this.telephone = telephone;
+	}
+
+
 }
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java
index 11be755b22af72fca73e5182b3c013ed47882dc1..d357c0471d959ed703d9d60c5fc9cb5b108bb78d 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java
@@ -1,8 +1,10 @@
 package org.springframework.samples.petclinic.owners;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.samples.petclinic.util.ResponseContext;
+import org.springframework.samples.petclinic.util.ExternalContext;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
@@ -18,19 +20,20 @@ public class OwnerController {
 	}
 	
 	@RequestMapping(method=RequestMethod.GET)
-	public Owner get(Long owner) {
-		return repository.getOwner(owner);
+	public String get(@PathVariable Long owner, Model model) {
+		model.addAttribute(repository.getOwner(owner));
+		return "owner";
 	}
 	
 	@RequestMapping(value="/edit", method=RequestMethod.GET)
-	public Owner getEditForm(Long owner) {
+	public Owner getEditForm(@PathVariable Long owner) {
 		return repository.getOwner(owner);
 	}
 	
 	@RequestMapping(method = RequestMethod.PUT)
-	public void put(Owner owner, ResponseContext response) {
+	public void put(Owner owner, ExternalContext response) {
 		repository.saveOwner(owner);
-		response.redirect(owner.getName());
+		response.redirect(owner.getId());
 	}	
 	
 }
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java
index 762ba5dc8af6674e03b2fa20e761c0ac91cd00be..10702243d5c6e534d7fa507d114db7d74b03805d 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java
@@ -8,6 +8,6 @@ public interface OwnerRepository {
 
 	Owner getOwner(Long id);
 
-	void saveOwner(Owner owner);
+	Long saveOwner(Owner owner);
 
 }
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerSearchForm.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerSearchForm.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9c589607263707eacd356ac47ae832d3fb1fdfc
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerSearchForm.java
@@ -0,0 +1,15 @@
+package org.springframework.samples.petclinic.owners;
+
+public class OwnerSearchForm {
+	
+	private String lastName;
+
+	public String getLastName() {
+		return lastName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+	
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java
index 93fd5b9e73b1dc594a6c79dd0c845b985379a102..f41e89571d151cfdbb7fc3bec728251aef827f0e 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java
@@ -3,7 +3,6 @@ package org.springframework.samples.petclinic.owners;
 import java.util.Collection;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.samples.petclinic.util.ResponseContext;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -21,8 +20,8 @@ public class OwnersController {
 	}
 	
 	@RequestMapping(method = RequestMethod.GET)
-	public void get() {
-		
+	public OwnerSearchForm get() {
+		return new OwnerSearchForm();
 	}
 	
 	@RequestMapping(value="/search", method = RequestMethod.GET)
@@ -36,9 +35,10 @@ public class OwnersController {
 	}
 	
 	@RequestMapping(method = RequestMethod.POST)
-	public void post(Owner owner, ResponseContext response) {
-		repository.saveOwner(owner);
-		response.redirect(owner.getName());
+	public String post(Owner owner) {
+		Long ownerId = repository.saveOwner(owner);
+		// TODO simplify this since /owners is the current resource already?
+		return "redirect:/owners/" + ownerId;
 	}	
 
 }
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java
index 5c3406bf0e32a8f264fd4b5c886c0a8e8f69b707..d442ee9948b63654515ee4aa45893c078ee0c364 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java
@@ -12,10 +12,11 @@ public class StubOwnerRepository implements OwnerRepository {
 	}
 
 	public Owner getOwner(Long id) {
-		return null;
+		return new Owner(id);
 	}
 
-	public void saveOwner(Owner owner) {
+	public Long saveOwner(Owner owner) {
+		return 1L;
 	}
 
 }
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java
index d789f9151356d619800f6999d92300f97730fb3d..a0a7e74e846b8eea4eb2f0a1b2461a3af6833830 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java
@@ -1,7 +1,7 @@
 package org.springframework.samples.petclinic.owners.pets;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.samples.petclinic.util.ResponseContext;
+import org.springframework.samples.petclinic.util.ExternalContext;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -28,13 +28,13 @@ public class PetController {
 	}
 	
 	@RequestMapping(method = RequestMethod.PUT)
-	public void put(Pet pet, ResponseContext response) {
+	public void put(Pet pet, ExternalContext response) {
 		repository.savePet(pet);
 		response.redirect(pet.getName());
 	}
 	
 	@RequestMapping(method = RequestMethod.DELETE)
-	public void delete(Long owner, String pet, ResponseContext context) {
+	public void delete(Long owner, String pet, ExternalContext context) {
 		context.forResource("owners").redirect(owner);
 	}
 	
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ExternalContext.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ExternalContext.java
new file mode 100644
index 0000000000000000000000000000000000000000..5f4fc1e3e355db4f0ed0806123ae82e7768863b6
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ExternalContext.java
@@ -0,0 +1,22 @@
+package org.springframework.samples.petclinic.util;
+
+import org.springframework.ui.Model;
+
+// This is an idea as a context object to make avail to @Controller methods to interact with Dispatcher
+public interface ExternalContext {
+
+	Model getModel();
+	
+	void selectView(String viewName);
+	
+	void renderFragment(String fragment);
+	
+	void redirect(Object resource);
+
+	ExternalContext forResource(Object resource);
+
+	Object getNativeRequest();
+
+	Object getNativeResponse();
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java
deleted file mode 100644
index fd9d5f67405f58e883326636247b5960857097d5..0000000000000000000000000000000000000000
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.springframework.samples.petclinic.util;
-
-public interface ResponseContext {
-
-	void redirect(Object resource);
-
-	ResponseContext forResource(Object resource);
-
-}
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/layouts/page.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/layouts/page.jsp
index df5ed7baeb536694942233801f328f4e6c6dbc76..b92d0ffa1c39e14a2ec367d5d50db844bdb18f71 100644
--- a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/layouts/page.jsp
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/layouts/page.jsp
@@ -22,9 +22,9 @@
 			</ul>
 			<div id="nav">
 				<ul>
-					<li><a href="<c:url value="/"/>">Home</a></li>
-					<li><a href="appointments">Appointments</a></li>
-					<li><a href="owners">Owners</a></li>
+					<li><a href="${pageContext.request.contextPath}">Home</a></li>
+					<li><a href="${pageContext.request.contextPath}/appointments">Appointments</a></li>
+					<li><a href="${pageContext.request.contextPath}/owners">Owners</a></li>
 				</ul>
 			</div>
 		</div>
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/addNewForm.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/addNewForm.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..68ad9dd6f5e3b6c891a7889f7fab5163a28a572b
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/addNewForm.jsp
@@ -0,0 +1,15 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<h2>Add New Owner</h2>
+
+<form:form id="addNewForm" action="${pageContext.request.contextPath}/owners" modelAttribute="owner" method="post">
+	<form:label for="firstName" path="firstName">
+		First Name
+		<form:input path="firstName" />
+	</form:label>
+	<form:label for="lastName" path="lastName">
+		Last Name
+		<form:input path="lastName" />
+	</form:label>
+	<input type="submit" value="Add" />	
+</form:form>
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/content.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/content.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..c0dae0e50b6afb2572c833dd35fb6b8dea91b40a
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/content.jsp
@@ -0,0 +1,11 @@
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
+
+<div id="sidebar">
+	<ul id="sub-nav">
+		<li><a href="${pageContext.request.contextPath}/owners">Search</a></li>
+		<li><a href="${pageContext.request.contextPath}/owners/new">Add New</a></li>
+	</ul>
+</div>
+<div id="main">
+	<tiles:insertAttribute name="main" />
+</div>
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/search.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/owner.jsp
similarity index 74%
rename from org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/search.jsp
rename to org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/owner.jsp
index f098b9d19ed025577e559b813accb5813516fcc3..85dcec17b41cd81f0f1e97db07adec0fe993945c 100644
--- a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/search.jsp
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/owner.jsp
@@ -1,2 +1,2 @@
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<h2>Search Owners</h2>
\ No newline at end of file
+<h2>Owner Details</h2>
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchForm.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchForm.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..1a5830d29ef6d96124bd64bede2e78a7b01f4ee5
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchForm.jsp
@@ -0,0 +1,12 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+
+<h2>Search Owners</h2>
+
+<form:form id="searchForm" action="owners/search" modelAttribute="ownerSearchForm" method="get">
+	<form:label for="lastName" path="lastName">
+		Last Name
+		<form:input path="lastName" />
+	</form:label>
+	<input type="submit" value="Search" />	
+</form:form>
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchResults.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchResults.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..c01fd8abb20ffb3f9446d768cfe73a27ceb352be
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchResults.jsp
@@ -0,0 +1,2 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<h2>Search Results</h2>
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/tiles.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/tiles.xml
index 64d5e66b58f4e44e4c555824487e47a4747c3f9d..87229ac06d05f6811348e43f4ffe926e5e7b2297 100644
--- a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/tiles.xml
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/tiles.xml
@@ -18,14 +18,50 @@
 
 	<!-- APPOINTMENTS PAGES -->
 	<definition name="appointments" extends="page">
-		<put-attribute name="title" value="Appointment" type="string" />
+		<put-attribute name="title" value="Appointments" type="string" />
 		<put-attribute name="content" value="/WEB-INF/appointments/calendar.jsp" type="template" />
 	</definition>
 	
 	<!-- OWNERS PAGES -->
+	
+	<!-- SEARCH PAGE -->
 	<definition name="owners" extends="page">
+		<put-attribute name="title" value="Owners" type="string" />
+		<put-attribute name="content" value="owners.content" type="definition" />
+	</definition>
+
+	<definition name="owners.content" template="/WEB-INF/owners/content.jsp">
+		<put-attribute name="main" value="/WEB-INF/owners/searchForm.jsp" type="template" />
+	</definition>
+
+	<!-- ADD NEW PAGE -->
+	<definition name="owners/new" extends="page">
+		<put-attribute name="title" value="Owners" type="string" />
+		<put-attribute name="content" value="owners/new.content" type="definition" />
+	</definition>
+
+	<definition name="owners/new.content" template="/WEB-INF/owners/content.jsp">
+		<put-attribute name="main" value="/WEB-INF/owners/addNewForm.jsp" type="template" />
+	</definition>
+
+	<!-- SEARCH RESULTS PAGE -->
+	<definition name="owners/search" extends="page">
 		<put-attribute name="title" value="Owner Search" type="string" />
-		<put-attribute name="content" value="/WEB-INF/owners/search.jsp" type="template" />
-	</definition>	
+		<put-attribute name="content" value="owners/search.content" type="definition" />
+	</definition>
+
+	<definition name="owners/search.content" template="/WEB-INF/owners/content.jsp">
+		<put-attribute name="main" value="/WEB-INF/owners/searchResults.jsp" type="template" />
+	</definition>
+	
+	<!-- OWNER DETAIL PAGE -->
+	<definition name="owner" extends="page">
+		<put-attribute name="title" value="Owner" type="string" />
+		<put-attribute name="content" value="owner.content" type="definition" />
+	</definition>
 
+	<definition name="owner.content" template="/WEB-INF/owners/content.jsp">
+		<put-attribute name="main" value="/WEB-INF/owners/owner.jsp" type="template" />
+	</definition>
+	
 </tiles-definitions>
\ No newline at end of file