diff --git a/.gitlab-ci-unix.yml b/.gitlab-ci-unix.yml
index 5762cace699e5d863871d03502911260ba805f99..19552513fca81b7e8b1e8a50499e4ce5d4f306d2 100644
--- a/.gitlab-ci-unix.yml
+++ b/.gitlab-ci-unix.yml
@@ -151,6 +151,77 @@ spec:
     - job: "xpdev-$[[ inputs.os ]]"
     - job: "ciolib-$[[ inputs.os ]]"
 
+"utils-$[[ inputs.os ]]":
+  extends:
+    - .$[[ inputs.os ]]-build
+  script:
+    - cd src/sbbs3
+    - gmake ${BUILD_FLAGS} utils
+  artifacts:
+    name: "utils-${OSP}"
+    paths:
+      - "src/sbbs3/*.exe.release/*"
+  needs:
+    - job: "ciolib-$[[ inputs.os ]]"
+    - job: "smblib-$[[ inputs.os ]]"
+    - job: "uifc-$[[ inputs.os ]]"
+    - job: "xpdev-$[[ inputs.os ]]"
+
+"scfg-$[[ inputs.os ]]":
+  extends:
+    - .$[[ inputs.os ]]-build
+  script:
+    - cd src/sbbs3/scfg
+    - gmake ${BUILD_FLAGS}
+  artifacts:
+    name: "scfg-${OSP}"
+    paths:
+      - "src/sbbs3/scfg/*.exe.release/*"
+  needs:
+    - job: "ciolib-$[[ inputs.os ]]"
+    - job: "cryptlib-$[[ inputs.os ]]"
+    - job: "encode-$[[ inputs.os ]]"
+    - job: "hash-$[[ inputs.os ]]"
+    - job: "smblib-$[[ inputs.os ]]"
+    - job: "uifc-$[[ inputs.os ]]"
+    - job: "xpdev-$[[ inputs.os ]]"
+
+"uedit-$[[ inputs.os ]]":
+  extends:
+    - .$[[ inputs.os ]]-build
+  script:
+    - cd src/sbbs3/uedit
+    - gmake ${BUILD_FLAGS}
+  artifacts:
+    name: "uedit-${OSP}"
+    paths:
+      - "src/sbbs3/uedit/*.exe.release/*"
+  needs:
+    - job: "ciolib-$[[ inputs.os ]]"
+    - job: "encode-$[[ inputs.os ]]"
+    - job: "hash-$[[ inputs.os ]]"
+    - job: "smblib-$[[ inputs.os ]]"
+    - job: "uifc-$[[ inputs.os ]]"
+    - job: "xpdev-$[[ inputs.os ]]"
+
+"umonitor-$[[ inputs.os ]]":
+  extends:
+    - .$[[ inputs.os ]]-build
+  script:
+    - cd src/sbbs3/umonitor
+    - gmake ${BUILD_FLAGS}
+  artifacts:
+    name: "umonitor-${OSP}"
+    paths:
+      - "src/sbbs3/umonitor/*.exe.release/*"
+  needs:
+    - job: "ciolib-$[[ inputs.os ]]"
+    - job: "encode-$[[ inputs.os ]]"
+    - job: "hash-$[[ inputs.os ]]"
+    - job: "smblib-$[[ inputs.os ]]"
+    - job: "uifc-$[[ inputs.os ]]"
+    - job: "xpdev-$[[ inputs.os ]]"
+
 "sbbs-$[[ inputs.os ]]":
   extends:
     - .$[[ inputs.os ]]-build
@@ -168,10 +239,14 @@ spec:
     - job: "cryptlib-$[[ inputs.os ]]"
     - job: "encode-$[[ inputs.os ]]"
     - job: "hash-$[[ inputs.os ]]"
+    - job: "scfg-$[[ inputs.os ]]"
     - job: "sftp-$[[ inputs.os ]]"
     - job: "smblib-$[[ inputs.os ]]"
     - job: "spidermonkey-$[[ inputs.os ]]"
+    - job: "uedit-$[[ inputs.os ]]"
     - job: "uifc-$[[ inputs.os ]]"
+    - job: "umonitor-$[[ inputs.os ]]"
+    - job: "utils-$[[ inputs.os ]]"
     - job: "xpdev-$[[ inputs.os ]]"
   rules:
     - if: $NO_JAVASCRIPT == "yes"
diff --git a/src/sbbs3/targets.mk b/src/sbbs3/targets.mk
index 8e0f19a6cdc8778383ab4125ea84bf570422e7c8..a41a48b67d3a64a79603071675dfc87c5415362a 100644
--- a/src/sbbs3/targets.mk
+++ b/src/sbbs3/targets.mk
@@ -65,9 +65,25 @@ utils:	smblib xpdev-mt xpdev ciolib-mt uifc-mt \
 
 gtkutils: gtkmonitor gtkchat gtkuseredit gtkuserlist
 
-dlls:	$(JS_DEPS) smblib xpdev-mt \
-		$(MTOBJODIR) $(LIBODIR) \
-		$(SBBS) $(FTPSRVR) $(MAILSRVR) $(SERVICES)
+.PHONY libdeps
+libdeps: $(JS_DEPS) gitinfo smblib xpdev-mt $(MTOBJODIR) $(LIBODIR)
+
+.PHONY libsbbs
+libsbbs: libdeps $(SBBS)
+
+.PHONY libftpsrvr
+libftpsrvr: libdeps $(FTPSRVR)
+
+.PHONY libmailsrvr
+libmailsrvr: libdeps $(MAILSRVR)
+
+.PHONY libservices
+libservices: libdeps $(SERVICES)
+
+.PHONY libwebsrvr
+libwebsrvr: libdeps $(WEBSRVR)
+
+dlls:	libsbbs libftpsrvr libmailsrvr libservices libwebsrvr
 
 mono:	xpdev-mt smblib \
 		$(MTOBJODIR) $(EXEODIR) \