ContainElement no longer bails if a passed-in matcher errors
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a33a96c..5f2c1ed 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@
 
 Bug Fixes:
 - gexec: `session.Wait` now uses `EventuallyWithOffset` to get the right line number in the failure.
+- `ContainElement` no longer bails if a passed-in matcher errors.
 
 ## 1.0 (8/2/2014)
 
diff --git a/matchers/contain_element_matcher.go b/matchers/contain_element_matcher.go
index 014a20f..4159335 100644
--- a/matchers/contain_element_matcher.go
+++ b/matchers/contain_element_matcher.go
@@ -2,8 +2,9 @@
 
 import (
 	"fmt"
-	"github.com/onsi/gomega/format"
 	"reflect"
+
+	"github.com/onsi/gomega/format"
 )
 
 type ContainElementMatcher struct {
@@ -25,6 +26,7 @@
 	if isMap(actual) {
 		keys = value.MapKeys()
 	}
+	var lastError error
 	for i := 0; i < value.Len(); i++ {
 		var success bool
 		var err error
@@ -34,14 +36,15 @@
 			success, err = elemMatcher.Match(value.Index(i).Interface())
 		}
 		if err != nil {
-			return false, fmt.Errorf("ContainElement's element matcher failed with:\n\t%s", err.Error())
+			lastError = err
+			continue
 		}
 		if success {
 			return true, nil
 		}
 	}
 
-	return false, nil
+	return false, lastError
 }
 
 func (matcher *ContainElementMatcher) FailureMessage(actual interface{}) (message string) {
diff --git a/matchers/contain_element_matcher_test.go b/matchers/contain_element_matcher_test.go
index 4d29eeb..38ee518 100644
--- a/matchers/contain_element_matcher_test.go
+++ b/matchers/contain_element_matcher_test.go
@@ -35,8 +35,12 @@
 				Ω(map[string]int{"foo": 1, "bar": 2}).ShouldNot(ContainElement(BeNumerically(">", 2)))
 			})
 
-			It("should fail if the matcher ever fails", func() {
-				actual := []interface{}{1, 2, "3", 4}
+			It("should power through even if the matcher ever fails", func() {
+				Ω([]interface{}{1, 2, "3", 4}).Should(ContainElement(BeNumerically(">=", 3)))
+			})
+
+			It("should fail if the matcher fails", func() {
+				actual := []interface{}{1, 2, "3", "4"}
 				success, err := (&ContainElementMatcher{Element: BeNumerically(">=", 3)}).Match(actual)
 				Ω(success).Should(BeFalse())
 				Ω(err).Should(HaveOccurred())