diff --git a/inet/Makefile b/inet/Makefile
index 267f060..f1d871f 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -37,8 +37,6 @@ routines := htonl htons		\
 	    getproto getproto_r getprtent getprtent_r getprtname getprtname_r \
 	    getsrvbynm getsrvbynm_r getsrvbypt getsrvbypt_r getservent \
 	    getservent_r	\
-	    getrpcent getrpcbyname getrpcbynumber \
-	    getrpcent_r getrpcbyname_r getrpcbynumber_r \
 	    ether_aton ether_aton_r ether_hton ether_line \
 	    ether_ntoa ether_ntoa_r ether_ntoh \
 	    rcmd rexec ruserpass \
diff --git a/inet/Versions b/inet/Versions
index 0650719..56eb274 100644
--- a/inet/Versions
+++ b/inet/Versions
@@ -7,8 +7,7 @@ libc {
     rexecoptions;
 
     # e*
-    endaliasent; endhostent; endnetent; endnetgrent; endprotoent; endrpcent;
-    endservent;
+    endaliasent; endhostent; endnetent; endnetgrent; endprotoent; endservent;
 
     # e*
     ether_aton; ether_aton_r; ether_hostton; ether_line; ether_ntoa;
@@ -21,9 +20,8 @@ libc {
     gethostent_r; getnetbyaddr; getnetbyaddr_r; getnetbyname;
     getnetbyname_r; getnetent; getnetent_r; getnetgrent; getnetgrent_r;
     getprotobyname; getprotobyname_r; getprotobynumber;
-    getprotobynumber_r; getprotoent; getprotoent_r; getrpcbyname;
-    getrpcbyname_r; getrpcbynumber; getrpcbynumber_r; getrpcent; getrpcent_r;
-    getrpcport; getservbyname; getservbyname_r; getservbyport;
+    getprotobynumber_r; getprotoent; getprotoent_r;
+    getservbyname; getservbyname_r; getservbyport;
     getservbyport_r; getservent; getservent_r;
 
     # h*
@@ -41,7 +39,7 @@ libc {
     rcmd; rexec; rresvport; ruserok; ruserpass;
 
     # s*
-    setaliasent; setnetent; setnetgrent; setprotoent; setrpcent; setservent;
+    setaliasent; setnetent; setnetgrent; setprotoent; setservent;
   }
   GLIBC_2.1 {
     # variables in normal name space
@@ -55,8 +53,7 @@ libc {
     getaliasbyname_r; getaliasent_r; gethostbyaddr_r; gethostbyname2_r;
     gethostbyname_r; gethostent_r; getnetbyaddr_r; getnetbyname_r;
     getnetent_r; getnetgrent_r; getprotobyname_r; getprotobynumber_r;
-    getprotoent_r; getrpcbyname_r; getrpcbynumber_r; getrpcent_r;
-    getservbyname_r;
+    getprotoent_r; getservbyname_r;
   }
   GLIBC_2.2 {
     # i*
diff --git a/nss/Makefile b/nss/Makefile
index d419baf..f94ef92 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -31,8 +31,12 @@ routines		= nsswitch getnssent getnssent_r digits_dots \
 # These are the databases that go through nss dispatch.
 # Caution: if you add a database here, you must add its real name
 # in databases.def, too.
-databases		= proto service hosts network grp pwd rpc ethers \
-			  spwd netgrp key alias sgrp
+databases		= proto service hosts network grp pwd ethers \
+			  spwd netgrp alias sgrp
+
+ifneq (,$(filter sunrpc,$(subdirs)))
+databases		+= key rpc
+endif
 
 others                  := getent makedb
 install-bin             := getent makedb
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index b65f2f5..c29f4a9 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -76,6 +76,8 @@ routines := auth_none authuxprot bindrsvprt clnt_raw clnt_simp \
 	    pmap_rmt rpc_prot rpc_common rpc_cmsg svc_auth svc_authux svc_raw \
 	    svc_simple xdr_float xdr_rec publickey authdes_prot \
 	    des_crypt des_impl des_soft key_prot openchild rtime svcauth_des \
+	    getrpcent getrpcbyname getrpcbynumber \
+	    getrpcent_r getrpcbyname_r getrpcbynumber_r \
 	    clnt_unix svc_unix create_xid $(need-export-routines)
 ifneq ($(link-obsolete-rpc),yes)
 # We only add the RPC for compatibility to libc.so.
diff --git a/sunrpc/Versions b/sunrpc/Versions
index a11dd8d..77bc6a4 100644
--- a/sunrpc/Versions
+++ b/sunrpc/Versions
@@ -21,8 +21,13 @@ libc {
     clnt_perror; clnt_spcreateerror; clnt_sperrno; clnt_sperror;
     clntraw_create; clnttcp_create; clntudp_bufcreate; clntudp_create;
 
+    # e*
+    endrpcent;
+
     # g*
     get_myaddress; getpublickey; getsecretkey;
+    getrpcbyname; getrpcbyname_r; getrpcbynumber; getrpcbynumber_r;
+    getrpcent; getrpcent_r; getrpcport;
 
     # p*
     pmap_getmaps; pmap_getport; pmap_rmtcall; pmap_set; pmap_unset;
@@ -31,6 +36,7 @@ libc {
     registerrpc;
 
     # s*
+    setrpcent;
     svc_exit; svc_getreq; svc_getreqset; svc_register; svc_run;
     svc_sendreply; svc_unregister; svcerr_auth; svcerr_decode;
     svcerr_noproc; svcerr_noprog; svcerr_progvers; svcerr_systemerr;
@@ -106,6 +112,9 @@ libc {
     xdr_hyper; xdr_u_hyper; xdr_longlong_t; xdr_u_longlong_t;
     xdr_int64_t; xdr_uint64_t;
   }
+  GLIBC_2.1.2 {
+    getrpcbyname_r; getrpcbynumber_r; getrpcent_r;
+  }
   GLIBC_2.2 {
     svc_getreq_common; svc_getreq_poll; svc_max_pollfd; svc_pollfd;
   }
diff --git a/inet/getrpcbyname.c b/sunrpc/getrpcbyname.c
similarity index 100%
rename from inet/getrpcbyname.c
rename to sunrpc/getrpcbyname.c
diff --git a/inet/getrpcbyname_r.c b/sunrpc/getrpcbyname_r.c
similarity index 100%
rename from inet/getrpcbyname_r.c
rename to sunrpc/getrpcbyname_r.c
diff --git a/inet/getrpcbynumber.c b/sunrpc/getrpcbynumber.c
similarity index 100%
rename from inet/getrpcbynumber.c
rename to sunrpc/getrpcbynumber.c
diff --git a/inet/getrpcbynumber_r.c b/sunrpc/getrpcbynumber_r.c
similarity index 100%
rename from inet/getrpcbynumber_r.c
rename to sunrpc/getrpcbynumber_r.c
diff --git a/inet/getrpcent.c b/sunrpc/getrpcent.c
similarity index 100%
rename from inet/getrpcent.c
rename to sunrpc/getrpcent.c
diff --git a/inet/getrpcent_r.c b/sunrpc/getrpcent_r.c
similarity index 100%
rename from inet/getrpcent_r.c
rename to sunrpc/getrpcent_r.c
