diff --git a/matchers.go b/matchers.go
index e594db8..3b39677 100644
--- a/matchers.go
+++ b/matchers.go
@@ -337,3 +337,9 @@
 func BeARegularFile() types.GomegaMatcher {
 	return &matchers.BeARegularFileMatcher{}
 }
+
+//BeADirectory succeeds iff a file exists and is a directory.
+//Actual must be a string representing the abs path to the file being checked.
+func BeADirectory() types.GomegaMatcher {
+	return &matchers.BeADirectoryMatcher{}
+}
diff --git a/matchers/be_a_directory.go b/matchers/be_a_directory.go
new file mode 100644
index 0000000..7b6975e
--- /dev/null
+++ b/matchers/be_a_directory.go
@@ -0,0 +1,54 @@
+package matchers
+
+import (
+	"fmt"
+	"os"
+
+	"github.com/onsi/gomega/format"
+)
+
+type notADirectoryError struct {
+	os.FileInfo
+}
+
+func (t notADirectoryError) Error() string {
+	fileInfo := os.FileInfo(t)
+	switch {
+	case fileInfo.Mode().IsRegular():
+		return "file is a regular file"
+	default:
+		return fmt.Sprintf("file mode is: %s", fileInfo.Mode().String())
+	}
+}
+
+type BeADirectoryMatcher struct {
+	expected interface{}
+	err      error
+}
+
+func (matcher *BeADirectoryMatcher) Match(actual interface{}) (success bool, err error) {
+	actualFilename, ok := actual.(string)
+	if !ok {
+		return false, fmt.Errorf("BeADirectoryMatcher matcher expects a file path")
+	}
+
+	fileInfo, err := os.Stat(actualFilename)
+	if err != nil {
+		matcher.err = err
+		return false, nil
+	}
+
+	if !fileInfo.Mode().IsDir() {
+		matcher.err = notADirectoryError{fileInfo}
+		return false, nil
+	}
+	return true, nil
+}
+
+func (matcher *BeADirectoryMatcher) FailureMessage(actual interface{}) (message string) {
+	return format.Message(actual, fmt.Sprintf("to be a directory: %s", matcher.err))
+}
+
+func (matcher *BeADirectoryMatcher) NegatedFailureMessage(actual interface{}) (message string) {
+	return format.Message(actual, fmt.Sprintf("not be a directory"))
+}
diff --git a/matchers/be_a_directory_test.go b/matchers/be_a_directory_test.go
new file mode 100644
index 0000000..e59d769
--- /dev/null
+++ b/matchers/be_a_directory_test.go
@@ -0,0 +1,40 @@
+package matchers_test
+
+import (
+	"io/ioutil"
+	"os"
+
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
+	. "github.com/onsi/gomega/matchers"
+)
+
+var _ = Describe("BeADirectoryMatcher", func() {
+	Context("when passed a string", func() {
+		It("should do the right thing", func() {
+			Ω("/dne/test").ShouldNot(BeADirectory())
+
+			tmpFile, err := ioutil.TempFile("", "gomega-test-tempfile")
+			Ω(err).ShouldNot(HaveOccurred())
+			defer os.Remove(tmpFile.Name())
+			Ω(tmpFile.Name()).ShouldNot(BeADirectory())
+
+			tmpDir, err := ioutil.TempDir("", "gomega-test-tempdir")
+			Ω(err).ShouldNot(HaveOccurred())
+			defer os.Remove(tmpDir)
+			Ω(tmpDir).Should(BeADirectory())
+		})
+	})
+
+	Context("when passed something else", func() {
+		It("should error", func() {
+			success, err := (&BeADirectoryMatcher{}).Match(nil)
+			Ω(success).Should(BeFalse())
+			Ω(err).Should(HaveOccurred())
+
+			success, err = (&BeADirectoryMatcher{}).Match(true)
+			Ω(success).Should(BeFalse())
+			Ω(err).Should(HaveOccurred())
+		})
+	})
+})
diff --git a/matchers/be_a_regular_file.go b/matchers/be_a_regular_file.go
index 7a58928..e239131 100644
--- a/matchers/be_a_regular_file.go
+++ b/matchers/be_a_regular_file.go
@@ -29,7 +29,7 @@
 func (matcher *BeARegularFileMatcher) Match(actual interface{}) (success bool, err error) {
 	actualFilename, ok := actual.(string)
 	if !ok {
-		return false, fmt.Errorf("FileExistsMatcher matcher expects a file path")
+		return false, fmt.Errorf("BeARegularFileMatcher matcher expects a file path")
 	}
 
 	fileInfo, err := os.Stat(actualFilename)
diff --git a/matchers/be_an_existing_file.go b/matchers/be_an_existing_file.go
index 30a350e..d42eba2 100644
--- a/matchers/be_an_existing_file.go
+++ b/matchers/be_an_existing_file.go
@@ -14,7 +14,7 @@
 func (matcher *BeAnExistingFileMatcher) Match(actual interface{}) (success bool, err error) {
 	actualFilename, ok := actual.(string)
 	if !ok {
-		return false, fmt.Errorf("FileExistsMatcher matcher expects a file path")
+		return false, fmt.Errorf("BeAnExistingFileMatcher matcher expects a file path")
 	}
 
 	if _, err = os.Stat(actualFilename); err != nil {
