diff --git a/src/model.js b/src/model.js
index <HASH>..<HASH> 100644
--- a/src/model.js
+++ b/src/model.js
@@ -3,8 +3,9 @@
 module.exports = function (ConvexModel, Firebase, $q, convexConfig) {
 
   ConvexModel.prototype.$ref = function () {
+    var pathOverride = this.$firebase && this.$firebase.path;
     return new Firebase(convexConfig.firebase)
-      .child(this.$firebase.path.call(this));
+      .child(pathOverride ? this.$firebase.path.call(this) : this.$path(this.id));
   };
 
   function toPromise (ref) {
diff --git a/test/model.js b/test/model.js
index <HASH>..<HASH> 100644
--- a/test/model.js
+++ b/test/model.js
@@ -20,7 +20,17 @@ module.exports = function () {
 
   describe('#$ref', function () {
 
-    it('can generate a new Firebase reference', function () {
+    it('can generate a reference using $path', function () {
+      model.$path = function () {
+        return '/user/ben';
+      };
+      expect(model.$ref().currentPath).to.equal('Mock://user/ben');
+    });
+
+    it('can generate a reference using a firebase path override', function () {
+      model.$path = function () {
+        return '$path';
+      };
       model.$firebase = {
         path: function () {
           return '/user/ben';
Use $path as the default and then fall back to $firebase#path