diff --git a/Makefile b/Makefile
index ced4291221ef47de9a48b4682854944df4b1fa47..72f71ac44f373721f7832e4d3961c313632ee7af 100644
--- a/Makefile
+++ b/Makefile
@@ -2471,7 +2471,7 @@ GENERATED+=ptests/ptests_config.ml tests/ptests_config $(GENERATED_TESTS)
 # Source distribution #
 #######################
 
-.PHONY: src-distrib ivette-src-distrib
+.PHONY: src-distrib
 
 STANDALONE_PLUGINS_FILES = \
 	$(addprefix src/dummy/hello_world/,hello_world.ml Makefile) \
@@ -2483,14 +2483,10 @@ DISTRIB_FILES += $(wildcard $(PLUGIN_DISTRIBUTED_LIST)                   \
 DISTRIB_FILES:=$(filter-out $(GENERATED) $(PLUGIN_GENERATED_LIST),\
                   $(DISTRIB_FILES))
 
-src-distrib: #ivette-src-distrib
-ivette-src-distrib:
-	make -C ivette update-distrib-files
-
-sinclude ivette/Makefile.distrib
-
 DISTRIB_TESTS += $(wildcard $(PLUGIN_DIST_TESTS_LIST))
 
+include ivette/Makefile.distrib
+sinclude ivette/Makefile.plugins
 
 SPECIFIED_OPEN_SOURCE:=$(OPEN_SOURCE)
 OPEN_SOURCE  ?= no
diff --git a/ivette/.gitignore b/ivette/.gitignore
index aa5b96a0e2174092c0ef7d3ad13a8c3aca51311c..d77ab83c7bc84b3d2b1435f00e2ddb2042d5df65 100644
--- a/ivette/.gitignore
+++ b/ivette/.gitignore
@@ -14,5 +14,6 @@ yarn-error.log
 /doc/html
 /src/renderer/loader.ts
 /src/dome/doc/guides/icons.md
+/Makefile.plugins
 
 # --------------------------------------------------------------------------
diff --git a/ivette/Makefile b/ivette/Makefile
index 186681c5cd4c2d66479a02505dd4c74fb5eb457b..e5680911a515c3f3fe2c5d6cd1bdf60162db3fe3 100644
--- a/ivette/Makefile
+++ b/ivette/Makefile
@@ -72,37 +72,10 @@ $(LOADER): $(PACKAGES) ./configure.js ./Makefile
 # --- Frama-C Source Distrib
 # --------------------------------------------------------------------------
 
-.PHONY: update-distrib-files update-distrib-plugins
-
-SRC_DISTRIB=Makefile.distrib
-SRC_HEADERS=headers/header_spec.txt
+.PHONY: update-distrib-files
 
 update-distrib-files:
-	@echo "Generating $(SRC_DISTRIB)"
-	@rm -f $(SRC_DISTRIB)
-	@rm -f $(SRC_HEADERS)
-	@for f in `git ls-files .` ;\
-	 do \
-	   echo "DISTRIB_FILES += ivette/$$f" >> $(SRC_DISTRIB) ;\
-	   headers/register.sh "$$f" >> $(SRC_HEADERS) ; \
-	 done
-	@chmod a-w $(SRC_DISTRIB)
-	@chmod a-w $(SRC_HEADERS)
-
-update-distrib-plugins: update-distrib-files
-	@chmod a+w $(SRC_DISTRIB)
-	@chmod a+w $(SRC_HEADERS)
-	@for repo in `find . -type d -name ".git"` ;\
-	 do \
-	   echo "Distributing $$repo" ;\
-	   for f in `git -C $$repo ls-files .` ;\
-	   do \
-	     echo "DISTRIB_FILES += ivette/$$f" >> $(SRC_DISTRIB) ;\
-	     headers/register.sh "$$f" >> $(SRC_HEADERS) ; \
-	   done \
-	 done
-	@chmod a-w $(SRC_DISTRIB)
-	@chmod a-w $(SRC_HEADERS)
+	./distrib.sh
 
 # --------------------------------------------------------------------------
 # --- Frama-C API
diff --git a/ivette/Makefile.distrib b/ivette/Makefile.distrib
index 828a346d45fc9354aca67b0517a5c457553e9a49..b81bdd3fa8c84b71a7969b295b225bec75464752 100644
--- a/ivette/Makefile.distrib
+++ b/ivette/Makefile.distrib
@@ -7,15 +7,13 @@ DISTRIB_FILES += ivette/.gitignore
 DISTRIB_FILES += ivette/CONTRIBUTING.md
 DISTRIB_FILES += ivette/INSTALL.md
 DISTRIB_FILES += ivette/Makefile
-DISTRIB_FILES += ivette/Makefile.distrib
 DISTRIB_FILES += ivette/README.md
 DISTRIB_FILES += ivette/configure.js
+DISTRIB_FILES += ivette/distrib.sh
 DISTRIB_FILES += ivette/doc/pandoc/href.lua
 DISTRIB_FILES += ivette/doc/pandoc/index.json
 DISTRIB_FILES += ivette/doc/pandoc/template.html
 DISTRIB_FILES += ivette/electron-webpack.json
-DISTRIB_FILES += ivette/headers/header_spec.txt
-DISTRIB_FILES += ivette/headers/register.sh
 DISTRIB_FILES += ivette/package.json
 DISTRIB_FILES += ivette/src/dome/.gitignore
 DISTRIB_FILES += ivette/src/dome/CONTRIBUTING.md
@@ -93,6 +91,7 @@ DISTRIB_FILES += ivette/src/dome/renderer/controls/gallery.json
 DISTRIB_FILES += ivette/src/dome/renderer/controls/icons.tsx
 DISTRIB_FILES += ivette/src/dome/renderer/controls/labels.tsx
 DISTRIB_FILES += ivette/src/dome/renderer/controls/style.css
+DISTRIB_FILES += ivette/src/dome/renderer/dark.css
 DISTRIB_FILES += ivette/src/dome/renderer/data/compare.ts
 DISTRIB_FILES += ivette/src/dome/renderer/data/json.ts
 DISTRIB_FILES += ivette/src/dome/renderer/data/library.js
@@ -112,15 +111,18 @@ DISTRIB_FILES += ivette/src/dome/renderer/layout/forms.tsx
 DISTRIB_FILES += ivette/src/dome/renderer/layout/grids.js
 DISTRIB_FILES += ivette/src/dome/renderer/layout/splitters.tsx
 DISTRIB_FILES += ivette/src/dome/renderer/layout/style.css
+DISTRIB_FILES += ivette/src/dome/renderer/light.css
 DISTRIB_FILES += ivette/src/dome/renderer/style.css
 DISTRIB_FILES += ivette/src/dome/renderer/table/arrays.ts
 DISTRIB_FILES += ivette/src/dome/renderer/table/models.ts
 DISTRIB_FILES += ivette/src/dome/renderer/table/style.css
 DISTRIB_FILES += ivette/src/dome/renderer/table/views.tsx
 DISTRIB_FILES += ivette/src/dome/renderer/text/buffers.ts
+DISTRIB_FILES += ivette/src/dome/renderer/text/dark-code.css
 DISTRIB_FILES += ivette/src/dome/renderer/text/editors.tsx
 DISTRIB_FILES += ivette/src/dome/renderer/text/pages.tsx
 DISTRIB_FILES += ivette/src/dome/renderer/text/style.css
+DISTRIB_FILES += ivette/src/dome/renderer/themes.tsx
 DISTRIB_FILES += ivette/src/dome/template/Application.js
 DISTRIB_FILES += ivette/src/dome/template/Preferences.js
 DISTRIB_FILES += ivette/src/dome/template/babelrc.json
@@ -150,6 +152,7 @@ DISTRIB_FILES += ivette/src/frama-c/kernel/Globals.tsx
 DISTRIB_FILES += ivette/src/frama-c/kernel/History.tsx
 DISTRIB_FILES += ivette/src/frama-c/kernel/Locations.tsx
 DISTRIB_FILES += ivette/src/frama-c/kernel/Messages.tsx
+DISTRIB_FILES += ivette/src/frama-c/kernel/PivotTable-style.css
 DISTRIB_FILES += ivette/src/frama-c/kernel/PivotTable.tsx
 DISTRIB_FILES += ivette/src/frama-c/kernel/Properties.tsx
 DISTRIB_FILES += ivette/src/frama-c/kernel/SourceCode.tsx
diff --git a/ivette/distrib.sh b/ivette/distrib.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0ca54213ed947365813936e6b040cef625653ba2
--- /dev/null
+++ b/ivette/distrib.sh
@@ -0,0 +1,54 @@
+#!/bin/sh -e
+# --------------------------------------------------------------------------
+# ---  Generate Files for Ivette Distribution
+# --------------------------------------------------------------------------
+
+Distribute() {
+    repo=$1
+    Distrib=$repo/Makefile.distrib
+    Headers=$repo/headers/header_spec.txt
+    rm -f $Distrib
+    rm -f $Headers
+    mkdir -p $1/headers
+    if [ "$repo" == "." ]
+    then
+        src=ivette
+    else
+        src=ivette/$repo
+    fi
+    echo "Distributing $src"
+    for f in $(git -C $repo ls-files .)
+    do
+        case $f in
+            Makefile.distrib | headers/* )
+            ;;
+            *)
+                echo "DISTRIB_FILES += $src/$f" >> $Distrib
+                case $f in
+                    *.sh | *.json | */dome/doc/* | configure.js | .* | webpack*.js )
+                        echo "$f: .ignore" >> $Headers
+                        ;;
+                    *Make* | *.js* | *.ts* | *.ml*)
+                        echo "$f: CEA_LGPL" >> $Headers
+                        ;;
+                    *)
+                        echo "$f: .ignore" >> $Headers
+                        ;;
+                esac
+        esac
+    done
+    chmod a-w $Distrib
+    chmod a-w $Headers
+    if [ "$repo" != "." ]
+    then
+        echo "include ivette/$Distrib" >> Makefile.plugins
+    fi
+}
+
+Distribute .
+rm -f Makefile.plugins
+for rgit in $(find src -type d -name ".git")
+do
+    Distribute $(dirname $rgit)
+done
+chmod -f a-w Makefile.plugins
diff --git a/ivette/headers/header_spec.txt b/ivette/headers/header_spec.txt
index a754de1f30bf5406213d348123f44ca68e8bd81d..a26943ab07401fd7c2f99cea55c502b1f872605a 100644
--- a/ivette/headers/header_spec.txt
+++ b/ivette/headers/header_spec.txt
@@ -7,15 +7,13 @@
 CONTRIBUTING.md: .ignore
 INSTALL.md: .ignore
 Makefile: CEA_LGPL
-Makefile.distrib: .ignore
 README.md: .ignore
 configure.js: .ignore
+distrib.sh: .ignore
 doc/pandoc/href.lua: .ignore
 doc/pandoc/index.json: .ignore
 doc/pandoc/template.html: .ignore
 electron-webpack.json: .ignore
-headers/header_spec.txt: .ignore
-headers/register.sh: .ignore
 package.json: .ignore
 src/dome/.gitignore: .ignore
 src/dome/CONTRIBUTING.md: .ignore
@@ -93,6 +91,7 @@ src/dome/renderer/controls/gallery.json: .ignore
 src/dome/renderer/controls/icons.tsx: CEA_LGPL
 src/dome/renderer/controls/labels.tsx: CEA_LGPL
 src/dome/renderer/controls/style.css: .ignore
+src/dome/renderer/dark.css: .ignore
 src/dome/renderer/data/compare.ts: CEA_LGPL
 src/dome/renderer/data/json.ts: CEA_LGPL
 src/dome/renderer/data/library.js: CEA_LGPL
@@ -112,15 +111,18 @@ src/dome/renderer/layout/forms.tsx: CEA_LGPL
 src/dome/renderer/layout/grids.js: CEA_LGPL
 src/dome/renderer/layout/splitters.tsx: CEA_LGPL
 src/dome/renderer/layout/style.css: .ignore
+src/dome/renderer/light.css: .ignore
 src/dome/renderer/style.css: .ignore
 src/dome/renderer/table/arrays.ts: CEA_LGPL
 src/dome/renderer/table/models.ts: CEA_LGPL
 src/dome/renderer/table/style.css: .ignore
 src/dome/renderer/table/views.tsx: CEA_LGPL
 src/dome/renderer/text/buffers.ts: CEA_LGPL
+src/dome/renderer/text/dark-code.css: .ignore
 src/dome/renderer/text/editors.tsx: CEA_LGPL
 src/dome/renderer/text/pages.tsx: CEA_LGPL
 src/dome/renderer/text/style.css: .ignore
+src/dome/renderer/themes.tsx: CEA_LGPL
 src/dome/template/Application.js: CEA_LGPL
 src/dome/template/Preferences.js: CEA_LGPL
 src/dome/template/babelrc.json: .ignore
@@ -150,6 +152,7 @@ src/frama-c/kernel/Globals.tsx: CEA_LGPL
 src/frama-c/kernel/History.tsx: CEA_LGPL
 src/frama-c/kernel/Locations.tsx: CEA_LGPL
 src/frama-c/kernel/Messages.tsx: CEA_LGPL
+src/frama-c/kernel/PivotTable-style.css: .ignore
 src/frama-c/kernel/PivotTable.tsx: CEA_LGPL
 src/frama-c/kernel/Properties.tsx: CEA_LGPL
 src/frama-c/kernel/SourceCode.tsx: CEA_LGPL
diff --git a/ivette/headers/register.sh b/ivette/headers/register.sh
deleted file mode 100755
index 264b48847f8afc6e8809da2aa4ab674c5f6c62c9..0000000000000000000000000000000000000000
--- a/ivette/headers/register.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-case "$1" in
-    Makefile.distrib | *.json | src/dome/doc/* | */.eslintrc.js )
-        echo "$1: .ignore"
-        ;;
-    *Make* | src/*/*.js* | src/*/*.ts* | src/*/*.ml*)
-        echo "$1: CEA_LGPL"
-        ;;
-    *)
-        echo "$1: .ignore"
-        ;;
-esac