diff --git a/src/main/java/org/junit/Assert.java b/src/main/java/org/junit/Assert.java
index 961c5cef72b6..a018f533cffd 100644
--- a/src/main/java/org/junit/Assert.java
+++ b/src/main/java/org/junit/Assert.java
@@ -812,6 +812,40 @@ public static void assertNotSame(Object unexpected, Object actual) {
         assertNotSame(null, unexpected, actual);
     }
 
+    /**
+     * Asserts that two {@link CharSequence} instances have same content.
+     * If they do not, an {@link AssertionError} is thrown. If
+     * <code>expected</code> and <code>actual</code> are <code>null</code>,
+     * they are considered same content.
+     *
+     * @param expected the expected contents
+     * @param actual the object to compare to
+     */
+    public static void assertContentEquals(String expected, CharSequence actual)  {
+        assertContentEquals(null, expected, actual);
+    }
+
+    /**
+     * Asserts that two {@link CharSequence} instances have same content.
+     * If they do not, an {@link AssertionError} is thrown with the given message. If
+     * <code>expected</code> and <code>actual</code> are <code>null</code>,
+     * they are considered same content.
+     *
+     * @param message the identifying message for the {@link AssertionError}
+     * @param expected the expected contents
+     * @param actual the object to compare to
+     */
+    public static void assertContentEquals(String message, String expected, CharSequence actual) {
+        if (equalsRegardingNull(expected, actual)) {
+            return;
+        }
+        if (expected == null || actual == null) {
+            failNotEquals(message, expected, actual);
+        }
+
+        assertEquals(message, expected, actual.toString());
+    }
+
     private static void failSame(String message) {
         String formatted = "";
         if (message != null) {
diff --git a/src/test/java/org/junit/tests/assertion/AssertionTest.java b/src/test/java/org/junit/tests/assertion/AssertionTest.java
index ed7ddd1d0980..29a7fd3b1e60 100644
--- a/src/test/java/org/junit/tests/assertion/AssertionTest.java
+++ b/src/test/java/org/junit/tests/assertion/AssertionTest.java
@@ -4,6 +4,7 @@
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertContentEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotSame;
@@ -956,6 +957,90 @@ public void expectThrowsUsesCanonicalNameWhenRequiredExceptionNotThrown() {
         throw new AssertionError(ASSERTION_ERROR_EXPECTED);
     }
 
+    @Test
+    public void assertContentEqualsPass() throws Exception {
+        String expected = "StringValue";
+        CharSequence charSequence = new String("StringValue");
+        assertContentEquals(expected, charSequence);
+    }
+
+    @Test
+    public void assertContentEqualsPassBothNull() throws Exception {
+        String expected = null;
+        CharSequence charSequence = null;
+        assertContentEquals(expected, charSequence);
+    }
+
+    @Test
+    public void assertContentsActualNull() {
+        String expected = "StringValue";
+        CharSequence charSequence = null;
+        try {
+            assertContentEquals(expected, charSequence);
+        } catch (AssertionError exception) {
+            String expectedException = "expected:<StringValue> but was:<null>";
+            assertEquals(expectedException, exception.getMessage());
+            return;
+        }
+        fail("Expected an AssertionError");
+    }
+
+    @Test
+    public void assertContentsExpectedNull() {
+        String expected = null;
+        CharSequence charSequence = new String("StringValue");
+        try {
+            assertContentEquals(expected, charSequence);
+        } catch (AssertionError exception) {
+            String expectedException = "expected:<null> but was:<StringValue>";
+            assertEquals(expectedException, exception.getMessage());
+            return;
+        }
+        fail("Expected an AssertionError");
+    }
+
+    @Test
+    public void assertContentEqualsNotEqualButSameLength() {
+        String expected = "StringValue";
+        CharSequence charSequence = new String("NotTheSame!");
+        try {
+            assertContentEquals(expected, charSequence);
+        } catch (AssertionError exception) {
+            String expectedException = "expected:<[StringValue]> but was:<[NotTheSame!]>";
+            assertEquals(expectedException, exception.getMessage());
+            return;
+        }
+        fail("Expected an AssertionError");
+    }
+
+    @Test
+    public void assertContentEqualsNotEqualDifferentLength() {
+        String expected = "StringValue";
+        CharSequence charSequence = new String("NotTheSame");
+        try {
+            assertContentEquals(expected, charSequence);
+        } catch (AssertionError exception) {
+            String expectedException = "expected:<[StringValu]e> but was:<[NotTheSam]e>";
+            assertEquals(expectedException, exception.getMessage());
+            return;
+        }
+        fail("Expected an AssertionError");
+    }
+
+    @Test
+    public void assertContentEqualsPassCustomMessage() throws Exception {
+        String expected = "StringValue";
+        CharSequence charSequence = new String("StringValue");
+        assertContentEquals("My Message", expected, charSequence);
+    }
+
+    @Test
+    public void assertContentEqualsPassBothNullCustomMessage() throws Exception {
+        String expected = null;
+        CharSequence charSequence = null;
+        assertContentEquals("My Message", expected, charSequence);
+    }
+
     private static class NestedException extends RuntimeException {
         private static final long serialVersionUID = 1L;
     }