diff --git a/ignore.go b/ignore.go
index 5063aeb..edea144 100644
--- a/ignore.go
+++ b/ignore.go
@@ -98,12 +98,16 @@
     }
 
     // Handle [Rule 2, 4], when # or ! is escaped with a \
-    // Handle [Rule 8], strip leading /
     // Handle [Rule 4] once we tag negatePattern, strip the leading ! char
-    if regexp.MustCompile(`^(\#|\!|/)`).MatchString(line) {
+    if regexp.MustCompile(`^(\#|\!)`).MatchString(line) {
         line = line[1:]
     }
 
+    // Handle [Rule 8], strip leading / and enforce path checking if its present
+    if regexp.MustCompile(`^/`).MatchString(line) {
+        line = "^" + line[1:]
+    }
+
     // If we encounter a foo/*.blah in a folder, prepend the ^ char
     if regexp.MustCompile(`([^\/+])/.*\*\.`).MatchString(line) {
         line = "^" + line
@@ -158,7 +162,7 @@
 func (g GitIgnore) IncludesPath(f string) bool {
     includesPath := true
     for idx, pattern := range g.patterns {
-        if pattern.MatchString(f) {
+       if pattern.MatchString(f) {
             if !g.negate[idx] {
                 includesPath = false
             } else if !includesPath {
@@ -169,6 +173,28 @@
     return includesPath
 }
 
+/* DEBUG VERSION OF ABOVE FUNCTION *\
+func (g GitIgnore) IncludesPath(f string) bool {
+    includesPath := true
+    fmt.Println("Matching path for: " + f)
+    for idx, pattern := range g.patterns {
+        fmt.Printf(" with pattern: " + pattern.String())
+        if pattern.MatchString(f) {
+            if !g.negate[idx] {
+                fmt.Println( " MATCHED +")
+                includesPath = false
+            } else if !includesPath {
+                fmt.Println( " MATCHED -")
+                includesPath = true
+            }
+        } else {
+            fmt.Println( " NOT MATCHED")
+        }
+    }
+    return includesPath
+}
+\* END OF DEBUG VERSION */
+
 // IgnoresPath is an interface function for the IgnoreParser interface.
 // It returns true if the given GitIgnore structure would reject the path
 // being queried against
diff --git a/ignore_test.go b/ignore_test.go
index 08692f1..250c447 100644
--- a/ignore_test.go
+++ b/ignore_test.go
@@ -207,3 +207,18 @@
     assert.Equal(test, true,  object.IgnoresPath("bar"),     "bar should be ignored")
     assert.Equal(test, true,  object.IgnoresPath("baz/bar"), "baz/bar should be ignored")
 }
+
+// Validate the correct handling of leading slash
+func TestCompileIgnoreLines_HandleLeadingSlashPath(test *testing.T) {
+    writeFileToTestDir("test.gitignore", `
+/*.c
+`)
+    defer cleanupTestDir()
+
+    object, error := CompileIgnoreFile("./test_fixtures/test.gitignore")
+    assert.Nil(test, error, "error should be nil")
+    assert.NotNil(test, object, "object should not be nil")
+
+    assert.Equal(test, true,  object.IgnoresPath("hello.c"),     "hello.c should be ignored")
+    assert.Equal(test, false, object.IgnoresPath("foo/hello.c"), "foo/hello.c should not be ignored")
+}
