diff --git a/src/freedombone-utils-selector b/src/freedombone-utils-selector
index 63b854e0..077168de 100755
--- a/src/freedombone-utils-selector
+++ b/src/freedombone-utils-selector
@@ -285,11 +285,12 @@ function detect_apps {
     for filename in $FILES
     do
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
-
-        # shellcheck disable=SC2068
-        if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
-            APPS_AVAILABLE+=("${app_name}")
-            APPS_CHOSEN+=("0")
+        if [[ $(app_not_on_onion_only "$app_name") != "0" ]]; then
+            # shellcheck disable=SC2068
+            if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
+                APPS_AVAILABLE+=("${app_name}")
+                APPS_CHOSEN+=("0")
+            fi
         fi
     done
 
@@ -298,6 +299,20 @@ function detect_apps {
     get_apps_installed_names
 }
 
+function app_not_on_onion_only {
+    app_name="$1"
+
+    read_config_param ONION_ONLY
+
+    if [[ "$ONION_ONLY" != 'no' ]]; then
+        if grep -q "NOT_ON_ONION=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then
+            echo "0"
+            return
+        fi
+    fi
+    echo "1"
+}
+
 # detects what apps are available and can be installed
 # If the variants list within an app script is an empty string then
 # it is considered to be too experimental to be installable
@@ -318,16 +333,18 @@ function detect_installable_apps {
     do
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
 
-        # shellcheck disable=SC2068
-        if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
-            variants_list=$(app_variants "$filename")
-            # check for empty string
-            if [ ${#variants_list} -gt 0 ]; then
-                APPS_AVAILABLE+=("${app_name}")
-                APPS_CHOSEN+=("0")
-                APPS_INSTALLED+=("$(app_is_installed "$app_name")")
-                if [[ $(app_is_installed "$app_name") == "1" ]]; then
-                    APPS_INSTALLED_NAMES+=("$app_name")
+        if [[ $(app_not_on_onion_only "$app_name") != "0" ]]; then
+            # shellcheck disable=SC2068
+            if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
+                variants_list=$(app_variants "$filename")
+                # check for empty string
+                if [ ${#variants_list} -gt 0 ]; then
+                    APPS_AVAILABLE+=("${app_name}")
+                    APPS_CHOSEN+=("0")
+                    APPS_INSTALLED+=("$(app_is_installed "$app_name")")
+                    if [[ $(app_is_installed "$app_name") == "1" ]]; then
+                        APPS_INSTALLED_NAMES+=("$app_name")
+                    fi
                 fi
             fi
         fi
@@ -350,13 +367,15 @@ function detect_installed_apps {
     do
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
 
-        if [[ $(app_is_installed "$app_name") == "1" ]]; then
-            # shellcheck disable=SC2068
-            if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
-                variants_list=$(app_variants "$filename")
-                if [ ${#variants_list} -gt 0 ]; then
-                    APPS_AVAILABLE+=("${app_name}")
-                    APPS_INSTALLED_NAMES+=("$app_name")
+        if [[ $(app_not_on_onion_only "$app_name") != "0" ]]; then
+            if [[ $(app_is_installed "$app_name") == "1" ]]; then
+                # shellcheck disable=SC2068
+                if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
+                    variants_list=$(app_variants "$filename")
+                    if [ ${#variants_list} -gt 0 ]; then
+                        APPS_AVAILABLE+=("${app_name}")
+                        APPS_INSTALLED_NAMES+=("$app_name")
+                    fi
                 fi
             fi
         fi
@@ -385,27 +404,28 @@ function choose_apps_for_variant {
     for filename in $FILES
     do
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
-
-        # shellcheck disable=SC2068
-        if item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
-            if grep -q "VARIANTS=" "${filename}"; then
-                variants_list=$(app_variants "$filename")
-                if [[ "${variants_list}" == 'all'* || \
-                      "${variants_list}" == "$variant_name" || \
-                      "${variants_list}" == "$variant_name "* || \
-                      "${variants_list}" == *" $variant_name "* || \
-                      "${variants_list}" == *" $variant_name" ]]; then
-                    if [[ $(app_is_removed "${a}") == "0" ]]; then
-                        #echo $"${app_name} chosen"
-                        APPS_CHOSEN+=("1")
+        if [[ $(app_not_on_onion_only "$app_name") != "0" ]]; then
+            # shellcheck disable=SC2068
+            if item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
+                if grep -q "VARIANTS=" "${filename}"; then
+                    variants_list=$(app_variants "$filename")
+                    if [[ "${variants_list}" == 'all'* || \
+                              "${variants_list}" == "$variant_name" || \
+                              "${variants_list}" == "$variant_name "* || \
+                              "${variants_list}" == *" $variant_name "* || \
+                              "${variants_list}" == *" $variant_name" ]]; then
+                        if [[ $(app_is_removed "${a}") == "0" ]]; then
+                            #echo $"${app_name} chosen"
+                            APPS_CHOSEN+=("1")
+                        else
+                            APPS_CHOSEN+=("0")
+                        fi
                     else
                         APPS_CHOSEN+=("0")
                     fi
                 else
                     APPS_CHOSEN+=("0")
                 fi
-            else
-                APPS_CHOSEN+=("0")
             fi
         fi
     done