v1.5.1
diff --git a/RELEASING b/RELEASING
index c4973b2..fd4affb 100644
--- a/RELEASING
+++ b/RELEASING
@@ -2,11 +2,16 @@
 
 Push new release branch:
 1. Consider sending a heads-up to the ninja-build mailing list first
-2. update src/version.cc with new version (with ".git"), commit to master
+2. update src/version.cc with new version (with ".git"), then
+       git commit -a -m 'mark this 1.5.0.git'
 3. git checkout release; git merge master
 4. fix version number in src/version.cc (it will likely conflict in the above)
 5. fix version in doc/manual.asciidoc
 6. commit, tag, push (don't forget to push --tags)
+       git commit -a -m v1.5.0; git push origin release
+       git tag v1.5.0; git push --tags
+       # Push the 1.5.0.git change on master too:
+       git checkout master; git push origin master
 7. construct release notes from prior notes
    credits: git shortlog -s --no-merges REV..
 
diff --git a/doc/manual.asciidoc b/doc/manual.asciidoc
index bacb5f6..28fd9d3 100644
--- a/doc/manual.asciidoc
+++ b/doc/manual.asciidoc
@@ -1,7 +1,7 @@
 Ninja
 =====
 Evan Martin <martine@danga.com>
-v1.5.0, June 2014
+v1.5.1, June 2014
 
 
 Introduction
diff --git a/src/disk_interface.cc b/src/disk_interface.cc
index ae2146e..b170f63 100644
--- a/src/disk_interface.cc
+++ b/src/disk_interface.cc
@@ -117,8 +117,6 @@
     return false;
   }
   do {
-    if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-      continue;
     string lowername = ffd.cFileName;
     transform(lowername.begin(), lowername.end(), lowername.begin(), ::tolower);
     stamps->insert(make_pair(lowername,
diff --git a/src/disk_interface_test.cc b/src/disk_interface_test.cc
index f4e0bb0..b2e8cb5 100644
--- a/src/disk_interface_test.cc
+++ b/src/disk_interface_test.cc
@@ -76,6 +76,18 @@
   EXPECT_GT(disk_.Stat("file"), 1);
 }
 
+TEST_F(DiskInterfaceTest, StatExistingDir) {
+  ASSERT_TRUE(disk_.MakeDir("subdir"));
+  ASSERT_TRUE(disk_.MakeDir("subdir/subsubdir"));
+  EXPECT_GT(disk_.Stat("."), 1);
+  EXPECT_GT(disk_.Stat("subdir"), 1);
+  EXPECT_GT(disk_.Stat("subdir/subsubdir"), 1);
+
+  EXPECT_EQ(disk_.Stat("subdir"), disk_.Stat("subdir/."));
+  EXPECT_EQ(disk_.Stat("subdir"), disk_.Stat("subdir/subsubdir/.."));
+  EXPECT_EQ(disk_.Stat("subdir/subsubdir"), disk_.Stat("subdir/subsubdir/."));
+}
+
 #ifdef _WIN32
 TEST_F(DiskInterfaceTest, StatCache) {
   disk_.AllowStatCache(true);
@@ -83,6 +95,7 @@
   ASSERT_TRUE(Touch("file1"));
   ASSERT_TRUE(Touch("fiLE2"));
   ASSERT_TRUE(disk_.MakeDir("subdir"));
+  ASSERT_TRUE(disk_.MakeDir("subdir/subsubdir"));
   ASSERT_TRUE(Touch("subdir\\subfile1"));
   ASSERT_TRUE(Touch("subdir\\SUBFILE2"));
   ASSERT_TRUE(Touch("subdir\\SUBFILE3"));
@@ -93,6 +106,14 @@
   EXPECT_GT(disk_.Stat("subdir/subfile2"), 1);
   EXPECT_GT(disk_.Stat("sUbdir\\suBFile1"), 1);
 
+  EXPECT_GT(disk_.Stat("."), 1);
+  EXPECT_GT(disk_.Stat("subdir"), 1);
+  EXPECT_GT(disk_.Stat("subdir/subsubdir"), 1);
+
+  EXPECT_EQ(disk_.Stat("subdir"), disk_.Stat("subdir/."));
+  EXPECT_EQ(disk_.Stat("subdir"), disk_.Stat("subdir/subsubdir/.."));
+  EXPECT_EQ(disk_.Stat("subdir/subsubdir"), disk_.Stat("subdir/subsubdir/."));
+
   // Test error cases.
   disk_.quiet_ = true;
   string bad_path("cc:\\foo");
diff --git a/src/version.cc b/src/version.cc
index 6d2d37c..3fb729f 100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -18,7 +18,7 @@
 
 #include "util.h"
 
-const char* kNinjaVersion = "1.5.0";
+const char* kNinjaVersion = "1.5.1";
 
 void ParseVersion(const string& version, int* major, int* minor) {
   size_t end = version.find('.');