diff --git a/examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationReloading.java b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationReloading.java
index a580572..463633a 100644
--- a/examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationReloading.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/configuration/ConfigurationReloading.java
@@ -47,6 +47,7 @@
         final Collection<Configurable> configurables = new ArrayList<Configurable>();
 
         final FilesystemAlterationListener listener = new FileChangeListener() {
+            @Override
             public void onStop(final FilesystemAlterationObserver pObserver) {
                 super.onStop(pObserver);
 
diff --git a/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/ServerPageServlet.java b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/ServerPageServlet.java
index a1dac71..684f286 100644
--- a/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/ServerPageServlet.java
+++ b/examples/src/main/java/org/apache/commons/jci2/examples/serverpages/ServerPageServlet.java
@@ -61,6 +61,7 @@
 
     private Map<String, HttpServlet> servletsByClassname = new HashMap<String, HttpServlet>();
 
+    @Override
     public void init() throws ServletException {
         super.init();
 
@@ -73,6 +74,7 @@
             private Set<String> newClasses;
             private Map<String, HttpServlet> newServletsByClassname;
 
+            @Override
             public void onStart() {
                 super.onStart();
 
@@ -80,6 +82,7 @@
                 newServletsByClassname = new HashMap<String, HttpServlet>(servletsByClassname);
             }
 
+            @Override
             public void onStop() {
                 super.onStop();
 
@@ -109,6 +112,7 @@
                 }
             }
 
+            @Override
             public void write(final String pResourceName, final byte[] pResourceData) {
                 super.write(pResourceName, pResourceData);
 
@@ -128,6 +132,7 @@
             private final Map<String, byte[]> sources = new HashMap<String, byte[]>();
             private final Set<String> resourceToCompile = new HashSet<String>();
 
+            @Override
             public void onStart(final FilesystemAlterationObserver pObserver) {
                 super.onStart(pObserver);
 
@@ -135,6 +140,7 @@
             }
 
 
+            @Override
             public void onFileChange(final File pFile) {
                 if (pFile.getName().endsWith(".jsp")) {
                     final String resourceName = ConversionUtils.stripExtension(getSourceNameFromFile(observer, pFile)) + ".java";
@@ -149,6 +155,7 @@
             }
 
 
+            @Override
             public void onFileCreate(final File pFile) {
                 if (pFile.getName().endsWith(".jsp")) {
                     final String resourceName = ConversionUtils.stripExtension(getSourceNameFromFile(observer, pFile)) + ".java";
@@ -163,6 +170,7 @@
             }
 
 
+            @Override
             public String[] getResourcesToCompile(final FilesystemAlterationObserver pObserver) {
                 // we only want to compile the jsp pages
                 final String[] resourceNames = new String[resourceToCompile.size()];
@@ -171,6 +179,7 @@
             }
 
 
+            @Override
             public ResourceReader getReader( final FilesystemAlterationObserver pObserver ) {
                 return new JspReader(sources, super.getReader(pObserver));
             }
@@ -189,6 +198,7 @@
         return ConversionUtils.stripExtension(path).replace('/', '.');
     }
 
+    @Override
     protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
 
         log("Request " + request.getRequestURI());
@@ -232,6 +242,7 @@
         servlet.service(request, response);
     }
 
+    @Override
     public void destroy() {
 
         fam.stop();
