diff --git a/PKGBUILD b/PKGBUILD
index cd9cde6..ec42f38 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -35,4 +35,5 @@ package() {
     # copy systemd units
     install -d ${pkgdir}/usr/lib/systemd/user
     install -Dm644 ${srcdir}/systemd/services/*                        ${pkgdir}/usr/lib/systemd/user
+    install -Dm644 ${srcdir}/systemd/timers/*                          ${pkgdir}/usr/lib/systemd/user
 }
diff --git a/bin/periodic/fix-flatpaks-theming b/bin/periodic/fix-flatpaks-theming
index c4ab141..d0e973c 100755
--- a/bin/periodic/fix-flatpaks-theming
+++ b/bin/periodic/fix-flatpaks-theming
@@ -1,7 +1,4 @@
 #!/bin/sh
-while :; do
-    rm -r ~/.themes/* 2> /dev/null
-    rsync -av --progress /usr/share/themes/* ~/.themes/ --exclude Windowck
-    rsync -av --progress ~/.local/share/themes/* ~/.themes/ --exclude Windowck-dark
-    sleep 600
-done
\ No newline at end of file
+rm -r ~/.themes/* 2> /dev/null
+rsync -av --progress /usr/share/themes/* ~/.themes/ --exclude Windowck
+rsync -av --progress ~/.local/share/themes/* ~/.themes/ --exclude Windowck-dark
diff --git a/bin/periodic/fix-theming b/bin/periodic/fix-theming
index 7ea4d30..1ced0dc 100755
--- a/bin/periodic/fix-theming
+++ b/bin/periodic/fix-theming
@@ -11,7 +11,6 @@ sync_theme() {
 	# Apply the current theme with gsettings
 	gsettings set org.gnome.desktop.interface gtk-theme "$theme"
 }
-
 sync_icon_theme() {
 	# Get the current icon theme
 	icon_theme=$(xfconf-query -c xsettings -p /Net/IconThemeName)
@@ -20,25 +19,21 @@ sync_icon_theme() {
 	sed -i "s/^icon_theme=.*$/icon_theme=$icon_theme/" "$HOME"/.config/qt6ct/qt6ct.conf
 }
 
-while :; do
-	# Get the current system theme
-	theme_new=$(xfconf-query -c xsettings -p /Net/ThemeName)
-	# Get the current icon theme
-	icon_theme_new=$(xfconf-query -c xsettings -p /Net/IconThemeName)
-	# Get the current font name
-	font_new=$(xfconf-query -c xsettings -p /Gtk/FontName)
+# Get the current system theme
+theme_new=$(xfconf-query -c xsettings -p /Net/ThemeName)
+# Get the current icon theme
+icon_theme_new=$(xfconf-query -c xsettings -p /Net/IconThemeName)
+# Get the current font name
+font_new=$(xfconf-query -c xsettings -p /Gtk/FontName)
 
-	# Run sync_theme if the new system theme doesn't match the previous one
-	[ "$theme_new" != "$theme_prev" ] && sync_theme
-	# Run sync_icon_theme if the new icon theme doesn't match the previous one
-	[ "$icon_theme_new" != "$icon_theme_prev" ] && sync_icon_theme
-	# If the new font doesn't match the previous one, apply the new font for the title of xfce windows
-	[ "$font_new" != "$font_prev" ] && xfconf-query -c xfwm4 -p /general/title_font -n -t string -s "$font_new"
+# Run sync_theme if the new system theme doesn't match the previous one
+[ "$theme_new" != "$theme_prev" ] && sync_theme
+# Run sync_icon_theme if the new icon theme doesn't match the previous one
+[ "$icon_theme_new" != "$icon_theme_prev" ] && sync_icon_theme
+# If the new font doesn't match the previous one, apply the new font for the title of xfce windows
+[ "$font_new" != "$font_prev" ] && xfconf-query -c xfwm4 -p /general/title_font -n -t string -s "$font_new"
 
-	# The new values become the previous values
-	theme_prev=$theme_new
-	icon_theme_prev=$icon_theme_new
-	font_prev=$font_new
-
-	sleep 3
-done
+# The new values become the previous values
+theme_prev=$theme_new
+icon_theme_prev=$icon_theme_new
+font_prev=$font_new
diff --git a/bin/periodic/fix-tweaked-desktop-files b/bin/periodic/fix-tweaked-desktop-files
index f9bc687..9ebc42f 100755
--- a/bin/periodic/fix-tweaked-desktop-files
+++ b/bin/periodic/fix-tweaked-desktop-files
@@ -66,24 +66,21 @@ fixfiles() {
 	done
 }
 
-while :; do
-	user_new=$(ls -ad "$user"/*.desktop 2>/dev/null)
-	flatpak_local_new=$(ls -ad "$flatpak_local"/*.desktop 2>/dev/null)
-	flatpak_global_new=$(ls -ad "$flatpak_global"/*.desktop 2>/dev/null)
-	pacman_local_new=$(ls -ad "$pacman_local"/*.desktop 2>/dev/null)
-	pacman_global_new=$(ls -ad "$pacman_global"/*.desktop 2>/dev/null)
-	snap_new=$(ls -ad "$snap"/*.desktop 2>/dev/null)
-	[ "$user_new" != "$user_old" ] && detectfiles
-	[ "$flatpak_local_new" != "$flatpak_local_old" ] ||
-		[ "$flatpak_global_new" != "$flatpak_global_old" ] ||
-		[ "$pacman_local_new" != "$pacman_local_old" ] ||
-		[ "$pacman_global_new" != "$pacman_global_old" ] ||
-		[ "$snap_new" != "$snap_old" ] && fixfiles
-	user_old=$user_new
-	flatpak_local_old=$flatpak_local_new
-	flatpak_global_old=$flatpak_global_new
-	pacman_local_old=$pacman_local_new
-	pacman_global_old=$pacman_global_new
-	snap_old=$snap_new
-	sleep 5
-done
\ No newline at end of file
+user_new=$(ls -ad "$user"/*.desktop 2>/dev/null)
+flatpak_local_new=$(ls -ad "$flatpak_local"/*.desktop 2>/dev/null)
+flatpak_global_new=$(ls -ad "$flatpak_global"/*.desktop 2>/dev/null)
+pacman_local_new=$(ls -ad "$pacman_local"/*.desktop 2>/dev/null)
+pacman_global_new=$(ls -ad "$pacman_global"/*.desktop 2>/dev/null)
+snap_new=$(ls -ad "$snap"/*.desktop 2>/dev/null)
+[ "$user_new" != "$user_old" ] && detectfiles
+[ "$flatpak_local_new" != "$flatpak_local_old" ] ||
+	[ "$flatpak_global_new" != "$flatpak_global_old" ] ||
+	[ "$pacman_local_new" != "$pacman_local_old" ] ||
+	[ "$pacman_global_new" != "$pacman_global_old" ] ||
+	[ "$snap_new" != "$snap_old" ] && fixfiles
+user_old=$user_new
+flatpak_local_old=$flatpak_local_new
+flatpak_global_old=$flatpak_global_new
+pacman_local_old=$pacman_local_new
+pacman_global_old=$pacman_global_new
+snap_old=$snap_new
diff --git a/fixes-package.install b/fixes-package.install
index b4200c4..fea489b 100644
--- a/fixes-package.install
+++ b/fixes-package.install
@@ -1,14 +1,14 @@
 post_install() {
-    find /usr/lib/systemd/user/ -name "fix-*.service" -type f -printf "%f\0" | xargs -0 systemctl --global enable
+    find /usr/lib/systemd/user/ -name "fix-*.timer" -type f -printf "%f\0" | xargs -0 systemctl --global enable
     echo "Warning: A restart is required to take effect"
 }
 
 post_upgrade() {
-    find /usr/lib/systemd/user/ -name "fix-*.service" -type f -printf "%f\0" | xargs -0 systemctl --global enable
+    find /usr/lib/systemd/user/ -name "fix-*.timer" -type f -printf "%f\0" | xargs -0 systemctl --global enable
     echo "Warning: A restart is required to take effect"
 }
 
 pre_remove() {
-    find /usr/lib/systemd/user/ -name "fix-*.service" -type f -printf "%f\0" | xargs -0 systemctl --global disable
+    find /usr/lib/systemd/user/ -name "fix-*.timer" -type f -printf "%f\0" | xargs -0 systemctl --global disable
     echo "Warning: A restart is required to take effect"
 }
diff --git a/systemd/services/fix-flatpaks-theming.service b/systemd/services/fix-flatpaks-theming.service
index 703891c..212b2f7 100644
--- a/systemd/services/fix-flatpaks-theming.service
+++ b/systemd/services/fix-flatpaks-theming.service
@@ -3,12 +3,10 @@
 
 [Unit]
 Description=Fix flatpak theming script
-StartLimitIntervalSec=0
+Wants=fix-flatpaks-theming.timer
 
 [Service]
-Type=simple
-Restart=always
-RestartSec=1
+Type=oneshot
 ExecStart=/usr/bin/fix-flatpaks-theming
 
 [Install]
diff --git a/systemd/services/fix-theming.service b/systemd/services/fix-theming.service
index 9560510..df9f631 100644
--- a/systemd/services/fix-theming.service
+++ b/systemd/services/fix-theming.service
@@ -3,12 +3,10 @@
 
 [Unit]
 Description=Fix theming script
-StartLimitIntervalSec=0
+Wants=fix-theming.timer
 
 [Service]
-Type=simple
-Restart=always
-RestartSec=1
+Type=oneshot
 ExecStart=/usr/bin/fix-theming
 
 [Install]
diff --git a/systemd/services/fix-tweaked-desktop-files.service b/systemd/services/fix-tweaked-desktop-files.service
index 150d057..140e60d 100644
--- a/systemd/services/fix-tweaked-desktop-files.service
+++ b/systemd/services/fix-tweaked-desktop-files.service
@@ -3,12 +3,10 @@
 
 [Unit]
 Description=Fix tweaked desktop files script
-StartLimitIntervalSec=0
+Wants=fix-tweaked-desktop-files.timer
 
 [Service]
-Type=simple
-Restart=always
-RestartSec=1
+Type=oneshot
 ExecStart=/usr/bin/fix-tweaked-desktop-files
 
 [Install]
diff --git a/systemd/timers/fix-flatpaks-theming.timer b/systemd/timers/fix-flatpaks-theming.timer
new file mode 100644
index 0000000..614059c
--- /dev/null
+++ b/systemd/timers/fix-flatpaks-theming.timer
@@ -0,0 +1,14 @@
+# This timer unit is for fix-flatpaks-theming service unit
+#
+
+[Unit]
+Description=Run fix flatpaks theming script every 600 seconds
+Requires=fix-flatpaks-theming.service
+
+[Timer]
+Unit=fix-flatpaks-theming.service
+OnBootSec=1
+OnUnitActiveSec=600
+
+[Install]
+WantedBy=timers.target
\ No newline at end of file
diff --git a/systemd/timers/fix-theming.timer b/systemd/timers/fix-theming.timer
new file mode 100644
index 0000000..7dd921f
--- /dev/null
+++ b/systemd/timers/fix-theming.timer
@@ -0,0 +1,14 @@
+# This timer unit is for fix-theming service unit
+#
+
+[Unit]
+Description=Run fix theming script every 3 seconds
+Requires=fix-theming.service
+
+[Timer]
+Unit=fix-theming.service
+OnBootSec=1
+OnUnitActiveSec=3
+
+[Install]
+WantedBy=timers.target
\ No newline at end of file
diff --git a/systemd/timers/fix-tweaked-desktop-files.timer b/systemd/timers/fix-tweaked-desktop-files.timer
new file mode 100644
index 0000000..5a73180
--- /dev/null
+++ b/systemd/timers/fix-tweaked-desktop-files.timer
@@ -0,0 +1,14 @@
+# This timer unit is for fix-tweaked-desktop-files service unit
+#
+
+[Unit]
+Description=Run fix tweaked desktop files script every 5 seconds
+Requires=fix-tweaked-desktop-files.service
+
+[Timer]
+Unit=fix-tweaked-desktop-files.service
+OnBootSec=1
+OnUnitActiveSec=5
+
+[Install]
+WantedBy=timers.target
\ No newline at end of file