diff --git a/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java b/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java
index 64c1efd..6b8f690 100644
--- a/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java
+++ b/asm4/src/main/java/org/apache/commons/proxy2/asm4/ASM4ProxyFactory.java
@@ -383,6 +383,7 @@
     @SuppressWarnings("serial")
     private abstract static class AbstractInvoker implements Invoker, Serializable
     {
+        @Override
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
         {
             if (isHashCode(method))
@@ -444,21 +445,25 @@
             this.target = target;
         }
 
+        @Override
         public Object[] getArguments()
         {
             return arguments;
         }
 
+        @Override
         public Method getMethod()
         {
             return method;
         }
 
+        @Override
         public Object getProxy()
         {
             return proxy;
         }
 
+        @Override
         public Object proceed() throws Throwable
         {
             try
diff --git a/cglib/src/main/java/org/apache/commons/proxy2/cglib/CglibProxyFactory.java b/cglib/src/main/java/org/apache/commons/proxy2/cglib/CglibProxyFactory.java
index 4727c3c..a5cbfa5 100644
--- a/cglib/src/main/java/org/apache/commons/proxy2/cglib/CglibProxyFactory.java
+++ b/cglib/src/main/java/org/apache/commons/proxy2/cglib/CglibProxyFactory.java
@@ -54,6 +54,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <T> T createDelegatorProxy(ClassLoader classLoader, ObjectProvider<?> targetProvider,
             Class<?>... proxyClasses)
@@ -71,6 +72,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <T> T createInterceptorProxy(ClassLoader classLoader, Object target, Interceptor interceptor,
             Class<?>... proxyClasses)
@@ -88,6 +90,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <T> T createInvokerProxy(ClassLoader classLoader, Invoker invoker, Class<?>... proxyClasses)
     {
@@ -107,6 +110,7 @@
 
     private static class CglibProxyFactoryCallbackFilter implements CallbackFilter
     {
+        @Override
         public int accept(Method method)
         {
             if (ProxyUtils.isEqualsMethod(method))
@@ -129,6 +133,7 @@
         /** Serialization version */
         private static final long serialVersionUID = 1L;
 
+        @Override
         public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable
         {
             return o == objects[0];
@@ -140,6 +145,7 @@
         /** Serialization version */
         private static final long serialVersionUID = 1L;
 
+        @Override
         public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable
         {
             return System.identityHashCode(o);
@@ -160,6 +166,7 @@
             this.target = target;
         }
 
+        @Override
         public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable
         {
             return inner.intercept(new MethodProxyInvocation(object, target, method, args, methodProxy));
@@ -178,6 +185,7 @@
             this.original = original;
         }
 
+        @Override
         public Object invoke(Object object, Method method, Object[] objects) throws Throwable
         {
             return original.invoke(object, method, objects);
@@ -201,21 +209,25 @@
             this.args = ObjectUtils.defaultIfNull(ArrayUtils.clone(args), ProxyUtils.EMPTY_ARGUMENTS);
         }
 
+        @Override
         public Method getMethod()
         {
             return method;
         }
 
+        @Override
         public Object[] getArguments()
         {
             return args;
         }
 
+        @Override
         public Object proceed() throws Throwable
         {
             return methodProxy.invoke(target, args);
         }
 
+        @Override
         public Object getProxy()
         {
             return proxy;
@@ -234,6 +246,7 @@
             this.delegateProvider = delegateProvider;
         }
 
+        @Override
         public Object loadObject()
         {
             return delegateProvider.getObject();
diff --git a/core/src/main/java/org/apache/commons/proxy2/impl/AbstractProxyFactory.java b/core/src/main/java/org/apache/commons/proxy2/impl/AbstractProxyFactory.java
index 7539d9c..43691a0 100644
--- a/core/src/main/java/org/apache/commons/proxy2/impl/AbstractProxyFactory.java
+++ b/core/src/main/java/org/apache/commons/proxy2/impl/AbstractProxyFactory.java
@@ -35,6 +35,7 @@
      *            the proxy classes
      * @return true if all <code>proxyClasses</code> are interfaces
      */
+    @Override
     public boolean canProxy(Class<?>... proxyClasses)
     {
         for (Class<?> proxyClass : proxyClasses)
@@ -57,6 +58,7 @@
      *            the interfaces that the proxy should implement
      * @return a proxy which delegates to the object provided by the target object provider
      */
+    @Override
     public <T> T createDelegatorProxy(ObjectProvider<?> delegateProvider, Class<?>... proxyClasses)
     {
         return createDelegatorProxy(Thread.currentThread().getContextClassLoader(), delegateProvider, proxyClasses);
@@ -75,6 +77,7 @@
      * @return a proxy which passes through a {@link Interceptor interceptor} before eventually reaching the
      *         <code>target</code> object.
      */
+    @Override
     public <T> T createInterceptorProxy(Object target, Interceptor interceptor, Class<?>... proxyClasses)
     {
         return createInterceptorProxy(Thread.currentThread().getContextClassLoader(), target, interceptor,
@@ -91,6 +94,7 @@
      *            the interfaces that the proxy should implement
      * @return a proxy which uses the provided {@link Invoker} to handle all method invocations
      */
+    @Override
     public <T> T createInvokerProxy(Invoker invoker, Class<?>... proxyClasses)
     {
         return createInvokerProxy(Thread.currentThread().getContextClassLoader(), invoker, proxyClasses);
diff --git a/core/src/main/java/org/apache/commons/proxy2/invoker/DuckTypingInvoker.java b/core/src/main/java/org/apache/commons/proxy2/invoker/DuckTypingInvoker.java
index fdb48d9..ad29119 100644
--- a/core/src/main/java/org/apache/commons/proxy2/invoker/DuckTypingInvoker.java
+++ b/core/src/main/java/org/apache/commons/proxy2/invoker/DuckTypingInvoker.java
@@ -84,6 +84,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public Object invoke(final Object proxy, final Method method, final Object[] arguments) throws Throwable
     {
         final Object target = targetProvider.getObject();
diff --git a/core/src/main/java/org/apache/commons/proxy2/invoker/InvocationHandlerAdapter.java b/core/src/main/java/org/apache/commons/proxy2/invoker/InvocationHandlerAdapter.java
index 02b0bd1..181f26c 100644
--- a/core/src/main/java/org/apache/commons/proxy2/invoker/InvocationHandlerAdapter.java
+++ b/core/src/main/java/org/apache/commons/proxy2/invoker/InvocationHandlerAdapter.java
@@ -60,6 +60,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public Object invoke(Object proxy, Method method, Object[] arguments) throws Throwable
     {
         return invocationHandler.invoke(proxy, method, arguments);
diff --git a/core/src/main/java/org/apache/commons/proxy2/invoker/NullInvoker.java b/core/src/main/java/org/apache/commons/proxy2/invoker/NullInvoker.java
index a5e19bf..8236eb9 100644
--- a/core/src/main/java/org/apache/commons/proxy2/invoker/NullInvoker.java
+++ b/core/src/main/java/org/apache/commons/proxy2/invoker/NullInvoker.java
@@ -47,6 +47,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
     {
         final Class<?> returnType = method.getReturnType();
diff --git a/core/src/main/java/org/apache/commons/proxy2/invoker/recorder/InvocationRecorder.java b/core/src/main/java/org/apache/commons/proxy2/invoker/recorder/InvocationRecorder.java
index ca56bdd..0550c34 100644
--- a/core/src/main/java/org/apache/commons/proxy2/invoker/recorder/InvocationRecorder.java
+++ b/core/src/main/java/org/apache/commons/proxy2/invoker/recorder/InvocationRecorder.java
@@ -104,6 +104,7 @@
         /**
          * {@inheritDoc}
          */
+        @Override
         public Object invoke(Object o, Method method, Object[] args) throws Throwable
         {
             recordedInvocations.add(new RecordedInvocation(method, args));
diff --git a/core/src/main/java/org/apache/commons/proxy2/provider/BeanProvider.java b/core/src/main/java/org/apache/commons/proxy2/provider/BeanProvider.java
index 4cc0912..7035a01 100644
--- a/core/src/main/java/org/apache/commons/proxy2/provider/BeanProvider.java
+++ b/core/src/main/java/org/apache/commons/proxy2/provider/BeanProvider.java
@@ -63,6 +63,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public T getObject()
     {
         try
diff --git a/core/src/main/java/org/apache/commons/proxy2/provider/CloningProvider.java b/core/src/main/java/org/apache/commons/proxy2/provider/CloningProvider.java
index f82e127..1b3744e 100644
--- a/core/src/main/java/org/apache/commons/proxy2/provider/CloningProvider.java
+++ b/core/src/main/java/org/apache/commons/proxy2/provider/CloningProvider.java
@@ -69,6 +69,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     @SuppressWarnings("unchecked")
     public T getObject()
     {
diff --git a/core/src/main/java/org/apache/commons/proxy2/provider/ConstantProvider.java b/core/src/main/java/org/apache/commons/proxy2/provider/ConstantProvider.java
index 1f3c789..ba244fb 100644
--- a/core/src/main/java/org/apache/commons/proxy2/provider/ConstantProvider.java
+++ b/core/src/main/java/org/apache/commons/proxy2/provider/ConstantProvider.java
@@ -59,6 +59,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public T getObject()
     {
         return constant;
diff --git a/core/src/main/java/org/apache/commons/proxy2/provider/ProviderDecorator.java b/core/src/main/java/org/apache/commons/proxy2/provider/ProviderDecorator.java
index 0eba5a0..4fee780 100644
--- a/core/src/main/java/org/apache/commons/proxy2/provider/ProviderDecorator.java
+++ b/core/src/main/java/org/apache/commons/proxy2/provider/ProviderDecorator.java
@@ -61,6 +61,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public T getObject()
     {
         return inner.getObject();
diff --git a/core/src/main/java/org/apache/commons/proxy2/stub/AnnotationBuilder.java b/core/src/main/java/org/apache/commons/proxy2/stub/AnnotationBuilder.java
index e0e9e96..82efdd3 100644
--- a/core/src/main/java/org/apache/commons/proxy2/stub/AnnotationBuilder.java
+++ b/core/src/main/java/org/apache/commons/proxy2/stub/AnnotationBuilder.java
@@ -60,6 +60,7 @@
         /**
          * {@inheritDoc}
          */
+        @Override
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
         {
             if (ProxyUtils.isHashCode(method))
@@ -94,21 +95,25 @@
             this.target = target;
         }
 
+        @Override
         public Object[] getArguments()
         {
             return arguments;
         }
 
+        @Override
         public Method getMethod()
         {
             return method;
         }
 
+        @Override
         public Object getProxy()
         {
             return target;
         }
 
+        @Override
         public Object proceed() throws Throwable
         {
             try
@@ -124,6 +129,7 @@
 
     private static final ProxyFactory PROXY_FACTORY = new AbstractProxyFactory()
     {
+        @Override
         @SuppressWarnings("unchecked")
         public <T> T createInvokerProxy(ClassLoader classLoader, final Invoker invoker, Class<?>... proxyClasses)
         {
@@ -137,6 +143,7 @@
             });
         }
 
+        @Override
         @SuppressWarnings("unchecked")
         public <T> T createInterceptorProxy(ClassLoader classLoader, Object target, Interceptor interceptor,
                 Class<?>... proxyClasses)
@@ -145,6 +152,7 @@
                     ObjectProviderUtils.constant(target), interceptor));
         }
 
+        @Override
         @SuppressWarnings("unchecked")
         public <T> T createDelegatorProxy(ClassLoader classLoader, final ObjectProvider<?> delegateProvider,
                 Class<?>... proxyClasses)
diff --git a/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java b/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java
index 0f25571..8163c68 100644
--- a/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java
+++ b/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java
@@ -76,6 +76,7 @@
     // Other Methods
     //******************************************************************************************************************
 
+    @Override
     public T build()
     {
         return proxyFactory.createInterceptorProxy(target, switchInterceptor,
diff --git a/core/src/test/java/org/apache/commons/proxy2/AbstractProxyFactoryTestCase.java b/core/src/test/java/org/apache/commons/proxy2/AbstractProxyFactoryTestCase.java
index 2ecda05..4cb95a6 100644
--- a/core/src/test/java/org/apache/commons/proxy2/AbstractProxyFactoryTestCase.java
+++ b/core/src/test/java/org/apache/commons/proxy2/AbstractProxyFactoryTestCase.java
@@ -357,6 +357,7 @@
 
     private static class ChangeArgumentInterceptor implements Interceptor
     {
+        @Override
         public Object intercept(Invocation methodInvocation) throws Throwable
         {
             methodInvocation.getArguments()[0] = "something different";
@@ -371,6 +372,7 @@
         private Object proxy;
         private Class<?> invocationClass;
 
+        @Override
         public Object intercept(Invocation methodInvocation) throws Throwable
         {
             arguments = methodInvocation.getArguments();
@@ -387,6 +389,7 @@
         private Object[] args;
         private Object proxy;
 
+        @Override
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
         {
             this.proxy = proxy;
@@ -398,6 +401,7 @@
 
     protected static class NoOpMethodInterceptor implements Interceptor, Serializable
     {
+        @Override
         public Object intercept(Invocation methodInvocation) throws Throwable
         {
             return methodInvocation.proceed();
diff --git a/core/src/test/java/org/apache/commons/proxy2/util/AbstractEcho.java b/core/src/test/java/org/apache/commons/proxy2/util/AbstractEcho.java
index c32140b..389ffdf 100644
--- a/core/src/test/java/org/apache/commons/proxy2/util/AbstractEcho.java
+++ b/core/src/test/java/org/apache/commons/proxy2/util/AbstractEcho.java
@@ -30,6 +30,7 @@
     // Echo Implementation
     //**********************************************************************************************************************
 
+    @Override
     public String echoBack(String message)
     {
         return message;
diff --git a/core/src/test/java/org/apache/commons/proxy2/util/EchoImpl.java b/core/src/test/java/org/apache/commons/proxy2/util/EchoImpl.java
index a496948..fb16f15 100644
--- a/core/src/test/java/org/apache/commons/proxy2/util/EchoImpl.java
+++ b/core/src/test/java/org/apache/commons/proxy2/util/EchoImpl.java
@@ -36,15 +36,18 @@
     // Echo Implementation
     //**********************************************************************************************************************
 
+    @Override
     public void echo()
     {
     }
 
+    @Override
     public boolean echoBack(boolean b)
     {
         return b;
     }
 
+    @Override
     public String echoBack(String[] messages)
     {
         final StringBuilder sb = new StringBuilder();
@@ -56,6 +59,7 @@
         return sb.toString();
     }
 
+    @Override
     public String echoBack(String[][] messages)
     {
         final StringBuilder sb = new StringBuilder();
@@ -66,6 +70,7 @@
         return sb.toString();
     }
 
+    @Override
     public String echoBack(String[][][] messages)
     {
         final StringBuilder sb = new StringBuilder();
@@ -76,21 +81,25 @@
         return sb.toString();
     }
 
+    @Override
     public int echoBack(int i)
     {
         return i;
     }
 
+    @Override
     public String echoBack(String message1, String message2)
     {
         return message1 + message2;
     }
 
+    @Override
     public void illegalArgument()
     {
         throw new IllegalArgumentException("dummy message");
     }
 
+    @Override
     public void ioException() throws IOException
     {
         throw new IOException("dummy message");
diff --git a/core/src/test/java/org/apache/commons/proxy2/util/SuffixInterceptor.java b/core/src/test/java/org/apache/commons/proxy2/util/SuffixInterceptor.java
index afe39db..db17bbd 100644
--- a/core/src/test/java/org/apache/commons/proxy2/util/SuffixInterceptor.java
+++ b/core/src/test/java/org/apache/commons/proxy2/util/SuffixInterceptor.java
@@ -46,6 +46,7 @@
     // Interceptor Implementation
     //**********************************************************************************************************************
 
+    @Override
     public Object intercept(Invocation methodInvocation) throws Throwable
     {
         Object result = methodInvocation.proceed();
diff --git a/javassist/src/main/java/org/apache/commons/proxy2/javassist/JavassistInvocation.java b/javassist/src/main/java/org/apache/commons/proxy2/javassist/JavassistInvocation.java
index 39e08a0..f9b0e46 100644
--- a/javassist/src/main/java/org/apache/commons/proxy2/javassist/JavassistInvocation.java
+++ b/javassist/src/main/java/org/apache/commons/proxy2/javassist/JavassistInvocation.java
@@ -223,16 +223,19 @@
         return target;
     }
 
+    @Override
     public Object[] getArguments()
     {
         return arguments;
     }
 
+    @Override
     public Method getMethod()
     {
         return method;
     }
 
+    @Override
     public Object getProxy()
     {
         return proxy;
diff --git a/javassist/src/main/java/org/apache/commons/proxy2/javassist/JavassistProxyFactory.java b/javassist/src/main/java/org/apache/commons/proxy2/javassist/JavassistProxyFactory.java
index ac15c4c..28f903b 100644
--- a/javassist/src/main/java/org/apache/commons/proxy2/javassist/JavassistProxyFactory.java
+++ b/javassist/src/main/java/org/apache/commons/proxy2/javassist/JavassistProxyFactory.java
@@ -68,6 +68,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <T> T createDelegatorProxy(ClassLoader classLoader, ObjectProvider<?> targetProvider,
             Class<?>... proxyClasses)
@@ -87,6 +88,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <T> T createInterceptorProxy(ClassLoader classLoader, Object target, Interceptor interceptor,
             Class<?>... proxyClasses)
@@ -106,6 +108,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <T> T createInvokerProxy(ClassLoader classLoader, Invoker invoker, Class<?>... proxyClasses)
     {
@@ -127,6 +130,7 @@
 
     private static class DelegatingProxyClassGenerator extends AbstractProxyClassGenerator
     {
+        @Override
         public Class<?> generateProxyClass(ClassLoader classLoader, Class<?>... proxyClasses)
         {
             try
@@ -165,6 +169,7 @@
 
     private static class InterceptorProxyClassGenerator extends AbstractProxyClassGenerator
     {
+        @Override
         public Class<?> generateProxyClass(ClassLoader classLoader, Class<?>... proxyClasses)
         {
             try
@@ -229,6 +234,7 @@
 
     private static class InvokerProxyClassGenerator extends AbstractProxyClassGenerator
     {
+        @Override
         public Class<?> generateProxyClass(ClassLoader classLoader, Class<?>... proxyClasses)
         {
             try
