Index: impl/src/main/java/org/jboss/weld/injection/FieldInjectionPoint.java
===================================================================
--- impl/src/main/java/org/jboss/weld/injection/FieldInjectionPoint.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/injection/FieldInjectionPoint.java	(working copy)
@@ -42,6 +42,7 @@
 import org.jboss.weld.introspector.WeldField;
 import org.jboss.weld.logging.messages.ReflectionMessage;
 import org.jboss.weld.manager.BeanManagerImpl;
+import org.jboss.weld.util.AnnotatedTypes;
 
 public class FieldInjectionPoint<T, X> extends ForwardingWeldField<T, X> implements WeldInjectionPoint<T, Field>, Serializable
 {
@@ -64,6 +65,20 @@
    }
 
    @Override
+   public boolean equals(Object obj)
+   {
+      if (obj instanceof FieldInjectionPoint<?, ?>)
+      {
+         FieldInjectionPoint<?, ?> ip = (FieldInjectionPoint<?, ?>) obj;
+         if (AnnotatedTypes.compareAnnotatedField(field, ip.field))
+         {
+            return true;
+         }
+      }
+      return false;
+   }
+
+   @Override
    protected WeldField<T, X> delegate()
    {
       return field;
Index: impl/src/main/java/org/jboss/weld/injection/ConstructorInjectionPoint.java
===================================================================
--- impl/src/main/java/org/jboss/weld/injection/ConstructorInjectionPoint.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/injection/ConstructorInjectionPoint.java	(working copy)
@@ -46,6 +46,7 @@
 import org.jboss.weld.introspector.WeldParameter;
 import org.jboss.weld.logging.messages.ReflectionMessage;
 import org.jboss.weld.manager.BeanManagerImpl;
+import org.jboss.weld.util.AnnotatedTypes;
 
 public class ConstructorInjectionPoint<T> extends ForwardingWeldConstructor<T> implements WeldInjectionPoint<T, Constructor<T>>, Serializable
 {
@@ -86,6 +87,20 @@
    }
 
    @Override
+   public boolean equals(Object obj)
+   {
+      if (obj instanceof ConstructorInjectionPoint<?>)
+      {
+         ConstructorInjectionPoint<?> ip = (ConstructorInjectionPoint<?>) obj;
+         if (AnnotatedTypes.compareAnnotatedCallable(constructor, ip.constructor))
+         {
+            return true;
+         }
+      }
+      return false;
+   }
+
+   @Override
    protected WeldConstructor<T> delegate()
    {
       return constructor;
Index: impl/src/main/java/org/jboss/weld/injection/MethodInjectionPoint.java
===================================================================
--- impl/src/main/java/org/jboss/weld/injection/MethodInjectionPoint.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/injection/MethodInjectionPoint.java	(working copy)
@@ -43,6 +43,7 @@
 import org.jboss.weld.introspector.WeldParameter;
 import org.jboss.weld.logging.messages.ReflectionMessage;
 import org.jboss.weld.manager.BeanManagerImpl;
+import org.jboss.weld.util.AnnotatedTypes;
 
 public class MethodInjectionPoint<T, X> extends ForwardingWeldMethod<T, X> implements WeldInjectionPoint<T, Method>
 {
@@ -83,6 +84,20 @@
    }
 
    @Override
+   public boolean equals(Object obj)
+   {
+      if (obj instanceof MethodInjectionPoint<?, ?>)
+      {
+         MethodInjectionPoint<?, ?> ip = (MethodInjectionPoint<?, ?>) obj;
+         if (AnnotatedTypes.compareAnnotatedCallable(method, ip.method))
+         {
+            return true;
+         }
+      }
+      return false;
+   }
+
+   @Override
    protected WeldMethod<T, X> delegate()
    {
       return method;
Index: impl/src/main/java/org/jboss/weld/injection/ParameterInjectionPoint.java
===================================================================
--- impl/src/main/java/org/jboss/weld/injection/ParameterInjectionPoint.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/injection/ParameterInjectionPoint.java	(working copy)
@@ -67,6 +67,20 @@
    }
 
    @Override
+   public boolean equals(Object obj)
+   {
+      if (obj instanceof ParameterInjectionPoint<?, ?>)
+      {
+         ParameterInjectionPoint<?, ?> ip = (ParameterInjectionPoint<?, ?>) obj;
+         if (parameter.getDeclaringWeldCallable().getJavaMember().equals(ip.parameter.getDeclaringWeldCallable().getJavaMember()) && parameter.getAnnotations().equals(ip.parameter.getAnnotations()) && parameter.getPosition() == ip.parameter.getPosition())
+         {
+            return true;
+         }
+      }
+      return false;
+   }
+
+   @Override
    protected WeldParameter<T, X> delegate()
    {
       return parameter;
Index: impl/src/main/java/org/jboss/weld/introspector/jlr/WeldFieldImpl.java
===================================================================
--- impl/src/main/java/org/jboss/weld/introspector/jlr/WeldFieldImpl.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/introspector/jlr/WeldFieldImpl.java	(working copy)
@@ -135,24 +135,4 @@
       return new StringBuilder().append("field ").append(getDeclaringType().getName()).append(".").append(field.getName()).toString();
    }
 
-   @Override
-   public boolean equals(Object other)
-   {
-      if (super.equals(other) && other instanceof WeldField<?, ?>)
-      {
-         WeldField<?, ?> that = (WeldField<?, ?>) other;
-         return this.getJavaMember().equals(that.getJavaMember());
-      }
-      else
-      {
-         return false;
-      }
-   }
-
-   @Override
-   public int hashCode()
-   {
-      return getDelegate().hashCode();
-   }
-
 }
Index: impl/src/main/java/org/jboss/weld/introspector/jlr/WeldClassImpl.java
===================================================================
--- impl/src/main/java/org/jboss/weld/introspector/jlr/WeldClassImpl.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/introspector/jlr/WeldClassImpl.java	(working copy)
@@ -47,7 +47,6 @@
 import org.jboss.weld.introspector.WeldField;
 import org.jboss.weld.introspector.WeldMethod;
 import org.jboss.weld.resources.ClassTransformer;
-import org.jboss.weld.util.AnnotatedTypes;
 import org.jboss.weld.util.Names;
 import org.jboss.weld.util.collections.HashSetSupplier;
 import org.jboss.weld.util.reflection.HierarchyDiscovery;
@@ -366,17 +365,6 @@
       }
    }
 
-   @Override
-   public boolean equals(Object other)
-   {
-      if (other instanceof WeldClassImpl<?>)
-      {
-         WeldClassImpl<?> that = (WeldClassImpl<?>) other;
-         return AnnotatedTypes.compareAnnotatedTypes(this, that) && this.getActualTypeArguments().length == that.getActualTypeArguments().length && Arrays.equals(this.getActualTypeArguments(), that.getActualTypeArguments());
-      }
-      return false;
-   }
-
    /**
     * Gets the implementing class
     * 
Index: impl/src/main/java/org/jboss/weld/introspector/jlr/WeldConstructorImpl.java
===================================================================
--- impl/src/main/java/org/jboss/weld/introspector/jlr/WeldConstructorImpl.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/introspector/jlr/WeldConstructorImpl.java	(working copy)
@@ -276,19 +276,6 @@
    }
 
    /**
-    * The overridden hashcode
-    * 
-    * Gets the hash code from the delegate
-    * 
-    * @return The hash code
-    */
-   @Override
-   public int hashCode()
-   {
-      return getDelegate().hashCode();
-   }
-
-   /**
     * Gets a string representation of the constructor
     * 
     * @return A string representation
Index: impl/src/main/java/org/jboss/weld/introspector/jlr/AbstractWeldAnnotated.java
===================================================================
--- impl/src/main/java/org/jboss/weld/introspector/jlr/AbstractWeldAnnotated.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/introspector/jlr/AbstractWeldAnnotated.java	(working copy)
@@ -23,7 +23,6 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -207,34 +206,6 @@
    }
 
    /**
-    * Compares two AbstractAnnotatedItems
-    * 
-    * @param other The other item
-    * @return True if equals, false otherwise
-    */
-   @Override
-   public boolean equals(Object other)
-   {
-      if (other instanceof WeldAnnotated<?, ?>)
-      {
-         WeldAnnotated<?, ?> that = (WeldAnnotated<?, ?>) other;
-         return this.getAnnotations().equals(that.getAnnotations()) && this.getJavaClass().equals(that.getJavaClass()) && this.getActualTypeArguments().length == that.getActualTypeArguments().length && Arrays.equals(this.getActualTypeArguments(), that.getActualTypeArguments());
-      }
-      return false;
-   }
-
-   /**
-    * Gets the hash code of the actual type
-    * 
-    * @return The hash code
-    */
-   @Override
-   public int hashCode()
-   {
-      return getJavaClass().hashCode();
-   }
-
-   /**
     * Indicates if the type is proxyable to a set of pre-defined rules
     * 
     * @return True if proxyable, false otherwise.
Index: impl/src/main/java/org/jboss/weld/introspector/jlr/WeldMethodImpl.java
===================================================================
--- impl/src/main/java/org/jboss/weld/introspector/jlr/WeldMethodImpl.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/introspector/jlr/WeldMethodImpl.java	(working copy)
@@ -187,30 +187,11 @@
       return Collections.unmodifiableList(annotatedParameters.get(annotationType));
    }
 
-   @Override
-   public boolean equals(Object other)
-   {
-      if (super.equals(other) && other instanceof WeldMethod)
-      {
-         WeldMethod<?, ?> that = (WeldMethod<?, ?>) other;
-         return this.getJavaMember().equals(that.getJavaMember()) && this.getWeldParameters().equals(that.getWeldParameters());
-      }
-      else
-      {
-         return false;
-      }
-   }
-
    public boolean isEquivalent(Method method)
    {
       return this.getDeclaringType().isEquivalent(method.getDeclaringClass()) && this.getName().equals(method.getName()) && Arrays.equals(this.getParameterTypesAsArray(), method.getParameterTypes());
    }
 
-   @Override
-   public int hashCode()
-   {
-      return getDelegate().hashCode();
-   }
 
    public T invokeOnInstance(Object instance, Object... parameters) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException
    {
Index: impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployerEnvironment.java
===================================================================
--- impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployerEnvironment.java	(revision 5686)
+++ impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployerEnvironment.java	(working copy)
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Map.Entry;
 
 import javax.enterprise.inject.New;
 
@@ -53,6 +54,7 @@
 import org.jboss.weld.resolution.ResolvableFactory;
 import org.jboss.weld.resolution.TypeSafeDisposerResolver;
 import org.jboss.weld.resources.ClassTransformer;
+import org.jboss.weld.util.AnnotatedTypes;
 
 public class BeanDeployerEnvironment
 {
@@ -102,6 +104,15 @@
    {
       if (!producerMethodBeanMap.containsKey(method))
       {
+         for (Entry<WeldMethod<?, ?>, ProducerMethod<?, ?>> e : producerMethodBeanMap.entrySet())
+         {
+            if (AnnotatedTypes.compareAnnotatedCallable(method, e.getKey()))
+            {
+               ProducerMethod<?, ?> bean = e.getValue();
+               bean.initialize(this);
+               return (ProducerMethod<X, T>) bean;
+            }
+         }
          return null;
       }
       else
Index: tests/src/test/java/org/jboss/weld/tests/managed/newBean/NewSimpleBeanTest.java
===================================================================
--- tests/src/test/java/org/jboss/weld/tests/managed/newBean/NewSimpleBeanTest.java	(revision 5686)
+++ tests/src/test/java/org/jboss/weld/tests/managed/newBean/NewSimpleBeanTest.java	(working copy)
@@ -26,6 +26,7 @@
 import org.jboss.weld.introspector.WeldAnnotated;
 import org.jboss.weld.literal.NewLiteral;
 import org.jboss.weld.test.AbstractWeldTest;
+import org.jboss.weld.util.AnnotatedTypes;
 import org.testng.annotations.Test;
 
 @Artifact
@@ -65,7 +66,7 @@
    public void testNewBeanHasSameConstructorAsWrappedBean()
    {
       initNewBean();
-      assert wrappedSimpleBean.getConstructor().equals(newSimpleBean.getConstructor());
+      assert AnnotatedTypes.compareAnnotatedCallable(wrappedSimpleBean.getConstructor(), newSimpleBean.getConstructor());
    }
 
    @Test(groups = { "new" })
