diff --git a/CHANGELOG.md b/CHANGELOG.md
index faad006..ea269ca 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
 - `Receive()` no longer errors when passed a closed channel, it's perfectly fine to attempt to read from a closed channel so Ω(c).Should(Receive()) always fails and Ω(c).ShoudlNot(Receive()) always passes with a closed channel.
 - Added `HavePrefix` and `HaveSuffix` matchers.
 - `ghttp` can now handle concurrent requests.
+- Added `Succeed` which allows one to write `Ω(MyFunction()).Should(Succeed())`.
 
 ## 1.0 (8/2/2014)
 
diff --git a/matchers.go b/matchers.go
index 708e697..307f88a 100644
--- a/matchers.go
+++ b/matchers.go
@@ -49,6 +49,21 @@
 	return &matchers.HaveOccurredMatcher{}
 }
 
+//Succeed passes if actual is a nil error
+//Succeed is intended to be used with functions that return a single error value. Instead of
+//    err := SomethingThatMightFail()
+//    Ω(err).ShouldNot(HaveOccurred())
+//
+//You can write:
+//    Ω(SomethingThatMightFail()).Should(Succeed())
+//
+//It is a mistake to use Succeed with a function that has multiple return values.  Gomega's Ω and Expect
+//functions automatically trigger failure if any return values after the first return value are non-zero/non-nil.
+//This means that Ω(MultiReturnFunc()).ShouldNot(Succeed()) can never pass.
+func Succeed() types.GomegaMatcher {
+	return &matchers.SucceedMatcher{}
+}
+
 //MatchError succeeds if actual is a non-nil error that matches the passed in string/error.
 //
 //These are valid use-cases:
diff --git a/matchers/succeed_matcher.go b/matchers/succeed_matcher.go
new file mode 100644
index 0000000..c162b67
--- /dev/null
+++ b/matchers/succeed_matcher.go
@@ -0,0 +1,30 @@
+package matchers
+
+import (
+	"fmt"
+
+	"github.com/onsi/gomega/format"
+)
+
+type SucceedMatcher struct {
+}
+
+func (matcher *SucceedMatcher) Match(actual interface{}) (success bool, err error) {
+	if actual == nil {
+		return true, nil
+	}
+
+	if isError(actual) {
+		return false, nil
+	}
+
+	return false, fmt.Errorf("Expected an error-type.  Got:\n%s", format.Object(actual, 1))
+}
+
+func (matcher *SucceedMatcher) FailureMessage(actual interface{}) (message string) {
+	return fmt.Sprintf("Expected success, but got an error:\n%s", format.Object(actual, 1))
+}
+
+func (matcher *SucceedMatcher) NegatedFailureMessage(actual interface{}) (message string) {
+	return "Expected failure, but got no error."
+}
diff --git a/matchers/succeed_matcher_test.go b/matchers/succeed_matcher_test.go
new file mode 100644
index 0000000..3562e70
--- /dev/null
+++ b/matchers/succeed_matcher_test.go
@@ -0,0 +1,39 @@
+package matchers_test
+
+import (
+	"errors"
+
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
+	. "github.com/onsi/gomega/matchers"
+)
+
+func Erroring() error {
+	return errors.New("bam")
+}
+
+func NotErroring() error {
+	return nil
+}
+
+type AnyType struct{}
+
+func Invalid() *AnyType {
+	return nil
+}
+
+var _ = Describe("Succeed", func() {
+	It("should succeed if the function succeeds", func() {
+		Ω(NotErroring()).Should(Succeed())
+	})
+
+	It("should succeed (in the negated) if the function errored", func() {
+		Ω(Erroring()).ShouldNot(Succeed())
+	})
+
+	It("should not if passed a non-error", func() {
+		success, err := (&SucceedMatcher{}).Match(Invalid())
+		Ω(success).Should(BeFalse())
+		Ω(err).Should(HaveOccurred())
+	})
+})
