diff --git a/kernel/object/include/object/pager_dispatcher.h b/kernel/object/include/object/pager_dispatcher.h
index 6e9157e..0313266 100644
--- a/kernel/object/include/object/pager_dispatcher.h
+++ b/kernel/object/include/object/pager_dispatcher.h
@@ -25,8 +25,7 @@
 class PagerSource : public PageSource , public PortAllocator,
                     public fbl::DoublyLinkedListable<fbl::RefPtr<PagerSource>> {
 private:
-    PagerSource(uint64_t page_source_id,
-                PagerDispatcher* dispatcher, fbl::RefPtr<PortDispatcher> port, uint64_t key);
+    PagerSource(PagerDispatcher* dispatcher, fbl::RefPtr<PortDispatcher> port, uint64_t key);
     virtual ~PagerSource();
     friend fbl::RefPtr<PagerSource>;
 
diff --git a/kernel/object/include/object/vm_object_dispatcher.h b/kernel/object/include/object/vm_object_dispatcher.h
index e3bb489..79d137a 100644
--- a/kernel/object/include/object/vm_object_dispatcher.h
+++ b/kernel/object/include/object/vm_object_dispatcher.h
@@ -21,6 +21,13 @@
 public:
     static zx_status_t Create(fbl::RefPtr<VmObject> vmo,
                               fbl::RefPtr<Dispatcher>* dispatcher,
+                              zx_rights_t* rights) {
+        return Create(std::move(vmo), ZX_KOID_INVALID, dispatcher, rights);
+    }
+
+    static zx_status_t Create(fbl::RefPtr<VmObject> vmo,
+                              zx_koid_t pager_koid,
+                              fbl::RefPtr<Dispatcher>* dispatcher,
                               zx_rights_t* rights);
     ~VmObjectDispatcher() final;
 
@@ -52,9 +59,10 @@
     zx_info_vmo_t GetVmoInfo();
 
     const fbl::RefPtr<VmObject>& vmo() const { return vmo_; }
+    zx_koid_t pager_koid() const { return pager_koid_; }
 
 private:
-    explicit VmObjectDispatcher(fbl::RefPtr<VmObject> vmo);
+    explicit VmObjectDispatcher(fbl::RefPtr<VmObject> vmo, zx_koid_t pager_koid);
 
     fbl::Canary<fbl::magic("VMOD")> canary_;
 
@@ -63,6 +71,10 @@
     // except during destruction.
     fbl::RefPtr<VmObject> const vmo_;
 
+    // The koid of the related pager object, or ZX_KOID_INVALID if
+    // there is no related pager.
+    const zx_koid_t pager_koid_;
+
     // VMOs do not currently maintain any VMO-specific signal state,
     // but do allow user signals to be set. In addition, the CookieJar
     // shares the same lock.
diff --git a/kernel/object/pager_dispatcher.cpp b/kernel/object/pager_dispatcher.cpp
index bb4b7bd..4535158 100644
--- a/kernel/object/pager_dispatcher.cpp
+++ b/kernel/object/pager_dispatcher.cpp
@@ -32,7 +32,7 @@
 zx_status_t PagerDispatcher::CreateSource(fbl::RefPtr<PortDispatcher> port,
                                           uint64_t key, fbl::RefPtr<PageSource>* src_out) {
     fbl::AllocChecker ac;
-    auto src = fbl::AdoptRef(new (&ac) PagerSource(get_koid(), this, ktl::move(port), key));
+    auto src = fbl::AdoptRef(new (&ac) PagerSource(this, ktl::move(port), key));
     if (!ac.check()) {
         return ZX_ERR_NO_MEMORY;
     }
@@ -63,9 +63,9 @@
     }
 }
 
-PagerSource::PagerSource(uint64_t page_source_id, PagerDispatcher* dispatcher,
+PagerSource::PagerSource(PagerDispatcher* dispatcher,
                          fbl::RefPtr<PortDispatcher> port, uint64_t key)
-    : PageSource(page_source_id), pager_(dispatcher), port_(ktl::move(port)), key_(key) {
+    : PageSource(), pager_(dispatcher), port_(ktl::move(port)), key_(key) {
     LTRACEF("%p key %lx\n", this, key_);
 }
 
diff --git a/kernel/object/vm_object_dispatcher.cpp b/kernel/object/vm_object_dispatcher.cpp
index d346bc0..ffac441 100644
--- a/kernel/object/vm_object_dispatcher.cpp
+++ b/kernel/object/vm_object_dispatcher.cpp
@@ -21,10 +21,11 @@
 #define LOCAL_TRACE 0
 
 zx_status_t VmObjectDispatcher::Create(fbl::RefPtr<VmObject> vmo,
+                                       zx_koid_t pager_koid,
                                        fbl::RefPtr<Dispatcher>* dispatcher,
                                        zx_rights_t* rights) {
     fbl::AllocChecker ac;
-    auto disp = new (&ac) VmObjectDispatcher(ktl::move(vmo));
+    auto disp = new (&ac) VmObjectDispatcher(ktl::move(vmo), pager_koid);
     if (!ac.check())
         return ZX_ERR_NO_MEMORY;
 
@@ -34,8 +35,8 @@
     return ZX_OK;
 }
 
-VmObjectDispatcher::VmObjectDispatcher(fbl::RefPtr<VmObject> vmo)
-    : SoloDispatcher(ZX_VMO_ZERO_CHILDREN), vmo_(vmo) {
+VmObjectDispatcher::VmObjectDispatcher(fbl::RefPtr<VmObject> vmo, zx_koid_t pager_koid)
+    : SoloDispatcher(ZX_VMO_ZERO_CHILDREN), vmo_(vmo), pager_koid_(pager_koid) {
         vmo_->SetChildObserver(this);
     }
 
diff --git a/kernel/syscalls/pager.cpp b/kernel/syscalls/pager.cpp
index 7c4c666..349ac62 100644
--- a/kernel/syscalls/pager.cpp
+++ b/kernel/syscalls/pager.cpp
@@ -62,7 +62,7 @@
 
     fbl::RefPtr<Dispatcher> dispatcher;
     zx_rights_t rights;
-    status = VmObjectDispatcher::Create(vmo, &dispatcher, &rights);
+    status = VmObjectDispatcher::Create(vmo, pager_dispatcher->get_koid(), &dispatcher, &rights);
     if (status != ZX_OK) {
         return status;
     }
@@ -86,7 +86,7 @@
         return status;
     }
 
-    if (vmo_dispatcher->vmo()->get_page_source_id() != pager_dispatcher->get_koid()) {
+    if (vmo_dispatcher->pager_koid() != pager_dispatcher->get_koid()) {
         return ZX_ERR_INVALID_ARGS;
     }
 
@@ -112,7 +112,7 @@
         return status;
     }
 
-    if (pager_vmo_dispatcher->vmo()->get_page_source_id() != pager_dispatcher->get_koid()) {
+    if (pager_vmo_dispatcher->pager_koid() != pager_dispatcher->get_koid()) {
         return ZX_ERR_INVALID_ARGS;
     }
 
diff --git a/kernel/vm/include/vm/page_source.h b/kernel/vm/include/vm/page_source.h
index e21a954..6ebf98f 100644
--- a/kernel/vm/include/vm/page_source.h
+++ b/kernel/vm/include/vm/page_source.h
@@ -50,7 +50,7 @@
 // Object which provides pages to a vm_object.
 class PageSource : public fbl::RefCounted<PageSource> {
 public:
-    PageSource(uint64_t page_source_id);
+    PageSource();
     virtual ~PageSource();
 
     // Sends a request to the backing source to provide the requested page.
@@ -75,9 +75,6 @@
     // calls will fail.
     void Close();
 
-    // Gets an id used for ownership verification.
-    uint64_t get_page_source_id() const { return page_source_id_; }
-
 protected:
     // Synchronously gets a page from the backing source.
     virtual bool GetPage(uint64_t offset,
@@ -103,8 +100,6 @@
 private:
     fbl::Canary<fbl::magic("VMPS")> canary_;
 
-    const uint64_t page_source_id_;
-
     mutable DECLARE_MUTEX(PageSource) page_source_mtx_;
     bool detached_ TA_GUARDED(page_source_mtx_) = false;
     bool closed_ TA_GUARDED(page_source_mtx_) = false;
diff --git a/kernel/vm/include/vm/vm_object.h b/kernel/vm/include/vm/vm_object.h
index 14b265f..c90d41e 100644
--- a/kernel/vm/include/vm/vm_object.h
+++ b/kernel/vm/include/vm/vm_object.h
@@ -242,8 +242,6 @@
         return ZX_OK;
     }
 
-    virtual uint64_t get_page_source_id() const { return 0; }
-
     // Detaches the underlying page source, if present. Can be called multiple times.
     virtual void DetachSource() {}
 
diff --git a/kernel/vm/include/vm/vm_object_paged.h b/kernel/vm/include/vm/vm_object_paged.h
index dcd1cd0..eabeea2 100644
--- a/kernel/vm/include/vm/vm_object_paged.h
+++ b/kernel/vm/include/vm/vm_object_paged.h
@@ -111,12 +111,6 @@
     uint32_t GetMappingCachePolicy() const override;
     zx_status_t SetMappingCachePolicy(const uint32_t cache_policy) override;
 
-    uint64_t get_page_source_id() const override {
-        if (page_source_) {
-            return page_source_->get_page_source_id();
-        }
-        return 0;
-    }
     void DetachSource() override {
         DEBUG_ASSERT(page_source_);
         page_source_->Detach();
diff --git a/kernel/vm/page_source.cpp b/kernel/vm/page_source.cpp
index f82d64e..67d5dca 100644
--- a/kernel/vm/page_source.cpp
+++ b/kernel/vm/page_source.cpp
@@ -12,7 +12,7 @@
 
 #define LOCAL_TRACE 0
 
-PageSource::PageSource(uint64_t page_source_id) : page_source_id_(page_source_id) {
+PageSource::PageSource() {
     LTRACEF("%p\n", this);
 }
 
