diff --git a/roles/slurm-common/tasks/installMungeFromSource.yml b/roles/slurm-common/tasks/installMungeFromSource.yml
index 438497c1fe1e5b784f0448c21cb5a6c936e4012a..aec3033b3534d3a3ddc43648a946df134b309ea8 100644
--- a/roles/slurm-common/tasks/installMungeFromSource.yml
+++ b/roles/slurm-common/tasks/installMungeFromSource.yml
@@ -26,3 +26,15 @@
 - name: copy init script
   template: dest=/etc/init.d/munge src=munge.initd.j2 mode=755
   sudo: true
+
+- name:  copy slurm init script if OS contains systemd
+  template: dest=/etc/systemd/system/munge.service src=munge.service.j2 mode=755
+  sudo: true
+  when: (ansible_distribution == "CentOS" or ansible_distribution == "RedHat") and
+          ( ansible_distribution_major_version == "7")
+
+- name: reload systemd
+  shell: systemctl daemon-reload
+  sudo: true
+  when: (ansible_distribution == "CentOS" or ansible_distribution == "RedHat") and
+          ( ansible_distribution_major_version == "7")
diff --git a/roles/slurm-common/tasks/installSlurmFromSource.yml b/roles/slurm-common/tasks/installSlurmFromSource.yml
index a172b990bfd8ea1f694d1c6fbd309b443eca09ec..95d5fc9234239d36f5d4330668cda5c0ff512428 100644
--- a/roles/slurm-common/tasks/installSlurmFromSource.yml
+++ b/roles/slurm-common/tasks/installSlurmFromSource.yml
@@ -32,8 +32,3 @@
   args:
     chdir: /tmp/slurm-{{ slurm_version }}
     creates: "{{ slurm_dir }}/bin/srun"
-
-- name: copy init script
-  template: dest=/etc/init.d/slurm src=slurm.initd.j2  mode=755
-  sudo: true   
-
diff --git a/roles/slurm-common/tasks/main.yml b/roles/slurm-common/tasks/main.yml
index a7c5e16e71fc1a7249b0aac54d11a196ba180a8d..a75f57a6063b5086ad4142ee4dda0840039164b7 100644
--- a/roles/slurm-common/tasks/main.yml
+++ b/roles/slurm-common/tasks/main.yml
@@ -99,15 +99,11 @@
 - name: install munge key
   template: src=munge_key.j2 dest={{ munge_dir }}/etc/munge/munge.key owner=munge mode=600
   sudo: true
-  notify: restart munge
 
 - name: enable munge on boot
   service: name=munge enabled=yes
   sudo: true
 
-- name: start munge
-  service: name=munge state=started
-  sudo: true
 
 - include: installSlurmFromSource.yml
 
@@ -130,7 +126,6 @@
 - name: install slurm.conf
   copy: src=files/slurm.conf dest={{ slurm_dir }}/etc/slurm.conf
   sudo: true
-  notify: restart slurm
   when: slurm_use_vpn==False 
 
 - name: install slurm.conf
diff --git a/roles/slurm-common/templates/munge.service.j2 b/roles/slurm-common/templates/munge.service.j2
new file mode 100644
index 0000000000000000000000000000000000000000..2e73014c8c6075e71193b46abde387cac3bee4c2
--- /dev/null
+++ b/roles/slurm-common/templates/munge.service.j2
@@ -0,0 +1,17 @@
+[Unit]
+Description=MUNGE authentication service
+Documentation=man:munged(8)
+After=network.target
+After=syslog.target
+After=time-sync.target
+
+[Service]
+Type=forking
+ExecStart={{ munge_dir }}/sbin/munged
+PIDFile={{ munge_dir }}/var/run/munge/munged.pid
+User=munge
+Group=munge
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/slurm-start/tasks/main.yml b/roles/slurm-start/tasks/main.yml
index 29f3bc2e623188acbb4fdb843076bd7a675c2c97..4e642e84595009794cf6eb2837c371862fae8ca1 100644
--- a/roles/slurm-start/tasks/main.yml
+++ b/roles/slurm-start/tasks/main.yml
@@ -1,13 +1,60 @@
 ---
+- name: set use_systemd
+  set_fact: 
+    use_systemd: True
+  when: (ansible_distribution == "CentOS" or ansible_distribution == "RedHat") and
+          ( ansible_distribution_major_version == "7") 
+
+- name: install slurmdbd init
+  template: src=slurmdbd.initd.j2 dest=/etc/init.d/slurmdbd mode=755
+  sudo: true
+  when: use_systemd is not defined and start_slurmdbd is defined
+
+- name:  copy slurmdbd init script if OS contains systemd
+  template: dest=/etc/systemd/system/slurmdbd.service src=slurmdbd.service.j2 mode=755
+  sudo: true
+  when: use_systemd is defined and start_slurmdbd is defined
+
+- name: copy slurm init script
+  template: dest=/etc/init.d/slurm src=slurm.initd.j2  mode=755
+  sudo: true
+  when: use_systemd is not defined
+
+- name:  copy slurmd.service
+  template: dest=/etc/systemd/system/slurmd.service src=slurmd.service.j2 mode=755
+  sudo: true
+  when: use_systemd is defined and start_slurmd is defined
+
+- name: slurmctld.service
+  template: dest=/etc/systemd/system/slurmctld.service src=slurmctld.service.j2 mode=755
+  sudo: true
+  when: use_systemd is defined and start_slurmctld is defined
+
+- name: reload systemd
+  shell: systemctl daemon-reload
+  sudo: true
+  when: use_systemd is defined
+
 - name: start munge
   service: name=munge state=started
   sudo: true
 
 - name: start slurmdbd
-  service: name=slurmdbd state=started
+  service: name=slurmdbd state=started enabled=yes
+  sudo: true
+  when: start_slurmdbd is defined
+
+- name: start slurmctl
+  service: name=slurmctld state=started enabled=yes
+  sudo: true
+  when: use_systemd is defined and start_slurmctld is defined
+
+- name: start slurmd
+  service: name=slurmd state=started enabled=yes
   sudo: true
-  ignore_errors: true
+  when: use_systemd is defined and start_slurmd is defined
 
 - name: start slurm
-  service: name=slurm state=started
+  service: name=slurm state=started enabled=yes
   sudo: true
+  when: use_systemd is not defined and ( start_slurmd is defined or start_slurmctld is defined )
diff --git a/roles/slurm-common/templates/slurm.initd.j2 b/roles/slurm-start/templates/slurm.initd.j2
similarity index 100%
rename from roles/slurm-common/templates/slurm.initd.j2
rename to roles/slurm-start/templates/slurm.initd.j2
diff --git a/roles/slurm-start/templates/slurmctld.service.j2 b/roles/slurm-start/templates/slurmctld.service.j2
new file mode 100644
index 0000000000000000000000000000000000000000..226bc4d15efac114fe80dd621e1592a87e7fd7d1
--- /dev/null
+++ b/roles/slurm-start/templates/slurmctld.service.j2
@@ -0,0 +1,12 @@
+[Unit]
+Description=Slurm controller daemon
+After=network.target
+ConditionPathExists={{ slurm_dir }}/etc/slurm.conf
+
+[Service]
+Type=forking
+#EnvironmentFile=/etc/default/slurmctld
+ExecStart={{ slurm_dir }}/sbin/slurmctld $SLURMCTLD_OPTIONS
+PIDFile={{ slurmpiddir }}/slurmctld.pid
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/slurm-start/templates/slurmd.service.j2 b/roles/slurm-start/templates/slurmd.service.j2
new file mode 100644
index 0000000000000000000000000000000000000000..d2917367279aa0df6c6745c098a0473ee6553bce
--- /dev/null
+++ b/roles/slurm-start/templates/slurmd.service.j2
@@ -0,0 +1,13 @@
+[Unit]
+Description=Slurm node daemon
+After=network.target
+ConditionPathExists={{ slurm_dir }}/etc/slurm.conf
+
+[Service]
+Type=forking
+#EnvironmentFile=/etc/default/slurmd
+ExecStart={{ slurm_dir }}/sbin/slurmd $SLURMD_OPTIONS
+PIDFile={{ slurmpiddir }}/slurmd.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/slurmdb-config/templates/slurmdbd.initd.j2 b/roles/slurm-start/templates/slurmdbd.initd.j2
similarity index 100%
rename from roles/slurmdb-config/templates/slurmdbd.initd.j2
rename to roles/slurm-start/templates/slurmdbd.initd.j2
diff --git a/roles/slurm-start/templates/slurmdbd.service.j2 b/roles/slurm-start/templates/slurmdbd.service.j2
new file mode 100644
index 0000000000000000000000000000000000000000..d27b275040b183d75c9deb0a8e94766c7a1e09c5
--- /dev/null
+++ b/roles/slurm-start/templates/slurmdbd.service.j2
@@ -0,0 +1,13 @@
+
+[Unit]
+Description=Slurm DBD accounting daemon
+After=network.target
+ConditionPathExists={{ slurm_dir }}/etc/slurmdbd.conf
+
+[Service]
+Type=forking
+ExecStart={{ slurm_dir }}/sbin/slurmdbd
+PIDFile=/var/run/slurmdbd.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/slurmdb-config/tasks/main.yml b/roles/slurmdb-config/tasks/main.yml
index 71c0b92869fe3e1564a803cfe52493c00f053bb2..aa3323f100099f3037206ab18e3f6afefbb35418 100644
--- a/roles/slurmdb-config/tasks/main.yml
+++ b/roles/slurmdb-config/tasks/main.yml
@@ -17,11 +17,11 @@
     - python-mysqldb
   when: ansible_os_family == "Debian"
 
-- name: install slurmdbd init
-  template: src=slurmdbd.initd.j2 dest=/etc/init.d/slurmdbd mode=755
+- name: make sure config dir exists
+  file: path="{{ slurm_dir }}/etc" state=directory
   sudo: true
 
-- name: install slurmdb.conf init
+- name: install slurmdb.conf
   template: src=slurmdbd.conf.j2 dest={{ slurm_dir }}/etc/slurmdbd.conf
   sudo: true
   when: slurm_dir is defined