diff --git a/tomcat/map.jinja b/tomcat/map.jinja
index ba7902d6c326680f88ec229db1c8fc810640d7c9..d1fcea567b2e63cd9220453fa0bf3a4534a59245 100644
--- a/tomcat/map.jinja
+++ b/tomcat/map.jinja
@@ -5,7 +5,9 @@
 {%- set tplroot = tpldir.split('/')[0] %}
 {#- Start imports as #}
 {%- import_yaml tplroot ~ "/defaults.yaml" as default_settings %}
+{%- import_yaml tplroot ~ "/osarchmap.yaml" as osarchmap %}
 {%- import_yaml tplroot ~ "/osfamilymap.yaml" as osfamilymap %}
+{%- import_yaml tplroot ~ "/osmap.yaml" as osmap %}
 {%- import_yaml tplroot ~ "/osfingermap.yaml" as osfingermap %}
 
 {#- Retrieve the config dict only once #}
@@ -15,14 +17,22 @@
       default_settings,
       default=tplroot,
       merge=salt['grains.filter_by'](
-        osfamilymap,
-        grain='os_family',
+        osarchmap,
+        grain='osarch',
         merge=salt['grains.filter_by'](
-          osfingermap,
-          grain='osfinger',
+          osfamilymap,
+          grain='os_family',
           merge=salt['grains.filter_by'](
-            _config,
-            default='lookup'
+            osmap,
+            grain='os',
+            merge=salt['grains.filter_by'](
+              osfingermap,
+              grain='osfinger',
+              merge=salt['grains.filter_by'](
+                _config,
+                default='lookup'
+              )
+            )
           )
         )
       )
diff --git a/tomcat/osarchmap.yaml b/tomcat/osarchmap.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ab3bc1f4b23ddbb5eecb9b2a9bc18102e1215227
--- /dev/null
+++ b/tomcat/osarchmap.yaml
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# vim: ft=yaml
+#
+# Setup variables using grains['osarch'] based logic.
+# You just need to add the key:values for an `osarch` that differ
+# from `defaults.yaml`.
+# Only add an `osarch` which is/will be supported by the formula.
+#
+# If you do not need to provide defaults via the `osarch` grain,
+# you will need to provide at least an empty dict in this file, e.g.
+# osarch: {}
+---
+amd64:
+  arch: amd64
+
+x86_64:
+  arch: amd64
+
+386:
+  arch: 386
+
+arm64:
+  arch: arm64
+
+armv6l:
+  arch: armv6l
+
+armv7l:
+  arch: armv7l
+
+ppc64le:
+  arch: ppc64le
+
+s390x:
+  arch: s390x
diff --git a/tomcat/osfamilymap.yaml b/tomcat/osfamilymap.yaml
index e86ac6b4ad2f4765f1f950f5122fa2176ac2fb37..bdec0c6466ab473c54b234d7e26201c6a7cacada 100644
--- a/tomcat/osfamilymap.yaml
+++ b/tomcat/osfamilymap.yaml
@@ -15,24 +15,20 @@ Debian:
   user: tomcat8
   group: tomcat8
   java_home: /usr/lib/jvm/default-java
+
 RedHat:
   native_pkg: tomcat-native
   manager_pkg: tomcat-admin-webapps
   main_config_template: salt://tomcat/files/tomcat-default-CentOS.template
-openSUSE:
-  ver: 8
-  native_pkg: libtcnative-1-0
-  manager_pkg: tomcat-admin-webapps
-  main_config_template: salt://tomcat/files/tomcat-default-CentOS.template
+
 Suse:
   ver: 8
   native_pkg: libtcnative-1-0
   manager_pkg: tomcat-admin-webapps
   main_config_template: salt://tomcat/files/tomcat-default-CentOS.template
-FreeBSD:
-  native_pkg: tomcat-native
-  ini_config: /etc/rc.conf
-  java_home: /usr
+
+Gentoo: {}
+
 Arch:
   pkg: tomcat8
   ver: 8
@@ -51,6 +47,19 @@ Arch:
   # Not used on Arch
   manager_pkg: ''
 
+Alpine: {}
+
+FreeBSD:
+  native_pkg: tomcat-native
+  ini_config: /etc/rc.conf
+  java_home: /usr
+
+OpenBSD: {}
+
+Solaris: {}
+
+Windows: {}
+
 {%- if grains.os == 'MacOS' %}
 {%-   if salt['cmd.run']('/usr/libexec/java_home -F', output_loglevel="quiet") == 0 %}
 {%-     set darwin_javahome = salt['cmd.run']('/usr/libexec/java_home') %}
diff --git a/tomcat/osfingermap.yaml b/tomcat/osfingermap.yaml
index 16188aa400476bda84bbdc81a2823b29c13da103..f1e70a6695d4317092d47cb2c94fb0ac71406bc2 100644
--- a/tomcat/osfingermap.yaml
+++ b/tomcat/osfingermap.yaml
@@ -1,8 +1,19 @@
 # -*- coding: utf-8 -*-
 # vim: ft=yaml
 ---
-Ubuntu-14.04:
-  ver: 7
+# os: Debian
+Debian-10:
+  ver: 9
+  pkg: tomcat9
+  manager_pkg: tomcat9-admin
+  conf_dir: /etc/tomcat9
+  main_config: /etc/default/tomcat9
+  service: tomcat9
+  user: tomcat
+  group: tomcat
+Debian-9: {}
+Debian-8: {}
+Debian-7:
   pkg: tomcat7
   manager_pkg: tomcat7-admin
   conf_dir: /etc/tomcat7
@@ -11,7 +22,12 @@ Ubuntu-14.04:
   service: tomcat7
   user: tomcat7
   group: tomcat7
-Debian-7:
+
+# os: Ubuntu
+Ubuntu-18.04: {}
+Ubuntu-16.04: {}
+Ubuntu-14.04:
+  ver: 7
   pkg: tomcat7
   manager_pkg: tomcat7-admin
   conf_dir: /etc/tomcat7
@@ -20,12 +36,28 @@ Debian-7:
   service: tomcat7
   user: tomcat7
   group: tomcat7
-Debian-10:
-  ver: 9
-  pkg: tomcat9
-  manager_pkg: tomcat9-admin
-  conf_dir: /etc/tomcat9
-  main_config: /etc/default/tomcat9
-  service: tomcat9
-  user: tomcat
-  group: tomcat
+
+# os: Fedora
+Fedora-31: {}
+Fedora-30: {}
+
+# os: CentOS
+CentOS Linux-8: {}
+CentOS Linux-7: {}
+CentOS-6: {}
+
+# os: Amazon
+Amazon Linux-2: {}
+Amazon Linux AMI-2018: {}
+
+# os: SUSE
+Leap-15: {}
+
+# os: FreeBSD
+FreeBSD-12: {}
+
+# os: Windows
+Windows-8.1: {}
+
+# os: Gentoo
+Gentoo-2: {}
diff --git a/tomcat/osmap.yaml b/tomcat/osmap.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..de11a67327c8df5c87f623d5f594bfd8ea414ed4
--- /dev/null
+++ b/tomcat/osmap.yaml
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# vim: ft=yaml
+#
+# Setup variables using grains['os'] based logic.
+# You just need to add the key:values for an `os` that differ
+# from `defaults.yaml` + `osarch.yaml` + `os_family.yaml`.
+# Only add an `os` which is/will be supported by the formula.
+#
+# If you do not need to provide defaults via the `os` grain,
+# you will need to provide at least an empty dict in this file, e.g.
+# osmap: {}
+---
+# os_family: Debian
+Ubuntu: {}
+Raspbian: {}
+
+# os_family: RedHat
+Fedora: {}
+CentOS: {}
+Amazon: {}
+
+# os_family: Suse
+SUSE: {}
+openSUSE: {}
+
+# os_family: Gentoo
+Funtoo: {}
+
+# os_family: Arch
+Manjaro: {}
+
+# os_family: Solaris
+SmartOS: {}