diff --git a/roles/ipareplica/library/ipaserver_enable_ipa.py b/roles/ipareplica/library/ipaserver_enable_ipa.py
deleted file mode 100644
index 77e4aade6b1189809c8c5f10f02f9523b4d3122d..0000000000000000000000000000000000000000
--- a/roles/ipareplica/library/ipaserver_enable_ipa.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Authors:
-#   Thomas Woerner <twoerner@redhat.com>
-#
-# Based on ipa-server-install code
-#
-# Copyright (C) 2017  Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-from __future__ import print_function
-
-ANSIBLE_METADATA = {
-    'metadata_version': '1.0',
-    'supported_by': 'community',
-    'status': ['preview'],
-}
-
-DOCUMENTATION = '''
----
-module: enable_ipa
-short description:
-description:
-options:
-author:
-    - Thomas Woerner
-'''
-
-EXAMPLES = '''
-'''
-
-RETURN = '''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.ansible_ipa_server import *
-
-def main():
-    ansible_module = AnsibleModule(
-        argument_spec = dict(
-            hostname=dict(required=False),
-            setup_ca=dict(required=True, type='bool'),
-        ),
-    )
-
-    ansible_module._ansible_debug = True
-    ansible_log = AnsibleModuleLog(ansible_module)
-
-    # set values #############################################################
-
-    options.host_name = ansible_module.params.get('hostname')
-    options.setup_ca = ansible_module.params.get('setup_ca')
-
-    # Configuration for ipalib, we will bootstrap and finalize later, after
-    # we are sure we have the configuration file ready.
-    cfg = dict(
-        context='installer',
-        confdir=paths.ETC_IPA,
-        in_server=True,
-        # make sure host name specified by user is used instead of default
-        host=options.host_name,
-    )
-    if options.setup_ca:
-        # we have an IPA-integrated CA
-        cfg['ca_host'] = options.host_name
-
-    api.bootstrap(**cfg)
-    api.finalize()
-    api.Backend.ldap2.connect()
-
-    # setup ds ######################################################
-
-    fstore = sysrestore.FileStore(paths.SYSRESTORE)
-    sstore = sysrestore.StateFile(paths.SYSRESTORE)
-
-    if NUM_VERSION < 40600:
-        # Make sure the files we crated in /var/run are recreated at startup
-        tasks.configure_tmpfiles()
-
-    with redirect_stdout(ansible_log):
-        services.knownservices.ipa.enable()
-
-    ansible_module.exit_json(changed=True)
-
-if __name__ == '__main__':
-    main()
diff --git a/roles/ipareplica/library/ipaserver_enable_ipa.py b/roles/ipareplica/library/ipaserver_enable_ipa.py
new file mode 120000
index 0000000000000000000000000000000000000000..d708756f9cdaba8218a82c40b90577a35d6395e5
--- /dev/null
+++ b/roles/ipareplica/library/ipaserver_enable_ipa.py
@@ -0,0 +1 @@
+../../ipaserver/library/ipaserver_enable_ipa.py
\ No newline at end of file
diff --git a/roles/ipareplica/library/ipaserver_master_password.py b/roles/ipareplica/library/ipaserver_master_password.py
deleted file mode 100644
index d3dc76860d4d4a81af2506c6f29358b43ea5a618..0000000000000000000000000000000000000000
--- a/roles/ipareplica/library/ipaserver_master_password.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Authors:
-#   Thomas Woerner <twoerner@redhat.com>
-#
-# Based on ipa-server-install code
-#
-# Copyright (C) 2017  Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-ANSIBLE_METADATA = {
-    'metadata_version': '1.0',
-    'supported_by': 'community',
-    'status': ['preview'],
-}
-
-DOCUMENTATION = '''
----
-module: master_password
-short description: Generate kerberos master password if not given
-description:
-  Generate kerberos master password if not given
-options:
-  master_password:
-    description: kerberos master password (normally autogenerated)
-    required: false
-author:
-    - Thomas Woerner
-'''
-
-EXAMPLES = '''
-'''
-
-RETURN = '''
-password:
-  description: The master password
-  returned: always
-'''
-
-import os
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.ansible_ipa_server import *
-
-def main():
-    module = AnsibleModule(
-        argument_spec = dict(
-            #basic
-            dm_password=dict(required=True, no_log=True),
-            master_password=dict(required=False, no_log=True),
-        ),
-        supports_check_mode = True,
-    )
-
-    module._ansible_debug = True
-
-    options.dm_password = module.params.get('dm_password')
-    options.master_password = module.params.get('master_password')
-
-    fstore = sysrestore.FileStore(paths.SYSRESTORE)
-    sstore = sysrestore.StateFile(paths.SYSRESTORE)
-
-    ## This will override any settings passed in on the cmdline
-    #if os.path.isfile(paths.ROOT_IPA_CACHE):
-    #    # dm_password check removed, checked already
-    #    try:
-    #        cache_vars = read_cache(options.dm_password)
-    #        options.__dict__.update(cache_vars)
-    #    except Exception as e:
-    #        module.fail_json(msg="Cannot process the cache file: %s" % str(e))
-
-    if not options.master_password:
-        options.master_password = ipa_generate_password()
-
-    module.exit_json(changed=True,
-                     password=options.master_password)
-
-if __name__ == '__main__':
-    main()
diff --git a/roles/ipareplica/library/ipaserver_master_password.py b/roles/ipareplica/library/ipaserver_master_password.py
new file mode 120000
index 0000000000000000000000000000000000000000..619119728863e82018fd34500849ab7e992ca04a
--- /dev/null
+++ b/roles/ipareplica/library/ipaserver_master_password.py
@@ -0,0 +1 @@
+../../ipaserver/library/ipaserver_master_password.py
\ No newline at end of file
diff --git a/roles/ipareplica/library/ipaserver_setup_ntp.py b/roles/ipareplica/library/ipaserver_setup_ntp.py
deleted file mode 100644
index 0fd0f776b133eaf5fe812d98decfb82c67754580..0000000000000000000000000000000000000000
--- a/roles/ipareplica/library/ipaserver_setup_ntp.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Authors:
-#   Thomas Woerner <twoerner@redhat.com>
-#
-# Based on ipa-server-install code
-#
-# Copyright (C) 2017  Red Hat
-# see file 'COPYING' for use and warranty information
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-from __future__ import print_function
-
-ANSIBLE_METADATA = {
-    'metadata_version': '1.0',
-    'supported_by': 'community',
-    'status': ['preview'],
-}
-
-DOCUMENTATION = '''
----
-module: setup_ntp
-short description:
-description:
-options:
-author:
-    - Thomas Woerner
-'''
-
-EXAMPLES = '''
-'''
-
-RETURN = '''
-'''
-
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.ansible_ipa_server import *
-
-def main():
-    ansible_module = AnsibleModule(
-        argument_spec = dict(),
-    )
-
-    ansible_module._ansible_debug = True
-    ansible_log = AnsibleModuleLog(ansible_module)
-
-    # init ##########################################################
-
-    fstore = sysrestore.FileStore(paths.SYSRESTORE)
-    sstore = sysrestore.StateFile(paths.SYSRESTORE)
-
-    # setup NTP #####################################################
-
-    ntpconf.force_ntpd(sstore)
-    ntp = ntpinstance.NTPInstance(fstore)
-    ntp.set_output(ansible_log)
-    with redirect_stdout(ansible_log):
-        if not ntp.is_configured():
-            ntp.create_instance()
-
-    # done ##########################################################
-
-    ansible_module.exit_json(changed=True)
-
-if __name__ == '__main__':
-    main()
diff --git a/roles/ipareplica/library/ipaserver_setup_ntp.py b/roles/ipareplica/library/ipaserver_setup_ntp.py
new file mode 120000
index 0000000000000000000000000000000000000000..2281797168af2be231ac6400e99a1737c6f93200
--- /dev/null
+++ b/roles/ipareplica/library/ipaserver_setup_ntp.py
@@ -0,0 +1 @@
+../../ipaserver/library/ipaserver_setup_ntp.py
\ No newline at end of file