diff --git a/contrib/rserv/Makefile b/contrib/rserv/Makefile
index 984a839415..f6b202db50 100644
--- a/contrib/rserv/Makefile
+++ b/contrib/rserv/Makefile
@@ -6,47 +6,33 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 NAME	= rserv
-SONAME	= $(NAME)$(DLSUFFIX)
-SQLS	= master.sql slave.sql
-TCLS	= RservTest
-PERLS	= MasterInit MasterAddTable Replicate MasterSync CleanLog
-PERLS	+= SlaveInit SlaveAddTable GetSyncID
-PERLS	+= PrepareSnapshot ApplySnapshot
-SCRIPTS	= InitRservTest
+MODULES	= rserv
+DATA	= RServ.pm
+DATA_built	= master.sql slave.sql
+SQLS	= $(DATA_built)
+DOCS	= README.rserv
+SCRIPTS	= RservTest
+SCRIPTS	+= MasterInit MasterAddTable Replicate MasterSync CleanLog
+SCRIPTS	+= SlaveInit SlaveAddTable GetSyncID
+SCRIPTS	+= PrepareSnapshot ApplySnapshot
+SCRIPTS	+= InitRservTest
+EXTRA_CLEAN	= $(SCRIPTS)
 
 override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
 override CFLAGS += $(CFLAGS_SL)
 SHLIB_LINK = $(BE_DLLLIBS)
 
 
-all: $(SQLS) $(TCLS) $(PERLS) $(SCRIPTS) $(SONAME)
+all: $(SCRIPTS) $(SQLS) $(addsuffix $(DLSUFFIX), $(MODULES))
 
-%.sql: %.sql.in
+$(SQLS): %.sql: %.sql.in
 	sed 's,@MODULE_FILENAME@,$$libdir/$(NAME),g' $< >$@
 
-$(PERLS) $(TCLS) $(SCRIPTS): %: %.in
+$(SCRIPTS): %: %.in
 	sed -e 's,@MODULE_FILENAME@,$$libdir/$(NAME),g' \
 	    -e 's:@SQLDIR@:$(datadir)/contrib:g' \
 	    -e 's:@BINDIR@:$(bindir):g' \
 	    -e 's:@LIBDIR@:$(datadir)/contrib:g' $< >$@
 	chmod a+x $@
 
-
-install: all installdirs
-	for file in $(SQLS); do \
-	  $(INSTALL_DATA) $$file $(DESTDIR)$(datadir)/contrib || exit ; \
-	done
-	for file in $(TCLS) $(PERLS) $(SCRIPTS); do \
-	  $(INSTALL_SCRIPT) $$file $(DESTDIR)$(bindir) || exit ; \
-	done
-	$(INSTALL_DATA) $(srcdir)/RServ.pm $(DESTDIR)$(datadir)/contrib
-	$(INSTALL_SHLIB) $(SONAME) $(DESTDIR)$(pkglibdir)
-	$(INSTALL_DATA) $(srcdir)/README.$(NAME) $(DESTDIR)$(docdir)/contrib
-
-installdirs:
-	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(datadir)/contrib \
-	  $(DESTDIR)$(pkglibdir) $(DESTDIR)$(docdir)/contrib
-
-
-clean distclean maintainer-clean:
-	rm -f $(SQLS) $(TCLS) $(PERLS) $(SCRIPTS) $(SONAME) $(NAME).o
+include $(top_srcdir)/contrib/contrib-global.mk
diff --git a/contrib/rserv/MasterInit.in b/contrib/rserv/MasterInit.in
index 1bfe1c9776..0c9b648c21 100644
--- a/contrib/rserv/MasterInit.in
+++ b/contrib/rserv/MasterInit.in
@@ -22,6 +22,8 @@ if (defined($opt_help) || (scalar(@ARGV) < 1)) {
     exit ((scalar(@ARGV) < 1)? 1:0);
 }
 
+my $module_filename = '@MODULE_FILENAME@';
+
 my $master = $ARGV[0] || "master";
 
 my $minfo = "dbname=$master";
@@ -90,15 +92,15 @@ $result = $conn->exec("create sequence _rserv_sync_seq_");
 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
 
 $result = $conn->exec("CREATE FUNCTION _rserv_log_() RETURNS trigger" .
-					  " AS '@MODULE_FILENAME@' LANGUAGE 'c'");
+					  " AS '$module_filename' LANGUAGE 'c'");
 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
 
 $result = $conn->exec("CREATE FUNCTION _rserv_sync_(int4) RETURNS int4" .
-					  " AS '@MODULE_FILENAME@' LANGUAGE 'c'");
+					  " AS '$module_filename' LANGUAGE 'c'");
 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
 
 $result = $conn->exec("CREATE FUNCTION _rserv_debug_(int4) RETURNS int4" .
-					  " AS '@MODULE_FILENAME@' LANGUAGE 'c'");
+					  " AS '$module_filename' LANGUAGE 'c'");
 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
 
 $result = $conn->exec("COMMIT");