diff --git a/guix/profiles.scm b/guix/profiles.scm
index 25ff146bdf41ee65cf08296a9641fea429cf3cb0..6064820b9ac0cbf60a02cf79873048f83cacf4ee 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -41,7 +41,6 @@ (define-module (guix profiles)
   #:use-module (guix modules)
   #:use-module (guix monads)
   #:use-module (guix store)
-  #:use-module (guix sets)
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
@@ -260,17 +259,17 @@ (define (manifest-transitive-entries manifest)
 recursively."
   (let loop ((entries (manifest-entries manifest))
              (result  '())
-             (visited (set)))                     ;compare with 'equal?'
+             (visited vlist-null))            ;compare with 'manifest-entry=?'
     (match entries
       (()
        (reverse result))
       ((head . tail)
-       (if (set-contains? visited head)
+       (if (vhash-assoc head visited manifest-entry=?)
            (loop tail result visited)
            (loop (append (manifest-entry-dependencies head)
                          tail)
                  (cons head result)
-                 (set-insert head visited)))))))
+                 (vhash-cons head #t visited)))))))
 
 (define (profile-manifest profile)
   "Return the PROFILE's manifest."