diff --git a/Slax/briq/rootcopy/etc/issue b/Slax/briq/rootcopy/etc/issue
new file mode 100644
index 0000000..7ac6f33
--- /dev/null
+++ b/Slax/briq/rootcopy/etc/issue
@@ -0,0 +1,10 @@
+\1
+ _ ____ _____
+ | | / __ \ / ____|
+ __| |_ __ __ _| | | | (___
+ / _` | '_ \ / _` | | | |\___ \
+ | (_| | | | | (_| | |__| |____) |
+ \__,_|_| |_|\__,_|\____/|_____/
+
+ powered by Briq
+
diff --git a/Slax/briq/rootcopy/usr/bin/dir2sb b/Slax/briq/rootcopy/usr/bin/dir2sb
new file mode 100755
index 0000000..3ddd64d
--- /dev/null
+++ b/Slax/briq/rootcopy/usr/bin/dir2sb
@@ -0,0 +1,58 @@
+#!/bin/bash
+# Author: Tomas M.
+
+usage()
+{
+ echo ""
+ echo "Convert directory to .sb compressed module"
+ echo "Usage: $0 [source_directory.sb] [[target_file.sb]]"
+ echo " If source_directory does not have .sb suffix and it is not 'squashfs-root',"
+ echo " then the source_directory itself is included in the module and"
+ echo " then the target_file.sb parameter is required."
+ echo " If target_file.sb is not specified, the source_directory is erased"
+ echo " and replaced by the newly generated module file."
+}
+
+P1="$(readlink -f "$1")"
+P2="$(readlink -f "$2")"
+
+if [ "$P1" = "$P2" ]; then
+ P2=""
+fi
+
+SB=$(echo "$P1" | grep -o "[.]sb/*\$")
+if [ "$(echo "$P1" | grep -o "/squashfs-root/*\$")" != "" ]; then
+ SB="true"
+fi
+
+if [ "$SB" = "" ]; then
+ KEEP="-keep-as-directory"
+ if [ "$P2" = "" ]; then
+ usage
+ exit 1
+ fi
+else
+ KEEP=""
+fi
+
+if [ ! -d "$P1" ]; then
+ echo "Not a directory: $P1" >&2
+ exit 2
+fi
+
+
+if [ "$P2" = "" ]; then
+ TARGET="$P1".sb
+ while [ -e "$TARGET" ]; do TARGET="$TARGET"x; done
+ mksquashfs "$P1" "$TARGET" -comp xz -b 1024K -always-use-fragments $KEEP >/dev/null || exit 3
+ umount "$P1" 2>/dev/null
+ rm -Rf "$P1"
+ mv "$TARGET" "$P1"
+else
+ if [ -e "$P2" ]; then
+ echo "Target exists: $P2" >&2
+ exit 4
+ fi
+
+ mksquashfs "$P1" "$P2" -comp xz -b 1024K -always-use-fragments $KEEP >/dev/null
+fi
diff --git a/Slax/briq/rootcopy/usr/bin/pacman2sb b/Slax/briq/rootcopy/usr/bin/pacman2sb
new file mode 100755
index 0000000..8a82c31
--- /dev/null
+++ b/Slax/briq/rootcopy/usr/bin/pacman2sb
@@ -0,0 +1,32 @@
+#! /bin/bash --
+
+# Aggrega file di pacchetti installati o aggiornati con Pacman
+# dall'ultimo avvio di una distribuzione linux-live
+# (cfr. https://www.linux-live.org/ ) senza persistenza attivata,
+# creando un unico bundle .sb
+# I file vengono letti dalla directory changes e da essa filtrati solo
+# quelli appartenenti ai pacchetti di pacman.
+#
+# Autore: Guido Longoni
+
+IFS=$'\n'
+OUTLST="/tmp/added_files_$$.lst"
+CACHEDIR=$(sed -n -e '/^[[:space:]]*CacheDir/s|^[^=]*=[[:space:]]*||gp' -e 's|[[:space:]]*$||g' /etc/pacman.conf | head -n1)
+OUTDIR="/tmp/sb_$$"
+OUTFILE="$OUTDIR".sb
+CHGDIR=$(realpath $(mount | sed -n -e '/squashfs/s|.* on \([^ ]*\)/.*|\1|gp' | head -n1)/../changes)
+
+mkdir -p '/tmp'
+mkdir -p "$OUTDIR"
+rm -rf "$OUTLST"
+touch "$OUTLST"
+for i in $(find "$CACHEDIR" -iname '*.pkg.tar.xz'); do
+ tar t -f $i >> "$OUTLST" 2>/dev/null
+done
+sort -u "$OUTLST" | grep -v '^\.' > "$OUTLST".tmp
+mv "$OUTLST".tmp "$OUTLST"
+rsync -av --old-d --files-from="$OUTLST" "$CHGDIR" "$OUTDIR"
+dir2sb "$OUTDIR" "$OUTFILE"
+rm -rf "$OUTDIR"
+rm -rf "$OUTLST"
+
diff --git a/Slax/briq/rootcopy/usr/bin/pxe b/Slax/briq/rootcopy/usr/bin/pxe
new file mode 100755
index 0000000..3aaff4e
--- /dev/null
+++ b/Slax/briq/rootcopy/usr/bin/pxe
@@ -0,0 +1,86 @@
+#!/bin/bash
+# Rebuild initial ramdisk with full network drivers,
+# start DHCP and TFTP server in order to provide PXE service
+#
+# Author: Tomas M
+
+LIVE=/run/initramfs
+FTPROOT=/var/state/dnsmasq/root
+
+# find out our own IP address. If more interfaces are available, use the first one
+IP="$(hostname -I | cut -d " " -f 1)"
+GW=$(ip route show | grep default | grep -o "via.*" | head -n 1 | cut -d " " -f 2)
+
+# if no IP is assigned to this computer, setup private address randomly
+if [ "$IP" = "" ]; then
+ killall dhclient 2>/dev/null
+ IP="10."$(($RANDOM/130+1))"."$(($RANDOM/130+1))".1"
+ ifconfig $(ls -1 /sys/class/net | egrep -v '^lo$' | sort | head -n 1) $IP netmask 255.255.255.0
+fi
+
+# if gateway is not recognized, lets make our IP a gateway and enable forwarding
+if [ "$GW" = "" ]; then
+ GW="$IP"
+ echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
+ echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+fi
+
+echo Starting PXE server on $IP ...
+
+# calculate C class range
+RANGE=$(echo $IP | cut -d "." -f 1-3)
+
+# make sure dnsmasq can be started
+killall dnsmasq 2>/dev/null
+killall busybox 2>/dev/null
+rm -Rf $FTPROOT 2>/dev/null
+mkdir -p $FTPROOT/{pxelinux.cfg,tmp}/
+
+# create root filesystem for ftfp
+cd $LIVE
+( find . -print | grep -v "memory"
+ cd /
+ find /lib/modules/$(uname -r)/kernel/drivers/net | grep -v wireless
+) | cpio -pvd $FTPROOT/tmp 2>/dev/null
+
+cp /lib/modules/$(uname -r)/modules.* $FTPROOT/tmp/lib/modules/$(uname -r)
+depmod -b $FTPROOT/tmp
+rm $FTPROOT/tmp/lib/initramfs_escaped
+
+# pack root in initramfs
+cd $FTPROOT/tmp
+find . -print | cpio -o -H newc 2>/dev/null | gzip -f --fast >../initrfs.img
+cd ..
+rm -Rf tmp
+
+# link files here since copying is not necessary
+ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep vmlinuz | head -n 1) $FTPROOT/vmlinuz
+ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep pxelinux.0 | head -n 1) $FTPROOT/pxelinux.0
+ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep ldlinux.c32 | head -n 1) $FTPROOT/ldlinux.c32
+
+find $LIVE/memory/{data,iso,toram} 2>/dev/null | egrep "[.]sb\$" | sort -n | while read LINE; do
+ BAS="$(basename "$LINE")"
+ ln -s $LINE "$FTPROOT/$BAS"
+ echo $BAS >> "$FTPROOT/PXEFILELIST"
+done
+
+echo "This is Slax PXE data server. PXE clients will download file list" > "$FTPROOT/index.html"
+
+# default pxelinux configuration. Keep xmode selection for clients the same like for the server
+echo "
+PROMPT 0
+DEFAULT slax
+LABEL slax
+KERNEL /vmlinuz
+IPAPPEND 1
+APPEND initrd=/initrfs.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 $(cat /proc/cmdline | egrep -o 'slax.flags=[^ ]+' | sed -r 's:[,=]pxe::' | sed -r 's:[,=]toram::')
+" > $FTPROOT/pxelinux.cfg/default
+
+# start the DHCP server and TFTP server
+dnsmasq --enable-tftp --tftp-root=/var/state/dnsmasq/root \
+--dhcp-boot=pxelinux.0,"$IP",$IP \
+--dhcp-option=3,$GW \
+--dhcp-range=$RANGE.2,$RANGE.250,infinite --log-dhcp
+
+# start HTTP server at port 7529 (that are the numbers you type on your phone to write 'slax')
+busybox httpd -p 7529 -h /var/state/dnsmasq/root
diff --git a/Slax/briq/rootcopy/usr/bin/rmsbdir b/Slax/briq/rootcopy/usr/bin/rmsbdir
new file mode 100755
index 0000000..42cb449
--- /dev/null
+++ b/Slax/briq/rootcopy/usr/bin/rmsbdir
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Author: Tomas M.
+
+if [ ! -e "$1" ]; then
+ echo
+ echo "Erase module directory created by sb2dir"
+ echo "Usage: $0 [source_directory.sb]"
+ exit 1
+fi
+
+if [ ! -d "$1" ]; then
+ echo "Directory does not exist: $1" >&2
+ exit
+fi
+
+umount "$1" 2>/dev/null
+rm -Rf "$1"
diff --git a/Slax/briq/rootcopy/usr/bin/savechanges b/Slax/briq/rootcopy/usr/bin/savechanges
new file mode 100755
index 0000000..48e9c9e
--- /dev/null
+++ b/Slax/briq/rootcopy/usr/bin/savechanges
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+TMP=/tmp/changes$$
+EXCLUDE="^\$|/\$|[.]wh[.][.]wh[.]orph/|^[.]wh[.][.]wh[.]plnk/|^[.]wh[.][.]wh[.]aufs|^var/cache/|^var/backups/|^var/tmp/|^var/log/|^var/lib/apt/|^var/lib/dhcp/|^var/lib/systemd/|^sbin/fsck[.]aufs|^etc/resolv[.]conf|^root/[.]Xauthority|^root/[.]xsession-errors|^root/[.]fehbg|^root/[.]fluxbox/lastwallpaper|^root/[.]fluxbox/menu_resolution|^etc/mtab|^etc/fstab|^boot/|^dev/|^mnt/|^proc/|^run/|^sys/|^tmp/"
+CHANGES=/run/initramfs/memory/changes
+
+if [ "$1" = "" ]; then
+ echo ""
+ echo "savechanges - save all changed files in a compressed filesystem bundle"
+ echo " - excluding some predefined files such as /etc/mtab,"
+ echo " temp & log files, empty directories, apt cache, and such"
+ echo ""
+ echo "Usage:"
+ echo " $0 [ target_file.sb ] [ changes_directory ]"
+ echo ""
+ echo "If changes_directory is not specified, /run/initramfs/memory/changes is used."
+ echo ""
+ exit 1
+fi
+
+if [ ! "$2" = "" ]; then
+ CHANGES="$2"
+fi
+
+# exclude the save_file itself of course
+EXCLUDE="$EXCLUDE|^""$(readlink -f "$1" | cut -b 2- | sed -r "s/[.]/[.]/")""\$"
+
+CWD=$(pwd)
+
+cd $CHANGES || exit
+
+mkdir -p $TMP
+mount -t tmpfs tmpfs $TMP
+
+find \( -type d -printf "%p/\n" , -not -type d -print \) \
+ | sed -r "s/^[.]\\///" | egrep -v "$EXCLUDE" \
+ | while read FILE; do
+ cp --parents -afr "$FILE" "$TMP"
+done
+
+cd $CWD
+
+mksquashfs $TMP "$1" -comp xz -b 1024K -always-use-fragments -noappend
+
+umount $TMP
+rmdir $TMP
diff --git a/Slax/briq/rootcopy/usr/bin/sb b/Slax/briq/rootcopy/usr/bin/sb
new file mode 100755
index 0000000..5346f44
--- /dev/null
+++ b/Slax/briq/rootcopy/usr/bin/sb
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+if [ "$1" = "rm" ]; then
+ shift
+ rmsbdir "$@"
+ exit $?
+fi
+
+if [ "$1" = "rmdir" ]; then
+ shift
+ rmsbdir "$@"
+ exit $?
+fi
+
+if [ "$1" = "conv" ]; then
+ shift
+fi
+
+if [ ! -r "$1" ]; then
+ echo File not found "$1"
+ exit 1
+fi
+
+if [ -d "$1" ]; then
+ dir2sb "$@"
+ exit $?
+fi
+
+sb2dir "$@"
diff --git a/Slax/briq/rootcopy/usr/bin/sb2dir b/Slax/briq/rootcopy/usr/bin/sb2dir
new file mode 100755
index 0000000..4f580ec
--- /dev/null
+++ b/Slax/briq/rootcopy/usr/bin/sb2dir
@@ -0,0 +1,33 @@
+#!/bin/bash
+# Author: Tomas M.
+
+if [ ! -e "$1" ]; then
+ echo
+ echo "Convert .sb compressed module into directory with the same name"
+ echo "Usage: $0 [source_file.sb] [[optional output_directory]]"
+ echo " If the output_directory is specified, it must exist"
+ echo " If the output_directory is not specified, the name source_file.sb"
+ echo " is used and the directory is overmounted with tmpfs"
+ exit 1
+fi
+
+if [ ! -r "$1" ]; then
+ echo "File does not exist: $1" >&2
+ exit
+fi
+
+if [ "$2" = "" ]; then
+ SOURCE="$1".x
+ while [ -e "$SOURCE" ]; do SOURCE="$SOURCE"x; done
+ mv "$1" "$SOURCE" || exit
+ mkdir "$1"
+ mount -t tmpfs tmpfs "$1"
+ unsquashfs -f -dest "$1" "$SOURCE" >/dev/null || exit
+ rm "$SOURCE"
+else
+ if [ ! -d "$2" ]; then
+ echo "Directory does not exist: $2" >&2
+ exit
+ fi
+ unsquashfs -f -dest "$2" "$1" >/dev/null
+fi
diff --git a/Slax/briq/rootcopy/usr/bin/slax b/Slax/briq/rootcopy/usr/bin/slax
new file mode 100755
index 0000000..a8843ad
--- /dev/null
+++ b/Slax/briq/rootcopy/usr/bin/slax
@@ -0,0 +1,178 @@
+#!/bin/bash
+# Slax management and control script
+# Author: Tomas M
+
+# activate
+# deactivate
+# list
+
+
+LIVE=/run/initramfs/memory
+RAMSTORE=$LIVE/modules
+
+# Print error message and exit
+# $1 = error message
+#
+die()
+{
+ echo "$1" >&2
+ exit 1
+}
+
+
+print_branches()
+{
+ local SI BUNDLE LOOP CWD
+
+ SI="/sys/fs/aufs/$(cat /proc/mounts | grep 'aufs / aufs' | egrep -o 'si=([^,) ]+)' | tr = _)"
+ CWD="$(pwd)"
+ cd "$SI"
+ ls -v1 | grep -v xi_path | egrep 'br[0-9]+' | xargs cat | grep memory/bundles | rev | cut -b 4- | rev | while read BUNDLE; do
+ if mountpoint -q "$BUNDLE"; then
+ LOOP=$(cat /proc/mounts | fgrep " $BUNDLE squashfs" | cut -d " " -f 1)
+ echo -n "$BUNDLE"
+ echo -ne "\t"
+ losetup $LOOP | sed -r "s:.*[(]|[)].*::g"
+ fi
+ done | tac
+ cd "$CWD"
+}
+
+
+# Activate Slax Bundle
+# $1 = file to activate
+#
+activate()
+{
+ local SB TGT BAS
+
+ SB="$(readlink -f "$1")"
+ BAS="$(basename "$SB")"
+
+ # check if file exists
+ if [ ! -r "$SB" ]; then
+ usage
+ die "file not found $SB"
+ fi
+
+ # check if the file is part of aufs union, if yes we need to copy it outside
+ if df "$SB" | cut -d " " -f 1 | grep -q aufs; then
+ TGT="$RAMSTORE"
+ mkdir -p "$TGT"
+ if [ -r $TGT/$BAS ]; then die "File exists: $TGT/$BAS"; fi
+ cp -n "$SB" "$TGT/$BAS"
+ if [ $? -ne 0 ]; then die "Error copying file to $TGT/$BAS. Not enough free RAM or disk space?"; fi
+ SB="$TGT/$BAS"
+ fi
+
+ # check if this particular file is already activated
+ if print_branches | cut -f 2 | fgrep -q "$SB"; then
+ exit
+ fi
+
+ # mount remount,add
+ TGT="$LIVE/bundles/$BAS"
+ mkdir -p "$TGT"
+
+ mount -n -o loop,ro "$SB" "$TGT"
+ if [ $? -ne 0 ]; then
+ die "Error mounting $SB to $TGT, perhaps corrupted download"
+ fi
+
+ # add current branch to aufs union
+ mount -t aufs -o remount,add:1:"$TGT" aufs /
+ if [ $? -ne 0 ]; then
+ umount "$TGT"
+ rmdir "$TGT"
+ die "Error attaching bundle filesystem to Slax"
+ fi
+
+ echo "Slax Bundle activated: $BAS"
+}
+
+
+# Deactivate Slax bundle of the given name
+# $1 = path to bundle file, or its name
+#
+deactivate()
+{
+ local BUNDLES SB MATCH LOOP LOOPFILE
+
+ BUNDLES=$LIVE/bundles
+ MODULES=$LIVE/modules
+ SB="$(basename "$1")"
+
+ rmdir "$BUNDLES/$SB" 2>/dev/null # this fails unless the dir is
+ rmdir "$BUNDLES/$SB.sb" 2>/dev/null # forgotten there empty. It's safe this way
+
+ if [ ! -d "$BUNDLES/$SB" ]; then
+ # we don't have real filename match, lets try to add .sb extension
+ if [ ! -d "$BUNDLES/$SB.sb" ]; then
+ # no, still no match. Lets use some guesswork
+ SB=$(print_branches | cut -f 2 | egrep -o "/[0-9]+-$SB.sb\$" | tail -n 1 | xargs -r basename)
+ else
+ SB="$SB.sb"
+ fi
+ fi
+
+ if [ "$SB" = "" -o ! -d "$BUNDLES/$SB" ]; then
+ die "can't find active slax bundle $1"
+ fi
+
+ echo "Attempting to deactivate Slax bundle $SB..."
+ mount -t aufs -o remount,verbose,del:"$BUNDLES/$SB" aufs / 2>/dev/null
+ if [ $? -ne 0 ]; then
+ die "Unable to deactivate Slax Bundle - still in use. See dmesg for more."
+ fi
+
+ # remember what loop device was the bundle mounted to, it may be needed later
+ LOOP="$(cat /proc/mounts | fgrep " $BUNDLES/$SB " | cut -d " " -f 1)"
+ LOOPFILE="$(losetup "$LOOP" | cut -d " " -f 3 | sed -r 's:^.|.$::g')"
+
+ umount "$BUNDLES/$SB" 2>/dev/null
+ if [ $? -ne 0 ]; then
+ die "Unable to umount Slax bundle loop-mount $BUNDLES/$SB"
+ fi
+ rmdir "$BUNDLES/$SB"
+
+ # free the loop device manually since umount fails to do that if the bundle was activated on boot
+ losetup -d "$LOOP" 2>/dev/null
+
+ if echo "$LOOPFILE" | grep -q $RAMSTORE; then
+ rm -f $LOOPFILE
+ fi
+
+ echo "Slax Bundle deactivated: $SB"
+}
+
+
+usage()
+{
+ echo "Usage: $0 [ activate | deactivate | list ] [ file.sb ]" >&2
+ if [ "$1" != "" ]; then
+ echo "$1" >&2
+ fi
+}
+
+
+if [ "$1" = "" ]; then
+ usage
+ die
+fi
+
+if [ "$1" = "activate" ]; then
+ activate "$2"
+fi
+
+if [ "$1" = "deactivate" ]; then
+ deactivate "$2"
+fi
+
+if [ "$1" = "list" ]; then
+ print_branches
+fi
+
+if [ "$1" = "savechanges" ]; then
+ shift
+ savechanges "$@"
+fi