diff --git a/CHANGELOG b/CHANGELOG
index 29cefb3..8d6d1b3 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+1.2 - ???
+=====================
+
+* Add owner_path(-Path) to use instead of gerrit:commit_delta
+* Change owner(-Path, _) to bind to the OWNERS file(s) path instead of patch list paths
+
 1.1 - April 29, 2013
 =====================
 
diff --git a/gerrit-owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java b/gerrit-owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
index 1eda4d4..37f6207 100644
--- a/gerrit-owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
+++ b/gerrit-owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
@@ -109,7 +109,10 @@
         }
       }
 
-      result.putAll(path, currentEntry.getOwners());
+      // Only add the path to the OWNERS file to reduce the number of entries in the result
+      if (currentEntry.getOwnersPath() != null) {
+        result.putAll(currentEntry.getOwnersPath(), currentEntry.getOwners());
+      }
     }
 
     return result;
diff --git a/gerrit-owners/src/main/java/gerrit_owners/PRED_owner_path_1.java b/gerrit-owners/src/main/java/gerrit_owners/PRED_owner_path_1.java
new file mode 100644
index 0000000..e378fcd
--- /dev/null
+++ b/gerrit-owners/src/main/java/gerrit_owners/PRED_owner_path_1.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2013 VMware, Inc. All Rights Reserved.
+ */
+package gerrit_owners;
+
+import com.vmware.gerrit.owners.OwnersStoredValues;
+import com.vmware.gerrit.owners.common.PathOwners;
+
+import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
+import com.googlecode.prolog_cafe.lang.Operation;
+import com.googlecode.prolog_cafe.lang.Predicate;
+import com.googlecode.prolog_cafe.lang.Prolog;
+import com.googlecode.prolog_cafe.lang.PrologException;
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
+import com.googlecode.prolog_cafe.lang.Term;
+
+import java.util.Iterator;
+
+/**
+ * 'owner_path'(-Path)
+ */
+public class PRED_owner_path_1 extends Predicate.P1 {
+
+  private static final PRED_owner_path_check OWNER_PATH_CHECK = new PRED_owner_path_check();
+  private static final PRED_owner_path_empty OWNER_PATH_EMPTY = new PRED_owner_path_empty();
+  private static final PRED_owner_path_next OWNER_PATH_NEXT = new PRED_owner_path_next();
+
+  public PRED_owner_path_1(Term a1, Operation n) {
+    this.arg1 = a1;
+    this.cont = n;
+  }
+
+  @Override
+  public Operation exec(Prolog engine) throws PrologException {
+    engine.cont = cont;
+    engine.setB0();
+
+    PathOwners owners = OwnersStoredValues.PATH_OWNERS.get(engine);
+    engine.areg1 = arg1;
+    engine.areg2 = new JavaObjectTerm(owners.get().keys().iterator());
+    return engine.jtry2(OWNER_PATH_CHECK, OWNER_PATH_NEXT);
+  }
+
+  private static class PRED_owner_path_check extends Operation {
+
+    @Override
+    public Operation exec(Prolog engine) throws PrologException {
+      Term a1 = engine.areg1;
+      Term a2 = engine.areg2;
+
+      @SuppressWarnings("unchecked")
+      Iterator<String> iter = (Iterator<String>) ((JavaObjectTerm) a2).object();
+      while (iter.hasNext()) {
+        String path = iter.next();
+
+        SymbolTerm pathTerm = SymbolTerm.create(path);
+        if (!a1.unify(pathTerm, engine.trail)) {
+          continue;
+        }
+
+        return engine.cont;
+      }
+      return engine.fail();
+    }
+  }
+
+  private static class PRED_owner_path_next extends Operation {
+
+    @Override
+    public Operation exec(Prolog engine) throws PrologException {
+      return engine.trust(OWNER_PATH_EMPTY);
+    }
+  }
+
+  private static class PRED_owner_path_empty extends Operation {
+
+    @Override
+    public Operation exec(Prolog engine) throws PrologException {
+      Term a2 = engine.areg2;
+
+      @SuppressWarnings("unchecked")
+      Iterator<String> iter = (Iterator<String>) ((JavaObjectTerm) a2).object();
+      if (!iter.hasNext()) {
+        return engine.fail();
+      }
+
+      return engine.jtry2(OWNER_PATH_CHECK, OWNER_PATH_NEXT);
+    }
+  }
+
+}
diff --git a/gerrit-owners/src/main/prolog/gerrit_owners.pl b/gerrit-owners/src/main/prolog/gerrit_owners.pl
index f4ab772..5d54dc4 100644
--- a/gerrit-owners/src/main/prolog/gerrit_owners.pl
+++ b/gerrit-owners/src/main/prolog/gerrit_owners.pl
@@ -5,26 +5,16 @@
 :- public add_owner_approval/3.
 
 add_owner_approval(In, Out) :-
-  gerrit:commit_delta('.*', Type, Path, OldPath),
-  ( Type == 'rename',
-    owner(OldPath, _),
-    \+ owner_approved(OldPath);
-    owner(Path, _),
-    \+ owner_approved(Path)
-  ),
+  owner_path(Path),
+  \+ owner_approved(Path),
   Out = [label('Owner-Approval', need(_)) | In],
   !.
 
 add_owner_approval(In, Out) :- In = Out.
 
 add_owner_approval(Users, In, Out) :-
-  gerrit:commit_delta('.*' ,Type, Path, OldPath),
-  ( Type == 'rename',
-    owner(OldPath, _),
-    \+ owner_approved(Users, OldPath);
-    owner(Path, _),
-    \+ owner_approved(Users, Path)
-  ),
+  owner_path(Path),
+  \+ owner_approved(Users, Path),
   Out = [label('Owner-Approval', need(_)) | In],
   !.
 
