diff --git a/src/main/java/org/springframework/samples/petclinic/web/PetValidator.java b/src/main/java/org/springframework/samples/petclinic/web/PetValidator.java
index 7068dd878b0ae04d6fe27a6183fb64569f718d45..b47d02789f64a5341769a2b385dd00ffacb8d4b6 100644
--- a/src/main/java/org/springframework/samples/petclinic/web/PetValidator.java
+++ b/src/main/java/org/springframework/samples/petclinic/web/PetValidator.java
@@ -33,6 +33,8 @@ public class PetValidator {
             errors.rejectValue("name", "required", "required");
         } else if (pet.isNew() && pet.getOwner().getPet(name, true) != null) {
             errors.rejectValue("name", "duplicate", "already exists");
+        } else if (pet.isNew() && pet.getType() == null) {
+            errors.rejectValue("type", "required", "required");
         }
     }
 
diff --git a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp
index ee9c0a91e672091b6e30e8d4206d7e10dd82e9d6..6a740609c24e2d6063b766f3d0e1ea8865f7c602 100644
--- a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp
+++ b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdatePetForm.jsp
@@ -42,8 +42,7 @@
         <petclinic:inputField label="Name" name="name"/>
         <petclinic:inputField label="Birth Date" name="birthDate"/>
         <div class="control-group">
-            <label class="control-label">Type </label>
-            <form:select path="type" items="${types}" size="5"/>
+            <petclinic:selectField name="type" label="Type " names="${types}" size="5"/>
         </div>
         <div class="form-actions">
             <c:choose>
diff --git a/src/main/webapp/WEB-INF/tags/selectField.tag b/src/main/webapp/WEB-INF/tags/selectField.tag
new file mode 100644
index 0000000000000000000000000000000000000000..f93256ac8e44239f782e2525f4271dac1d10f6bc
--- /dev/null
+++ b/src/main/webapp/WEB-INF/tags/selectField.tag
@@ -0,0 +1,23 @@
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
+<%@ attribute name="name" required="true" rtexprvalue="true"
+              description="Name of corresponding property in bean object" %>
+<%@ attribute name="label" required="true" rtexprvalue="true"
+              description="Label appears in red color if input is considered as invalid after submission" %>
+<%@ attribute name="names" required="true" rtexprvalue="true" type="java.util.List"
+              description="Names in the list" %>
+<%@ attribute name="size" required="true" rtexprvalue="true"
+              description="Size of Select" %>
+
+<spring:bind path="${name}">
+    <c:set var="cssGroup" value="control-group ${status.error ? 'error' : '' }"/>
+    <div class="${cssGroup}">
+        <label class="control-label">${label}</label>
+
+        <div class="controls">
+            <form:select path="${name}" items="${names}" size="${size}"/>
+            <span class="help-inline">${status.errorMessage}</span>
+        </div>
+    </div>
+</spring:bind>
\ No newline at end of file