--- src/main/java/org/junit/internal/matchers/CombinableMatcher.java	2009-06-12 05:01:46.000000000 +0200
+++ src/main/java/org/junit/internal/matchers/CombinableMatcher.java	2009-06-12 15:54:29.000000000 +0200
@@ -1,34 +1,14 @@
 package org.junit.internal.matchers;
 
-import static org.hamcrest.CoreMatchers.allOf;
-import static org.hamcrest.CoreMatchers.anyOf;
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 
-public class CombinableMatcher<T> extends BaseMatcher<T> {
-
-	private final Matcher<? extends T> fMatcher;
-
-	public CombinableMatcher(Matcher<? extends T> matcher) {
-		fMatcher= matcher;
-	}
-
-	public boolean matches(Object item) {
-		return fMatcher.matches(item);
-	}
-
-	public void describeTo(Description description) {
-		description.appendDescriptionOf(fMatcher);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public CombinableMatcher<T> and(Matcher<? extends T> matcher) {
-		return new CombinableMatcher<T>(allOf(matcher, fMatcher));
-	}
-
-	@SuppressWarnings("unchecked")
-	public CombinableMatcher<T> or(Matcher<? extends T> matcher) {
-		return new CombinableMatcher<T>(anyOf(matcher, fMatcher));
+/**
+ * @deprectated Use org.hamcrest.core.CombinableMatcher directly
+ */
+@Deprecated
+public class CombinableMatcher<T> extends org.hamcrest.core.CombinableMatcher<T> {
+	// should only be using static factories
+	private CombinableMatcher(Matcher<? super T> matcher) {
+		super(matcher);
 	}
 }
\ No newline at end of file
--- src/main/java/org/junit/internal/matchers/Each.java	2009-06-12 05:01:46.000000000 +0200
+++ src/main/java/org/junit/internal/matchers/Each.java	2009-06-12 15:54:29.000000000 +0200
@@ -1,24 +1,15 @@
 package org.junit.internal.matchers;
 
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.internal.matchers.IsCollectionContaining.hasItem;
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
 import org.hamcrest.Matcher;
+import org.hamcrest.core.Every;
 
+
+/**
+ * @deprecated use org.hamcrest.core.Every
+ */
+@Deprecated
 public class Each {
 	public static <T> Matcher<Iterable<T>> each(final Matcher<T> individual) {
-		final Matcher<Iterable<T>> allItemsAre = not(hasItem(not(individual)));
-		
-		return new BaseMatcher<Iterable<T>>() {
-			public boolean matches(Object item) {
-				return allItemsAre.matches(item);
-			}
-			
-			public void describeTo(Description description) {
-				description.appendText("each ");
-				individual.describeTo(description);
-			}
-		};
+		return Every.everyItem(individual);
 	}
 }
--- src/main/java/org/junit/internal/matchers/IsCollectionContaining.java	2009-06-12 05:01:46.000000000 +0200
+++ src/main/java/org/junit/internal/matchers/IsCollectionContaining.java	2009-06-12 15:54:29.000000000 +0200
@@ -1,67 +1,16 @@
 package org.junit.internal.matchers;
 
-import static org.hamcrest.core.AllOf.allOf;
-import static org.hamcrest.core.IsEqual.equalTo;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.hamcrest.Description;
-import org.hamcrest.Factory;
 import org.hamcrest.Matcher;
 
 // Copied (hopefully temporarily) from hamcrest-library
-public class IsCollectionContaining<T> extends TypeSafeMatcher<Iterable<T>> {
-    private final Matcher<? extends T> elementMatcher;
-
-    public IsCollectionContaining(Matcher<? extends T> elementMatcher) {
-        this.elementMatcher = elementMatcher;
-    }
-
-    @Override
-	public boolean matchesSafely(Iterable<T> collection) {
-        for (T item : collection) {
-            if (elementMatcher.matches(item)){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public void describeTo(Description description) {
-        description
-        	.appendText("a collection containing ")
-        	.appendDescriptionOf(elementMatcher);
-    }
-
-    @Factory
-    public static <T> Matcher<Iterable<T>> hasItem(Matcher<? extends T> elementMatcher) {
-        return new IsCollectionContaining<T>(elementMatcher);
-    }
-
-    @Factory
-    public static <T> Matcher<Iterable<T>> hasItem(T element) {
-        return hasItem(equalTo(element));
-    }
-
-    @Factory
-    public static <T> Matcher<Iterable<T>> hasItems(Matcher<? extends T>... elementMatchers) {
-        Collection<Matcher<? extends Iterable<T>>> all
-                = new ArrayList<Matcher<? extends Iterable<T>>>(elementMatchers.length);
-        for (Matcher<? extends T> elementMatcher : elementMatchers) {
-            all.add(hasItem(elementMatcher));
-        }
-        return allOf(all);
-    }
-
-    @Factory
-    public static <T> Matcher<Iterable<T>> hasItems(T... elements) {
-        Collection<Matcher<? extends Iterable<T>>> all
-                = new ArrayList<Matcher<? extends Iterable<T>>>(elements.length);
-        for (T element : elements) {
-            all.add(hasItem(element));
-        }
-        return allOf(all);
-    }
-
+/**
+ * @deprecated use org.hamcrest.core.IsCollectionContaining directly
+ */
+@Deprecated 
+public class IsCollectionContaining<T> extends org.hamcrest.core.IsCollectionContaining<T> {
+	// Client code should just use static factories, so this should be OK
+	private IsCollectionContaining(Matcher<? super T> elementMatcher) {
+		super(elementMatcher);
+		// TODO Auto-generated constructor stub
+	}
 }
--- src/main/java/org/junit/matchers/JUnitMatchers.java	2009-06-12 05:01:47.000000000 +0200
+++ src/main/java/org/junit/matchers/JUnitMatchers.java	2009-06-12 15:54:29.000000000 +0200
@@ -1,38 +1,46 @@
 package org.junit.matchers;
 
+import org.hamcrest.CoreMatchers;
 import org.hamcrest.Matcher;
-import org.junit.internal.matchers.CombinableMatcher;
-import org.junit.internal.matchers.Each;
-import org.junit.internal.matchers.IsCollectionContaining;
-import org.junit.internal.matchers.StringContains;
+import org.hamcrest.core.CombinableMatcher;
 
 /**
  * Convenience import class: these are useful matchers for use with the assertThat method, but they are
  * not currently included in the basic CoreMatchers class from hamcrest.
+ * @deprecated as of JUnit 4.7, all of these matchers are found in the org.hamcrest.CoreMatchers
+ *             class instead.
  */
+@Deprecated
 public class JUnitMatchers {
+	// TODO (May 27, 2009 11:46:27 AM): deprecate all?
 	/**
 	 * @param element
 	 * @return A matcher matching any collection containing element
+	 * @deprecated Use org.hamcrest.CoreMatchers.hasItem
 	 */
-	public static <T> org.hamcrest.Matcher<java.lang.Iterable<T>> hasItem(T element) {
-		return IsCollectionContaining.hasItem(element);
+	@Deprecated
+	public static <T> Matcher<Iterable<? super T>> hasItem(T element) {
+		return CoreMatchers.<T>hasItem(element);
 	}
 
 	/**
 	 * @param elementMatcher
 	 * @return A matcher matching any collection containing an element matching elementMatcher
+	 * @deprecated Use org.hamcrest.CoreMatchers.hasItem
 	 */
-	public static <T> org.hamcrest.Matcher<java.lang.Iterable<T>> hasItem(org.hamcrest.Matcher<? extends T> elementMatcher) {
-		return IsCollectionContaining.hasItem(elementMatcher);
+	@Deprecated
+    public static <T> Matcher<Iterable<? super T>> hasItem(Matcher<? super T> elementMatcher) {
+		return CoreMatchers.<T>hasItem(elementMatcher);
 	}
 
 	/**
 	 * @param elements
 	 * @return A matcher matching any collection containing every element in elements
+	 * @deprecated Use org.hamcrest.CoreMatchers.hasItems
 	 */
+	@Deprecated
 	public static <T> org.hamcrest.Matcher<java.lang.Iterable<T>> hasItems(T... elements) {
-		return IsCollectionContaining.hasItems(elements);
+		return CoreMatchers.<T>hasItems(elements);
 	}
 
 	/**
@@ -40,25 +48,31 @@
 	 * @return A matcher matching any collection containing at least one element that matches 
 	 *         each matcher in elementMatcher (this may be one element matching all matchers,
 	 *         or different elements matching each matcher)
+	 * @deprecated Use org.hamcrest.CoreMatchers.hasItems
 	 */
-	public static <T> org.hamcrest.Matcher<java.lang.Iterable<T>> hasItems(org.hamcrest.Matcher<? extends T>... elementMatchers) {
-		return IsCollectionContaining.hasItems(elementMatchers);
+	@Deprecated
+	public static <T> Matcher<Iterable<T>> hasItems(Matcher<? super T>... elementMatchers) {
+		return CoreMatchers.<T>hasItems(elementMatchers);
 	}
 
 	/**
 	 * @param elementMatcher
 	 * @return A matcher matching any collection in which every element matches elementMatcher
+	 * @deprecated use CoreMatchers.everyItem directly
 	 */
+	@Deprecated
 	public static <T> Matcher<Iterable<T>> everyItem(final Matcher<T> elementMatcher) {
-		return Each.each(elementMatcher);
+		return CoreMatchers.everyItem(elementMatcher);
 	}
 
 	/**
 	 * @param substring
 	 * @return a matcher matching any string that contains substring
+	 * @deprecated Use org.hamcrest.CoreMatchers.containsString
 	 */
+	@Deprecated
 	public static org.hamcrest.Matcher<java.lang.String> containsString(java.lang.String substring) {
-		return StringContains.containsString(substring);
+		return CoreMatchers.containsString(substring);
 	}
 	
 	/**
@@ -66,9 +80,11 @@
 	 * <pre>
 	 *   assertThat(string, both(containsString("a")).and(containsString("b")));
 	 * </pre>
+	 * @deprecated Use org.hamcrest.CoreMatchers.both
 	 */
-	public static <T> CombinableMatcher<T> both(Matcher<T> matcher) {
-		return new CombinableMatcher<T>(matcher);
+	@Deprecated
+	public static <T> CombinableMatcher<T> both(Matcher<? super T> matcher) {
+		return CoreMatchers.both(matcher);
 	}
 	
 	/**
@@ -76,8 +92,10 @@
 	 * <pre>
 	 *   assertThat(string, both(containsString("a")).and(containsString("b")));
 	 * </pre>
+	 * @deprecated Use org.hamcrest.CoreMatchers.either
 	 */
-	public static <T> CombinableMatcher<T> either(Matcher<T> matcher) {
-		return new CombinableMatcher<T>(matcher);
+	@Deprecated
+	public static <T> CombinableMatcher<T> either(Matcher<? super T> matcher) {
+		return CoreMatchers.either(matcher);
 	}	
 }