You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2020/04/03 12:29:08 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2165] installer is converted

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new ed209ab  [OPENMEETINGS-2165] installer is converted
ed209ab is described below

commit ed209abdb2fc5a2d4972037a55a87b660dbb4f82
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Fri Apr 3 19:28:50 2020 +0700

    [OPENMEETINGS-2165] installer is converted
---
 .../web/admin/configurations/ConfigsPanel.html     |   2 +-
 .../web/app/Application.properties.xml             |   2 +-
 .../web/app/Application_ar.properties.xml          |   2 +-
 .../web/app/Application_bg.properties.xml          |   2 +-
 .../web/app/Application_bn.properties.xml          |   2 +-
 .../web/app/Application_ca.properties.xml          |   2 +-
 .../web/app/Application_cs.properties.xml          |   2 +-
 .../web/app/Application_da.properties.xml          |   2 +-
 .../web/app/Application_de.properties.xml          |   2 +-
 .../web/app/Application_el.properties.xml          |   2 +-
 .../web/app/Application_es.properties.xml          |   2 +-
 .../web/app/Application_fa.properties.xml          |   2 +-
 .../web/app/Application_fi.properties.xml          |   2 +-
 .../web/app/Application_fr.properties.xml          |   2 +-
 .../web/app/Application_gl.properties.xml          |   2 +-
 .../web/app/Application_he.properties.xml          |   2 +-
 .../web/app/Application_hu.properties.xml          |   2 +-
 .../web/app/Application_in.properties.xml          |   2 +-
 .../web/app/Application_it.properties.xml          |   2 +-
 .../web/app/Application_ja.properties.xml          |   2 +-
 .../web/app/Application_ko.properties.xml          |   2 +-
 .../web/app/Application_nl.properties.xml          |   2 +-
 .../web/app/Application_pl.properties.xml          |   2 +-
 .../web/app/Application_pt.properties.xml          |   2 +-
 .../web/app/Application_pt_BR.properties.xml       |   2 +-
 .../web/app/Application_ru.properties.xml          |   2 +-
 .../web/app/Application_sk.properties.xml          |   2 +-
 .../web/app/Application_sv.properties.xml          |   2 +-
 .../web/app/Application_th.properties.xml          |   2 +-
 .../web/app/Application_tr.properties.xml          |   2 +-
 .../web/app/Application_uk.properties.xml          |   2 +-
 .../web/app/Application_zh_CN.properties.xml       |   2 +-
 .../web/app/Application_zh_TW.properties.xml       |   2 +-
 .../web/pages/install/InstallWizard$DbStep.html    |  22 +-
 .../pages/install/InstallWizard$ParamsStep1.html   |  42 +--
 .../pages/install/InstallWizard$ParamsStep2.html   | 160 +++++------
 .../pages/install/InstallWizard$ParamsStep3.html   |  96 +++----
 .../pages/install/InstallWizard$ParamsStep4.html   |  69 ++---
 .../web/pages/install/InstallWizard.java           | 295 +++++++++++++--------
 .../web/pages/install/InstallWizardPage.html       |   2 +-
 .../web/pages/install/InstallWizardPage.java       |  11 +-
 openmeetings-web/src/main/webapp/css/raw-admin.css |   2 +-
 .../src/main/webapp/css/raw-general.css            |   4 +
 pom.xml                                            |   2 +-
 44 files changed, 415 insertions(+), 356 deletions(-)

diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
index 17accc1..e79b139 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
@@ -66,7 +66,7 @@
 						<div wicket:id="boolean-box">
 							<label wicket:for="valueB" class="col-3 text-right"><wicket:message key="271" /></label>
 							<div class="onoffswitch">
-								<input type="checkbox" class="onoff-checkbox" wicket:id="valueB">
+								<input type="checkbox" class="onoff-checkbox" wicket:id="valueB"/>
 								<label class="onoff-label" wicket:for="valueB"></label>
 							</div>
 						</div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
index 8e9581a..a0cdff1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
index 007df38..7a5f45a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
index adcdbd1..0cffd4b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
index 73aa4e0..b3ffcab 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
index a901844..6aa3a39 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
index beb5ded..ef76bcb 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
index 3c66292..6c96c95 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
index 3c54727..4b18a7a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			Standardm&auml;&szlig;ig verwendet {0} die integrierte
 			{1} Datenbank. In Produktivumgebungen wird jedoch der Einsatz von {2}, {3}, {4}, {5} or {6} empfohlen.
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
index 43fb9ca..4326b1e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
index e96cdcb..f15cbf4 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			{0} viene predeterminado para emplear la base de datos {1}. Para
 			medios de producción considere emplear {2}, {3}, {4}, {5} u {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
index e0374ab..8807393 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
@@ -715,7 +715,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
index 79b833c..43285d0 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
index 9fa38ea..1e30974 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
@@ -715,7 +715,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			Par défaut {0} utilise la base de données {1}. Dans un environnement de production vous devriez opter pour
 			{2}, {3}, {4}, {5} or {6}.
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
index af8efd0..81379e0 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
index 8e9581a..a0cdff1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
index 130fab4..7daaed6 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
@@ -715,7 +715,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			Az {0} alapértelmezette a beépített {1} adatbázist használja.
 			További lehetőségként használható a {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
index 3ea6048..7dedff6 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_in.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
index 9b0053c..9b5ee8f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			Per default {0} usa il database integrato {1}. Per
 			ambienti di produzione dovresti considerare l'uso di {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
index 171742b..16c27a7 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
@@ -715,7 +715,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			既定では、{0} は組み込み済みデータベース {1} を使用しますが、
 			本番環境では、下記のデータベースの使用をご検討ください: {2}, {3}, {4}, {5}, {6} 
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>注:</strong> 予見し難い DB ログイン名と8文字以上の強固なパスワードを使用してください。</p>
 		</div>
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
index 222c559..3120bb3 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
index e83888c..9eb2051 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
index a16fbe4..8924557 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
index 3188c80..f6be8db 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
index b425e62..0b2a1e5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
index 45d1c1c..ed98304 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			По умолчанию {0} использует интегрированную базу данных {1}. В
 			продакшине Вы должны задуматься об использовании таких баз, как {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>ВНИМАНИЕ</strong> Пожалуйста используйте логин БД, который трудно угадать и 'сложный' пароль с длинной не менее 8 символов.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
index a2edf93..abae8c2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
index 41ffb65..30b0fee 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
index 8ceaa4e..be9aa8f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
index b91e881..f63fa95 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
index dd6d0db..7e50ab8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			По умолчанию {0} использует интегрированную базу данных {1}. В
 			продакшине Вы должны задуматься об использовании таких баз, как {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
index e9ce8ce..317636f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
@@ -714,7 +714,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 		<blockquote>
 			默认 {0} 使用集成 {1} 数据库。对于生产环境,你应该考虑使用 {2},{3},{4},{5} 或 {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
index a514567..4024990 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
@@ -716,7 +716,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 			By default {0} uses the integrated {1} database. For
 			production environment you should consider using {2}, {3}, {4}, {5} or {6}
 		</blockquote>
-		<div class="ui-state-highlight ui-corner-all installer-note">
+		<div class="alert alert-warning" role="alert">
 			<p><strong>NOTE</strong> Please use unpredictable DB login and 'strong' password with length 8 characters or more.</p>
 		</div>
 	]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html
index 7a2a6e4..a0a04d2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html
@@ -21,30 +21,36 @@
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<fieldset class="ui-widget-content" id="userData">
+	<fieldset class="" id="userData">
 		<legend><wicket:message key="install.wizard.db.step.field.title"/></legend>
 		<div wicket:id="note"></div>
 		<form class="adminForm" wicket:id="form">
 			<div class="formelement">
-				<label wicket:for="dbType"><wicket:message key="install.wizard.db.step.dbtype" /></label> <select wicket:id="dbType"></select>
+				<label wicket:for="dbType" class="col-3 text-right"><wicket:message key="install.wizard.db.step.dbtype" /></label>
+				<select wicket:id="dbType" class="custom-select col-3"></select>
 			</div>
 			<div wicket:enclosure="host" class="formelement">
-				<label wicket:for="host"><wicket:message key="install.wizard.db.step.host" /></label> <input type="text" wicket:id="host"/>
+				<label wicket:for="host" class="col-3 text-right"><wicket:message key="install.wizard.db.step.host" /></label>
+				<input type="text" wicket:id="host" class="col-3"/>
 			</div>
 			<div wicket:enclosure="port" class="formelement">
-				<label wicket:for="port"><wicket:message key="install.wizard.db.step.port" /></label> <input type="text" wicket:id="port"/>
+				<label wicket:for="port" class="col-3 text-right"><wicket:message key="install.wizard.db.step.port" /></label>
+				<input type="text" wicket:id="port" class="col-3"/>
 			</div>
 			<div class="formelement">
-				<label wicket:for="dbname"><wicket:message key="install.wizard.db.step.dbname" /></label> <input type="text" wicket:id="dbname"/>
+				<label wicket:for="dbname" class="col-3 text-right"><wicket:message key="install.wizard.db.step.dbname" /></label>
+				<input type="text" wicket:id="dbname" class="col-3"/>
 			</div>
 			<div wicket:enclosure="login" class="formelement">
-				<label wicket:for="login"><wicket:message key="install.wizard.db.step.user" /></label> <input type="text" wicket:id="login"/>
+				<label wicket:for="login" class="col-3 text-right"><wicket:message key="install.wizard.db.step.user" /></label>
+				<input type="text" wicket:id="login" class="col-3"/>
 			</div>
 			<div wicket:enclosure="password" class="formelement">
-				<label wicket:for="password"><wicket:message key="install.wizard.db.step.pass" /></label> <input type="text" wicket:id="password"/>
+				<label wicket:for="password" class="col-3 text-right"><wicket:message key="install.wizard.db.step.pass" /></label>
+				<input type="text" wicket:id="password" class="col-3"/>
 			</div>
 			<div class="formelement">
-				<button class="align-right" wicket:id="check"><wicket:message key="install.wizard.db.step.check"/></button>
+				<button class="align-right" wicket:id="check"></button>
 			</div>
 		</form>
 	</fieldset>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html
index 1c70b00..b3ab90c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html
@@ -21,29 +21,31 @@
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<fieldset class="ui-widget-content" id="userData">
+	<fieldset class="" id="userData">
 		<legend><wicket:message key="install.wizard.params.step1.userdata"/></legend>
-		<ul class="paramList">
-			<li><label wicket:for="username"><wicket:message key="install.wizard.params.step1.username"/></label>
-				<input wicket:id="username" wicket:message="title:install.wizard.params.step1.username.title" type="text" />
-			</li>
-			<li><label wicket:for="password"><wicket:message key="install.wizard.params.step1.password"/></label>
-				<input wicket:id="password" wicket:message="title:install.wizard.params.step1.password.title" type="password" />
-			</li>
-			<li><label wicket:for="email"><wicket:message key="install.wizard.params.step1.email"/></label>
-				<input wicket:id="email" wicket:message="title:install.wizard.params.step1.email.title" type="text" />
-			</li>
-			<li><label wicket:for="timeZone"><wicket:message key="install.wizard.params.step1.tz"/></label>
-				<select wicket:id="timeZone"></select>
-			</li>
-		</ul>
+		<div class="formelement">
+			<label wicket:for="username" class="col-3 text-right"><wicket:message key="install.wizard.params.step1.username"/></label>
+			<input wicket:id="username" wicket:message="title:install.wizard.params.step1.username.title" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="password" class="col-3 text-right"><wicket:message key="install.wizard.params.step1.password"/></label>
+			<input wicket:id="password" wicket:message="title:install.wizard.params.step1.password.title" type="password" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="email" class="col-3 text-right"><wicket:message key="install.wizard.params.step1.email"/></label>
+			<input wicket:id="email" wicket:message="title:install.wizard.params.step1.email.title" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="timeZone" class="col-3 text-right"><wicket:message key="install.wizard.params.step1.tz"/></label>
+			<select wicket:id="timeZone" class="custom-select col-3"></select>
+		</div>
 	</fieldset>
-	<fieldset class="ui-widget-content" id="userGroupa">
+	<fieldset class="" id="userGroupa">
 		<legend><wicket:message key="install.wizard.params.step1.groupdata"/></legend>
-		<ul class="paramList">
-			<li><label wicket:for="group"><wicket:message key="install.wizard.params.step1.group"/></label>
-				<input wicket:id="group" wicket:message="title:install.wizard.params.step1.group.title" type="text" /></li>
-		</ul>
+		<div class="formelement">
+			<label wicket:for="group" class="col-3 text-right"><wicket:message key="install.wizard.params.step1.group"/></label>
+			<input wicket:id="group" wicket:message="title:install.wizard.params.step1.group.title" type="text" class="col-3"/>
+		</div>
 	</fieldset>
 </wicket:panel>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html
index 9e8d228..5f2a98e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html
@@ -21,100 +21,74 @@
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<fieldset class="ui-widget-content" id="userConf">
+	<fieldset class="" id="userConf">
 		<legend><wicket:message key="install.wizard.params.step2.configuration"/></legend>
-		<ul class="paramList">
-			<li><label wicket:for="allowFrontendRegister"><wicket:message key="install.wizard.params.step2.allowFrontendRegister"/></label>
-				<div class="onoffswitch">
-					<input type="checkbox" class="onoffswitch-checkbox" wicket:id="allowFrontendRegister">
-					<label class="onoffswitch-label" wicket:for="allowFrontendRegister">
-						<span class="onoffswitch-inner">
-							<span class="before"></span>
-							<span class="after"></span>
-						</span>
-						<span class="onoffswitch-switch"></span>
-					</label>
-				</div>
-			</li>
-			<li><label wicket:for="sendEmailAtRegister"><wicket:message key="install.wizard.params.step2.sendEmailAtRegister"/></label>
-				<div class="onoffswitch">
-					<input type="checkbox" class="onoffswitch-checkbox" wicket:id="sendEmailAtRegister">
-					<label class="onoffswitch-label" wicket:for="sendEmailAtRegister">
-						<span class="onoffswitch-inner">
-							<span class="before"></span>
-							<span class="after"></span>
-						</span>
-						<span class="onoffswitch-switch"></span>
-					</label>
-				</div>
-			</li>
-			<li><label wicket:for="sendEmailWithVerficationCode"><wicket:message key="install.wizard.params.step2.sendEmailWithVerficationCode"/></label>
-				<div class="onoffswitch">
-					<input type="checkbox" class="onoffswitch-checkbox" wicket:id="sendEmailWithVerficationCode">
-					<label class="onoffswitch-label" wicket:for="sendEmailWithVerficationCode">
-						<span class="onoffswitch-inner">
-							<span class="before"></span>
-							<span class="after"></span>
-						</span>
-						<span class="onoffswitch-switch"></span>
-					</label>
-				</div>
-			</li>
-			<li><label wicket:for="createDefaultObjects"><wicket:message key="install.wizard.params.step2.createDefaultObjects"/></label>
-				<div class="onoffswitch">
-					<input type="checkbox" class="onoffswitch-checkbox" wicket:id="createDefaultObjects">
-					<label class="onoffswitch-label" wicket:for="createDefaultObjects">
-						<span class="onoffswitch-inner">
-							<span class="before"></span>
-							<span class="after"></span>
-						</span>
-						<span class="onoffswitch-switch"></span>
-					</label>
-				</div>
-			</li>
-			<li><label wicket:for="mailReferer"><wicket:message key="install.wizard.params.step2.mailReferer"/></label>
-				<input wicket:id="mailReferer" wicket:message="title:install.wizard.params.step2.mailReferer.title" type="text" />
-			</li>
-			<li><label wicket:for="smtpServer"><wicket:message key="install.wizard.params.step2.smtpServer"/></label>
-				<input wicket:id="smtpServer" wicket:message="title:install.wizard.params.step2.smtpServer.title" type="text" />
-			</li>
-			<li><label wicket:for="smtpPort"><wicket:message key="install.wizard.params.step2.smtpPort"/></label>
-				<input wicket:id="smtpPort" wicket:message="title:install.wizard.params.step2.smtpPort.title" type="text" />
-			</li>
-			<li><label wicket:for="mailAuthName"><wicket:message key="install.wizard.params.step2.mailAuthName"/></label>
-				<input wicket:id="mailAuthName" wicket:message="title:install.wizard.params.step2.mailAuthName.title" type="text" />
-			</li>
-			<li><label wicket:for="mailAuthPass"><wicket:message key="install.wizard.params.step2.mailAuthPass"/></label>
-				<input wicket:id="mailAuthPass" wicket:message="title:install.wizard.params.step2.mailAuthPass.title" type="password" />
-			</li>
-			<li><label wicket:for="mailUseTls"><wicket:message key="install.wizard.params.step2.mailUseTls"/></label>
-				<div class="onoffswitch">
-					<input type="checkbox" class="onoffswitch-checkbox" wicket:id="mailUseTls">
-					<label class="onoffswitch-label" wicket:for="mailUseTls">
-						<span class="onoffswitch-inner">
-							<span class="before"></span>
-							<span class="after"></span>
-						</span>
-						<span class="onoffswitch-switch"></span>
-					</label>
-				</div>
-			</li>
-			<li><label wicket:for="replyToOrganizer"><wicket:message key="install.wizard.params.step2.replyToOrganizer"/></label>
-				<div class="onoffswitch">
-					<input type="checkbox" class="onoffswitch-checkbox" wicket:id="replyToOrganizer">
-					<label class="onoffswitch-label" wicket:for="replyToOrganizer">
-						<span class="onoffswitch-inner">
-							<span class="before"></span>
-							<span class="after"></span>
-						</span>
-						<span class="onoffswitch-switch"></span>
-					</label>
-				</div>
-			</li>
-			<li><label wicket:for="defaultLangId"><wicket:message key="install.wizard.params.step2.defaultLangId"/></label>
-				<select wicket:id="defaultLangId"></select>
-			</li>
-		</ul>
+		<div class="formelement">
+			<label wicket:for="allowFrontendRegister" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.allowFrontendRegister"/></label>
+			<div class="onoffswitch">
+				<input type="checkbox" class="onoff-checkbox" wicket:id="allowFrontendRegister"/>
+				<label class="onoff-label" wicket:for="allowFrontendRegister"></label>
+			</div>
+		</div>
+		<div class="formelement">
+			<label wicket:for="sendEmailAtRegister" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.sendEmailAtRegister"/></label>
+			<div class="onoffswitch">
+				<input type="checkbox" class="onoff-checkbox" wicket:id="sendEmailAtRegister"/>
+				<label class="onoff-label" wicket:for="sendEmailAtRegister"></label>
+			</div>
+		</div>
+		<div class="formelement">
+			<label wicket:for="sendEmailWithVerficationCode" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.sendEmailWithVerficationCode"/></label>
+			<div class="onoffswitch">
+				<input type="checkbox" class="onoff-checkbox" wicket:id="sendEmailWithVerficationCode"/>
+				<label class="onoff-label" wicket:for="sendEmailWithVerficationCode"></label>
+			</div>
+		</div>
+		<div class="formelement">
+			<label wicket:for="createDefaultObjects" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.createDefaultObjects"/></label>
+			<div class="onoffswitch">
+				<input type="checkbox" class="onoff-checkbox" wicket:id="createDefaultObjects"/>
+				<label class="onoff-label" wicket:for="createDefaultObjects"></label>
+			</div>
+		</div>
+		<div class="formelement">
+			<label wicket:for="mailReferer" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.mailReferer"/></label>
+			<input wicket:id="mailReferer" wicket:message="title:install.wizard.params.step2.mailReferer.title" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="smtpServer" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.smtpServer"/></label>
+			<input wicket:id="smtpServer" wicket:message="title:install.wizard.params.step2.smtpServer.title" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="smtpPort" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.smtpPort"/></label>
+			<input wicket:id="smtpPort" wicket:message="title:install.wizard.params.step2.smtpPort.title" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="mailAuthName" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.mailAuthName"/></label>
+			<input wicket:id="mailAuthName" wicket:message="title:install.wizard.params.step2.mailAuthName.title" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="mailAuthPass" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.mailAuthPass"/></label>
+			<input wicket:id="mailAuthPass" wicket:message="title:install.wizard.params.step2.mailAuthPass.title" type="password" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="mailUseTls" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.mailUseTls"/></label>
+			<div class="onoffswitch">
+				<input type="checkbox" class="onoff-checkbox" wicket:id="mailUseTls"/>
+				<label class="onoff-label" wicket:for="mailUseTls"></label>
+			</div>
+		</div>
+		<div class="formelement">
+			<label wicket:for="replyToOrganizer" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.replyToOrganizer"/></label>
+			<div class="onoffswitch">
+				<input type="checkbox" class="onoff-checkbox" wicket:id="replyToOrganizer"/>
+				<label class="onoff-label" wicket:for="replyToOrganizer"></label>
+			</div>
+		</div>
+		<div class="formelement">
+			<label wicket:for="defaultLangId" class="col-3 text-right"><wicket:message key="install.wizard.params.step2.defaultLangId"/></label>
+			<select wicket:id="defaultLangId" class="custom-select col-3"></select>
+		</div>
 	</fieldset>
 </wicket:panel>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
index fa29e07..fd0087c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
@@ -21,53 +21,57 @@
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<fieldset class="ui-widget-content" id="userConf1">
+	<fieldset class="" id="userConf1">
 		<legend><wicket:message key="install.wizard.params.step3.converters"/></legend>
-		<ul class="paramList">
-			<li><label wicket:for="docDpi"><wicket:message key="install.wizard.params.step3.docDpi"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step3.docDpi.text,alt:install.wizard.params.step3.docDpi.text"></span>
-				</label>
-				<input wicket:id="docDpi" wicket:message="title:install.wizard.params.step3.docDpi.title" type="text" />
-			</li>
-			<li><label wicket:for="docQuality"><wicket:message key="install.wizard.params.step3.docQuality"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step3.docQuality.text,alt:install.wizard.params.step3.docQuality.text"></span>
-				</label>
-				<input wicket:id="docQuality" wicket:message="title:install.wizard.params.step3.docQuality.title" type="text" />
-			</li>
-			<li><label wicket:for="imageMagicPath"><wicket:message key="install.wizard.params.step3.imageMagicPath"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step3.imageMagicPath.text,alt:install.wizard.params.step3.imageMagicPath.text"></span>
-				</label>
-				<input wicket:id="imageMagicPath" wicket:message="title:install.wizard.params.step3.imageMagicPath.title" type="text" />
-				<button class="formelement" wicket:id="validateImageMagic"><wicket:message key="install.wizard.db.step.check"/></button>
-			</li>
-			<li><label wicket:for="ffmpegPath"><wicket:message key="install.wizard.params.step3.ffmpegPath"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step3.ffmpegPath.text,alt:install.wizard.params.step3.ffmpegPath.text"></span>
-				</label>
-				<input wicket:id="ffmpegPath" wicket:message="title:install.wizard.params.step3.ffmpegPath.title" type="text" />
-				<button class="formelement" wicket:id="validateFfmpeg"><wicket:message key="install.wizard.db.step.check"/></button>
-			</li>
-			<li><label wicket:for="soxPath"><wicket:message key="install.wizard.params.step3.soxPath"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step3.soxPath.text,alt:install.wizard.params.step3.soxPath.text"></span>
-				</label>
-				<input wicket:id="soxPath" wicket:message="title:install.wizard.params.step3.soxPath.title" type="text" />
-				<button class="formelement" wicket:id="validateSox"><wicket:message key="install.wizard.db.step.check"/></button>
-			</li>
-			<li><label wicket:for="officePath"><wicket:message key="install.wizard.params.step3.officePath"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step3.officePath.text,alt:install.wizard.params.step3.officePath.text"></span>
-				</label>
-				<input wicket:id="officePath" wicket:message="title:install.wizard.params.step3.officePath.title" type="text" />
-				<button class="formelement" wicket:id="validateOffice"><wicket:message key="install.wizard.db.step.check"/></button>
-			</li>
-			<li>
-				<p>
-					<em>
-						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
-						href="https://openmeetings.apache.org/installation.html"
-						rel="noopener noreferrer" target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
-					</em>
-				</p>
-			</li>
-		</ul>
+		<div class="formelement">
+			<label wicket:for="docDpi" class="col-3 text-right"><wicket:message key="install.wizard.params.step3.docDpi"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step3.docDpi.text,alt:install.wizard.params.step3.docDpi.text"></i>
+			</label>
+			<input wicket:id="docDpi" wicket:message="title:install.wizard.params.step3.docDpi.title" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="docQuality" class="col-3 text-right"><wicket:message key="install.wizard.params.step3.docQuality"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step3.docQuality.text,alt:install.wizard.params.step3.docQuality.text"></i>
+			</label>
+			<input wicket:id="docQuality" wicket:message="title:install.wizard.params.step3.docQuality.title" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="imageMagicPath" class="col-3 text-right"><wicket:message key="install.wizard.params.step3.imageMagicPath"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step3.imageMagicPath.text,alt:install.wizard.params.step3.imageMagicPath.text"></i>
+			</label>
+			<input wicket:id="imageMagicPath" wicket:message="title:install.wizard.params.step3.imageMagicPath.title" type="text" class="col-3"/>
+			<button class="formelement" wicket:id="validateImageMagic"></button>
+		</div>
+		<div class="formelement">
+			<label wicket:for="ffmpegPath" class="col-3 text-right"><wicket:message key="install.wizard.params.step3.ffmpegPath"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step3.ffmpegPath.text,alt:install.wizard.params.step3.ffmpegPath.text"></i>
+			</label>
+			<input wicket:id="ffmpegPath" wicket:message="title:install.wizard.params.step3.ffmpegPath.title" type="text" class="col-3"/>
+			<button class="formelement" wicket:id="validateFfmpeg"></button>
+		</div>
+		<div class="formelement">
+			<label wicket:for="soxPath" class="col-3 text-right"><wicket:message key="install.wizard.params.step3.soxPath"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step3.soxPath.text,alt:install.wizard.params.step3.soxPath.text"></i>
+			</label>
+			<input wicket:id="soxPath" wicket:message="title:install.wizard.params.step3.soxPath.title" type="text" class="col-3"/>
+			<button class="formelement" wicket:id="validateSox"></button>
+		</div>
+		<div class="formelement">
+			<label wicket:for="officePath" class="col-3 text-right"><wicket:message key="install.wizard.params.step3.officePath"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step3.officePath.text,alt:install.wizard.params.step3.officePath.text"></i>
+			</label>
+			<input wicket:id="officePath" wicket:message="title:install.wizard.params.step3.officePath.title" type="text" class="col-3"/>
+			<button class="formelement" wicket:id="validateOffice"></button>
+		</div>
+		<div class="formelement">
+			<p>
+				<em>
+					<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+					href="https://openmeetings.apache.org/installation.html"
+					rel="noopener noreferrer" target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+				</em>
+			</p>
+		</div>
 	</fieldset>
 </wicket:panel>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html
index b2f9976..056c454 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html
@@ -21,49 +21,38 @@
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<fieldset class="ui-widget-content" id="userConf2">
+	<fieldset class="" id="userConf2">
 		<legend><wicket:message key="install.wizard.params.step4.crypt"/></legend>
-		<ul class="paramList">
-			<li>
-				<label wicket:for="cryptClassName"><wicket:message key="install.wizard.params.step4.cryptClassName"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step4.cryptClassName.text,alt:install.wizard.params.step4.cryptClassName.text"></span>
-				</label>
-				<input wicket:id="cryptClassName" type="text"
-					wicket:message="title:install.wizard.params.step4.cryptClassName.title" />
-			</li>
-		</ul>
+		<div class="formelement">
+			<label wicket:for="cryptClassName" class="col-3 text-right"><wicket:message key="install.wizard.params.step4.cryptClassName"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step4.cryptClassName.text,alt:install.wizard.params.step4.cryptClassName.text"></i>
+			</label>
+			<input wicket:id="cryptClassName" type="text" wicket:message="title:install.wizard.params.step4.cryptClassName.title" class="col-3"/>
+		</div>
 	</fieldset>
-	<fieldset class="ui-widget-content" id="sip">
+	<fieldset class="" id="sip">
 		<legend><wicket:message key="install.wizard.params.step4.sip"/></legend>
-		<ul class="paramList">
-			<li>
-				<label wicket:for="sipEnable"><wicket:message key="install.wizard.params.step4.sipEnable"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step4.sipEnable.text,alt:install.wizard.params.step4.sipEnable.text"></span>
-				</label>
-				<div class="onoffswitch">
-					<input type="checkbox" class="onoffswitch-checkbox" wicket:id="sipEnable">
-					<label class="onoffswitch-label" wicket:for="sipEnable">
-						<span class="onoffswitch-inner">
-							<span class="before"></span>
-							<span class="after"></span>
-						</span>
-						<span class="onoffswitch-switch"></span>
-					</label>
-				</div>
-			</li>
-			<li>
-				<label wicket:for="sipRoomPrefix"><wicket:message key="install.wizard.params.step4.sipRoomPrefix"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step4.sipRoomPrefix.text,alt:install.wizard.params.step4.sipRoomPrefix.text"></span>
-				</label>
-				<input wicket:id="sipRoomPrefix" type="text" />
-			</li>
-			<li>
-				<label wicket:for="sipExtenContext"><wicket:message key="install.wizard.params.step4.sipExtenContext"/>
-					<span class="info-title" wicket:message="title:install.wizard.params.step4.sipExtenContext.text,alt:install.wizard.params.step4.sipExtenContext.text"></span>
-				</label>
-				<input wicket:id="sipExtenContext" type="text" />
-			</li>
-		</ul>
+		<div class="formelement">
+			<label wicket:for="sipEnable" class="col-3 text-right"><wicket:message key="install.wizard.params.step4.sipEnable"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step4.sipEnable.text,alt:install.wizard.params.step4.sipEnable.text"></i>
+			</label>
+			<div class="onoffswitch">
+				<input type="checkbox" class="onoff-checkbox" wicket:id="sipEnable"/>
+				<label class="onoff-label" wicket:for="sipEnable"></label>
+			</div>
+		</div>
+		<div class="formelement">
+			<label wicket:for="sipRoomPrefix" class="col-3 text-right"><wicket:message key="install.wizard.params.step4.sipRoomPrefix"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step4.sipRoomPrefix.text,alt:install.wizard.params.step4.sipRoomPrefix.text"></i>
+			</label>
+			<input wicket:id="sipRoomPrefix" type="text" class="col-3"/>
+		</div>
+		<div class="formelement">
+			<label wicket:for="sipExtenContext" class="col-3 text-right"><wicket:message key="install.wizard.params.step4.sipExtenContext"/>
+				<i class="fas fa-info-circle m-1 text-info" wicket:message="title:install.wizard.params.step4.sipExtenContext.text,alt:install.wizard.params.step4.sipExtenContext.text"></i>
+			</label>
+			<input wicket:id="sipExtenContext" type="text" class="col-3"/>
+		</div>
 	</fieldset>
 </wicket:panel>
 </html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
index 4794015..30af522 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
@@ -54,15 +54,22 @@ import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.ErrorMessagePanel;
 import org.apache.openmeetings.web.common.OmLabel;
-import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.extensions.wizard.IWizard;
+import org.apache.wicket.extensions.wizard.WizardButton;
+import org.apache.wicket.extensions.wizard.WizardButtonBar;
 import org.apache.wicket.extensions.wizard.dynamic.DynamicWizardModel;
 import org.apache.wicket.extensions.wizard.dynamic.DynamicWizardStep;
 import org.apache.wicket.extensions.wizard.dynamic.IDynamicWizardStep;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
@@ -76,6 +83,7 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
@@ -83,37 +91,50 @@ import org.slf4j.LoggerFactory;
 import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
 import org.springframework.web.context.support.XmlWebApplicationContext;
 
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
 import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
-import com.googlecode.wicket.jquery.ui.form.button.IndicatingAjaxButton;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
 import com.googlecode.wicket.jquery.ui.widget.tooltip.TooltipBehavior;
-import com.googlecode.wicket.jquery.ui.widget.wizard.AbstractWizard;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.BootstrapAjaxButton;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.ButtonBehavior;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
+import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons.Type;
 import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+import de.agilecoders.wicket.core.markup.html.bootstrap.components.progress.UpdatableProgressBar;
+import de.agilecoders.wicket.core.markup.html.bootstrap.utilities.BackgroundColorBehavior;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.spinner.SpinnerAjaxButton;
+import de.agilecoders.wicket.extensions.wizard.BootstrapWizard;
 
-public class InstallWizard extends AbstractWizard<InstallationConfig> {
+public class InstallWizard extends BootstrapWizard {
 	private static final long serialVersionUID = 1L;
 	private static final Logger log = LoggerFactory.getLogger(InstallWizard.class);
-	private final IDynamicWizardStep welcomeStep;
-	private final IDynamicWizardStep dbStep;
-	private final ParamsStep1 paramsStep1;
-	private final IDynamicWizardStep paramsStep2;
-	private final IDynamicWizardStep paramsStep3;
-	private final IDynamicWizardStep paramsStep4;
-	private final InstallStep installStep;
+	private IDynamicWizardStep welcomeStep;
+	private IDynamicWizardStep dbStep;
+	private ParamsStep1 paramsStep1;
+	private IDynamicWizardStep paramsStep2;
+	private IDynamicWizardStep paramsStep3;
+	private IDynamicWizardStep paramsStep4;
+	private InstallStep installStep;
 	private Throwable th = null;
 	private DbType initDbType = null;
 	private DbType dbType = null;
+	private NotificationPanel feedback;
+	private final CompoundPropertyModel<InstallationConfig> model;
+	private final List<Button> buttons = new ArrayList<>(4);
+
 	@SpringBean
 	private ImportInitvalues initvalues;
 
 	//onInit, applyState
 	public InstallWizard(String id, String title) {
-		super(id, title, new CompoundPropertyModel<>(new InstallationConfig()), true);
-		setTitle(Model.of(getModelObject().getAppName()));
+		super(id);
+		setOutputMarkupPlaceholderTag(true);
+		setOutputMarkupId(true);
+		model = new CompoundPropertyModel<>(new InstallationConfig());
+		setDefaultModel(model);
+	}
+
+	@Override
+	protected void onInitialize() {
 		welcomeStep = new WelcomeStep();
 		dbStep = new DbStep();
 		paramsStep1 = new ParamsStep1();
@@ -121,11 +142,12 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 		paramsStep3 = new ParamsStep3();
 		paramsStep4 = new ParamsStep4();
 		installStep = new InstallStep();
-
 		DynamicWizardModel wmodel = new DynamicWizardModel(welcomeStep);
 		wmodel.setCancelVisible(false);
 		wmodel.setLastVisible(true);
 		init(wmodel);
+
+		super.onInitialize();
 	}
 
 	public void initTzDropDown() {
@@ -133,32 +155,73 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 	}
 
 	@Override
-	public void onConfigure(JQueryBehavior behavior) {
-		super.onConfigure(behavior);
-		behavior.setOption("closeOnEscape", false);
-		behavior.setOption("classes", "{'ui-dialog-titlebar': 'ui-corner-all no-close'}");
-	}
-
-	@Override
-	public boolean isResizable() {
-		return false;
-	}
-
-	@Override
 	protected WebMarkupContainer newFeedbackPanel(String id) {
-		NotificationPanel feedback = new NotificationPanel("feedback");
+		feedback = (NotificationPanel)super.newFeedbackPanel(id);
 		feedback.setEscapeModelStrings(false).setOutputMarkupId(true);
 		return feedback;
 	}
 
 	@Override
-	public int getWidth() {
-		return 1000;
-	}
+	protected Component newButtonBar(String id) {
+		return new WizardButtonBar(id, this) {
+			private static final long serialVersionUID = 1L;
 
-	@Override
-	protected boolean closeOnFinish() {
-		return false;
+			@Override
+			protected WizardButton newCancelButton(String id, IWizard wizard) {
+				WizardButton button = super.newCancelButton(id, wizard);
+				button.add(new ButtonBehavior(Type.Outline_Warning, Buttons.Size.Medium));
+				return button;
+			}
+
+			@Override
+			protected WizardButton newFinishButton(String id, IWizard wizard) {
+				WizardButton button = super.newFinishButton(id, wizard);
+				button.add(new ButtonBehavior(Type.Outline_Success, Buttons.Size.Medium));
+				button.add(new AjaxFormSubmitBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+
+					@Override
+					protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+						super.updateAjaxAttributes(attributes);
+
+						// do not allow normal form submit to happen
+						attributes.setPreventDefault(true);
+					}
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target) {
+						button.onSubmit();
+					}
+				});
+				buttons.add(button);
+				return button;
+			}
+
+			@Override
+			protected WizardButton newLastButton(String id, IWizard wizard) {
+				WizardButton button = super.newLastButton(id, wizard);
+				button.add(new ButtonBehavior(Type.Outline_Secondary, Buttons.Size.Medium));
+				buttons.add(button);
+				return button;
+			}
+
+			@Override
+			protected WizardButton newNextButton(String id, IWizard wizard) {
+				WizardButton button = super.newNextButton(id, wizard);
+				button.add(new ButtonBehavior(Type.Outline_Secondary, Buttons.Size.Medium));
+				buttons.add(button);
+				return button;
+			}
+
+			@Override
+			protected WizardButton newPreviousButton(String id, IWizard wizard) {
+				WizardButton button = super.newPreviousButton(id, wizard);
+				button.add(new ButtonBehavior(Type.Outline_Secondary, Buttons.Size.Medium));
+				buttons.add(button);
+				return button;
+			}
+		};
 	}
 
 	private abstract class BaseStep extends DynamicWizardStep {
@@ -166,13 +229,13 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 
 		public BaseStep(IDynamicWizardStep prev) {
 			super(prev);
-			setSummaryModel(Model.of(""));
 		}
 
 		@Override
 		protected void onInitialize() {
 			super.onInitialize();
-			InstallWizard.this.setTitle(Model.of(getModelObject().getAppName() + " - " + getString("install.wizard.install.header")));
+			setSummaryModel(Model.of(""));
+			setTitleModel(Model.of(model.getObject().getAppName() + " - " + getString("install.wizard.install.header")));
 		}
 	}
 
@@ -231,22 +294,22 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 
 					@Override
 					protected void onUpdate(AjaxRequestTarget target) {
-						target.add(getFeedbackPanel());
+						target.add(feedback);
 						initForm(true, target);
 					}
 				}));
 				add(host, port, dbname, user, pass);
-				add(new IndicatingAjaxButton("check") {
+				add(new SpinnerAjaxButton("check", new ResourceModel("install.wizard.db.step.check"), Buttons.Type.Outline_Primary) {
 					private static final long serialVersionUID = 1L;
 
 					@Override
 					protected void onSubmit(AjaxRequestTarget target) {
-						target.add(getFeedbackPanel());
+						target.add(feedback);
 					}
 
 					@Override
 					protected void onError(AjaxRequestTarget target) {
-						target.add(getFeedbackPanel());
+						target.add(feedback);
 					}
 				});
 			}
@@ -319,9 +382,6 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 
 		public DbStep() {
 			super(welcomeStep);
-			add(form.setOutputMarkupId(true));
-			initDbType = form.getModelObject().getDbType();
-			initForm(false, null);
 		}
 
 		private ConnectionProperties getProps(DbType type) {
@@ -393,7 +453,10 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 		@Override
 		protected void onInitialize() {
 			super.onInitialize();
-			add(new OmLabel("note", "install.wizard.db.step.note", getModelObject().getAppName(), getString("install.wizard.db.step.instructions.h2")
+			add(form.setOutputMarkupId(true));
+			initDbType = form.getModelObject().getDbType();
+			initForm(false, null);
+			add(new OmLabel("note", "install.wizard.db.step.note", model.getObject().getAppName(), getString("install.wizard.db.step.instructions.h2")
 					, getString("install.wizard.db.step.instructions.mysql"), getString("install.wizard.db.step.instructions.postgresql")
 					, getString("install.wizard.db.step.instructions.db2"), getString("install.wizard.db.step.instructions.mssql")
 					, getString("install.wizard.db.step.instructions.oracle")).setEscapeModelStrings(false));
@@ -412,16 +475,16 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 
 	private final class ParamsStep1 extends BaseStep {
 		private static final long serialVersionUID = 1L;
-		private final TzDropDown tzDropDown;
+		private final TzDropDown tzDropDown = new TzDropDown("timeZone");
 
 		public ParamsStep1() {
 			super(dbStep);
-			add(tzDropDown = new TzDropDown("timeZone"));
 		}
 
 		@Override
 		protected void onInitialize() {
 			super.onInitialize();
+			add(tzDropDown);
 			add(new RequiredTextField<String>("username").setLabel(new ResourceModel("install.wizard.params.step1.username")).add(minimumLength(USER_LOGIN_MINIMUM_LENGTH)));
 			add(new PasswordTextField("password")
 					.setResetPassword(false).setLabel(new ResourceModel("install.wizard.params.step1.password"))
@@ -456,6 +519,11 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 
 		public ParamsStep2() {
 			super(paramsStep1);
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
 			add(new CheckBox("allowFrontendRegister"));
 			add(new CheckBox("sendEmailAtRegister"));
 			add(new CheckBox("sendEmailWithVerficationCode"));
@@ -509,40 +577,40 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 			add(officePath.setLabel(new ResourceModel("install.wizard.params.step3.officePath")));
 			add(new TextField<Integer>("docDpi").setRequired(true).add(range(50, 600)));
 			add(new TextField<Integer>("docQuality").setRequired(true).add(range(1, 100)));
-			add(new AjaxButton("validateImageMagic") {
+			add(new BootstrapAjaxButton("validateImageMagic", new ResourceModel("install.wizard.db.step.check"), Buttons.Type.Outline_Primary) {
 				private static final long serialVersionUID = 1L;
 
 				@Override
 				protected void onSubmit(AjaxRequestTarget target) {
 					checkMagicPath();
-					target.add(getFeedbackPanel());
+					target.add(feedback);
 				}
 			});
-			add(new AjaxButton("validateFfmpeg") {
+			add(new BootstrapAjaxButton("validateFfmpeg", new ResourceModel("install.wizard.db.step.check"), Buttons.Type.Outline_Primary) {
 				private static final long serialVersionUID = 1L;
 				@Override
 				protected void onSubmit(AjaxRequestTarget target) {
 					checkFfmpegPath();
-					target.add(getFeedbackPanel());
+					target.add(feedback);
 				}
 			});
-			add(new AjaxButton("validateSox") {
+			add(new BootstrapAjaxButton("validateSox", new ResourceModel("install.wizard.db.step.check"), Buttons.Type.Outline_Primary) {
 				private static final long serialVersionUID = 1L;
 				@Override
 				protected void onSubmit(AjaxRequestTarget target) {
 					checkSoxPath();
-					target.add(getFeedbackPanel());
+					target.add(feedback);
 				}
 			});
-			add(new AjaxButton("validateOffice") {
+			add(new BootstrapAjaxButton("validateOffice", new ResourceModel("install.wizard.db.step.check"), Buttons.Type.Outline_Primary) {
 				private static final long serialVersionUID = 1L;
 				@Override
 				protected void onSubmit(AjaxRequestTarget target) {
 					checkOfficePath();
-					target.add(getFeedbackPanel());
+					target.add(feedback);
 				}
 			});
-			add(new TooltipBehavior(".info-title"));
+			add(new TooltipBehavior(".text-info"));
 		}
 
 		private void reportSuccess(TextField<String> path) {
@@ -632,6 +700,11 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 
 		public ParamsStep4() {
 			super(paramsStep3);
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
 			add(new RequiredTextField<String>("cryptClassName")); //Validate class
 
 			add(new CheckBox("sipEnable"));
@@ -639,7 +712,7 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 			add(new TextField<String>("sipExtenContext"));
 			Options options = new Options();
 			options.set("content", "function () { return $(this).prop('title'); }");
-			add(new TooltipBehavior(".info-title", options));
+			add(new TooltipBehavior(".text-info", options));
 		}
 
 		@Override
@@ -665,68 +738,72 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 
 	private final class InstallStep extends BaseStep {
 		private static final long serialVersionUID = 1L;
-		private final CongratulationsPanel congrat;
+		private final CongratulationsPanel congrat = new CongratulationsPanel("status");
 		private final WebMarkupContainer container = new WebMarkupContainer("container");
-		private final AbstractAjaxTimerBehavior timer;
-		private final ProgressBar progressBar;
-		private final Label desc = new Label("desc", "");
-		private boolean started = false;
-
-		public InstallStep() {
-			super(paramsStep4);
+		private final UpdatableProgressBar progressBar = new UpdatableProgressBar("progress", new Model<>(0), BackgroundColorBehavior.Color.Info, true) {
+			private static final long serialVersionUID = 1L;
 
-			// Timer //
-			container.add(timer = new AbstractAjaxTimerBehavior(Duration.ofSeconds(1)) {
-				private static final long serialVersionUID = 1L;
+			@Override
+			protected IModel<Integer> newValue() {
+				return Model.of(initvalues.getProgress());
+			}
 
-				@Override
-				protected void onTimer(AjaxRequestTarget target) {
-					if (!started) {
-						timer.stop(target);
-						return;
-					}
-					if (th != null) {
-						timer.stop(target);
-						progressBar.setVisible(false);
-						target.add(container.replace(new ErrorMessagePanel("status", getString("install.wizard.install.failed"), th))
-							, desc.setVisible(false)
-							);
-					} else {
-						progressBar.setModelObject(initvalues.getProgress());
-						progressBar.refresh(target);
-					}
+			@Override
+			protected void onPostProcessTarget(IPartialPageRequestHandler target) {
+				if (!started) {
+					stop(target);
+					return;
 				}
-			});
-			container.add(progressBar = new ProgressBar("progress", new Model<>(0)) {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onComplete(AjaxRequestTarget target) {
-					timer.stop(target);
+				if (th != null) {
+					stop(target);
 					progressBar.setVisible(false);
-					congrat.show(initDbType != dbType);
-					target.add(container, desc.setVisible(false));
+					target.add(container.replace(new ErrorMessagePanel("status", getString("install.wizard.install.failed"), th))
+						, desc.setVisible(false)
+						);
+				} else {
+					//onComplete(target);
 				}
-			});
+				super.onPostProcessTarget(target);
+			}
 
-			container.add(congrat = new CongratulationsPanel("status"));
-			congrat.setVisible(false);
+			@Override
+			protected void onComplete(IPartialPageRequestHandler target) {
+				stop(target);
+				progressBar.setVisible(false);
+				congrat.show(initDbType != dbType);
+				target.add(container, desc.setVisible(false));
+			}
+		};
+		private final Label desc = new Label("desc", "");
+		private boolean started = false;
 
-			add(container.setOutputMarkupId(true));
+		public InstallStep() {
+			super(paramsStep4);
 		}
 
-		public void startInstallation(AjaxRequestTarget target) {
+		@Override
+		public void applyState() {
 			started = true;
-			timer.restart(target);
 			new Thread(new InstallProcess(initvalues)
 				, "Openmeetings - Installation").start();
 			desc.setDefaultModelObject(getString("install.wizard.install.started"));
-			target.add(desc, container);
+			RequestCycle.get().find(AjaxRequestTarget.class).ifPresent(target -> {
+				progressBar.restart(target).setModelObject(0);
+				buttons.forEach(b -> {
+					target.add(b.setEnabled(false));
+				});
+				target.add(desc, container);
+			});
 		}
 
 		@Override
 		protected void onInitialize() {
 			super.onInitialize();
+			progressBar.updateInterval(Duration.ofSeconds(1)).stop(null).striped(false).setOutputMarkupId(true);
+			container.add(progressBar, congrat);
+			congrat.setVisible(false);
+
+			add(container.setOutputMarkupId(true));
 			desc.setDefaultModelObject(getString("install.wizard.install.desc"));
 			add(desc.setOutputMarkupId(true));
 		}
@@ -753,7 +830,7 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 		@Override
 		public void run() {
 			try {
-				installer.loadAll(getModelObject(), true);
+				installer.loadAll(model.getObject(), true);
 			} catch (Exception e) {
 				th = e;
 			}
@@ -779,7 +856,7 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 
 		WizardDropDown(String id) {
 			super(id);
-			propModel = ((CompoundPropertyModel<InstallationConfig>)InstallWizard.this.getModel()).bind(id);
+			propModel = model.bind(id);
 			setModel(new PropertyModel<T>(this, "option"));
 		}
 
@@ -856,7 +933,7 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 					option = op;
 				}
 				list.add(op);
-				if (option == null && me.getKey().intValue() == InstallWizard.this.getModelObject().getDefaultLangId()) {
+				if (option == null && me.getKey().intValue() == model.getObject().getDefaultLangId()) {
 					option = op;
 				}
 			}
@@ -865,10 +942,8 @@ public class InstallWizard extends AbstractWizard<InstallationConfig> {
 	}
 
 	@Override
-	protected void onFinish(AjaxRequestTarget target) {
-		for (DialogButton b : getButtons()) {
-			b.setEnabled(false, target);
-		}
-		installStep.startInstallation(target);
+	protected void onDetach() {
+		model.detach();
+		super.onDetach();
 	}
 }
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
index da2f711..04314da 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
@@ -21,7 +21,7 @@
 <!DOCTYPE html>
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:extend>
-	<div>
+	<div class="container installer">
 		<div wicket:id="wizard"></div>
 	</div>
 </wicket:extend>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
index 84ee31e..4a87fa0 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
@@ -27,13 +27,18 @@ import org.apache.wicket.protocol.http.request.WebClientInfo;
 
 public class InstallWizardPage extends BaseNotInitedPage {
 	private static final long serialVersionUID = 1L;
-	private final InstallWizard wizard;
 
 	public InstallWizardPage() {
 		if (Application.isInstalled()) {
 			throw new RestartResponseException(Application.get().getHomePage());
 		}
-		add(wizard = new InstallWizard("wizard", getString("install.wizard.install.header")));
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		final InstallWizard wizard = new InstallWizard("wizard", getString("install.wizard.install.header"));
+		add(wizard.setEnabled(false));
 		// This code is required to detect time zone offset
 		add(new AjaxClientInfoBehavior() {
 			private static final long serialVersionUID = 1L;
@@ -42,7 +47,7 @@ public class InstallWizardPage extends BaseNotInitedPage {
 			protected void onClientInfo(AjaxRequestTarget target, WebClientInfo clientInfo) {
 				super.onClientInfo(target, clientInfo);
 				wizard.initTzDropDown();
-				wizard.open(target);
+				target.add(wizard.setEnabled(true));
 			}
 		});
 	}
diff --git a/openmeetings-web/src/main/webapp/css/raw-admin.css b/openmeetings-web/src/main/webapp/css/raw-admin.css
index 91c6d2a..5f7e222 100644
--- a/openmeetings-web/src/main/webapp/css/raw-admin.css
+++ b/openmeetings-web/src/main/webapp/css/raw-admin.css
@@ -45,7 +45,7 @@
 	vertical-align: top;
 	overflow-y: auto;
 }
-.adminForm legend {
+.adminForm legend, .installer legend {
 	padding: 0.2em 0.5em;
 	margin: 0px 10px;
 	font-style: italic;
diff --git a/openmeetings-web/src/main/webapp/css/raw-general.css b/openmeetings-web/src/main/webapp/css/raw-general.css
index a4ed5a5..34d8045 100644
--- a/openmeetings-web/src/main/webapp/css/raw-general.css
+++ b/openmeetings-web/src/main/webapp/css/raw-general.css
@@ -762,3 +762,7 @@ select.messages.selector {
 .popover.confirmation.show {
 	z-index: 3000; /* FIXME TODO move this to variables */
 }
+.installer {
+	overflow-y: auto;
+	height: calc(100% - var(--header-height));
+}
diff --git a/pom.xml b/pom.xml
index a12fe02..6784ff9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,7 +75,7 @@
 		<forbiddenapis.version>2.7</forbiddenapis.version>
 		<!-- dependency versions -->
 		<junit.version>5.6.1</junit.version>
-		<wicket.version>9.0.0-M5-SNAPSHOT</wicket.version>
+		<wicket.version>9.0.0-M5</wicket.version>
 		<wicketju.version>9.0.0-M4</wicketju.version>
 		<wickets.version>9.0.0-M5-SNAPSHOT</wickets.version>
 		<wicket-bootstrap.version>5.0.0-M1</wicket-bootstrap.version>