diff --git a/.gitignore b/.gitignore
index 18175d7..d9f7c7d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,6 @@
 .DS_Store
 .history
 .idea
-*~
\ No newline at end of file
+*~
+pelican.auto.py
+site-generated
diff --git a/content/downloads.md b/content/downloads.md
index 3f7a653..212d0b6 100644
--- a/content/downloads.md
+++ b/content/downloads.md
@@ -7,50 +7,50 @@
 
 ## List of the current downloads ##
 
-***Current Version 4.1.10 (released on May 04, 2021)***
+***Current Version 4.1.11 (released on October 06, 2021)***
 
  * **Source**:
-    * [apache-openoffice-4.1.10-b1cdbd2c1b-src.zip](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.zip)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.zip.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.zip.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.zip.sha512)]
-    * [apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz.sha512)]
-    * [apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2.sha512)]
+    * [apache-openoffice-4.1.11-bdb20b2a64-src.zip](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.zip)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.zip.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.zip.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.zip.sha512)]
+    * [apache-openoffice-4.1.11-bdb20b2a64-src.tar.gz](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.tar.gz)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.tar.gz.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.tar.gz.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.tar.gz.sha512)]
+    * [apache-openoffice-4.1.11-bdb20b2a64-src.tar.bz2](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.tar.bz2)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.tar.bz2.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.tar.bz2.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/source/apache-openoffice-4.1.11-bdb20b2a64-src.tar.bz2.sha512)]
 
  * **Binaries**:
     * [Downloads](https://www.openoffice.org/download/index.html)
 
  * **Software Development Kit (SDK)**:
-    * [Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz.sha512)]
-    * [Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz.sha512)]
-    * [Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz.sha512)]
-    * [Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz.sha512)]
-    * [Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg.sha512)]
-    * [Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe)
-      [[asc](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe.asc)]
-      [[sha256](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe.sha256)]
-      [[sha512](https://downloads.apache.org/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-deb_en-US.tar.gz](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-deb_en-US.tar.gz)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-deb_en-US.tar.gz.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-deb_en-US.tar.gz.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-deb_en-US.tar.gz.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-rpm_en-US.tar.gz](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-rpm_en-US.tar.gz)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-rpm_en-US.tar.gz.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-rpm_en-US.tar.gz.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86-64_install-rpm_en-US.tar.gz.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-deb_en-US.tar.gz](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-deb_en-US.tar.gz)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-deb_en-US.tar.gz.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-deb_en-US.tar.gz.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-deb_en-US.tar.gz.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-rpm_en-US.tar.gz](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-rpm_en-US.tar.gz)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-rpm_en-US.tar.gz.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-rpm_en-US.tar.gz.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Linux_x86_install-rpm_en-US.tar.gz.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.11_MacOS_x86-64_install_en-US.dmg](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_MacOS_x86-64_install_en-US.dmg)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_MacOS_x86-64_install_en-US.dmg.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_MacOS_x86-64_install_en-US.dmg.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_MacOS_x86-64_install_en-US.dmg.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.11_Win_x86_install_en-US.exe](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Win_x86_install_en-US.exe)
+      [[asc](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Win_x86_install_en-US.exe.asc)]
+      [[sha256](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Win_x86_install_en-US.exe.sha256)]
+      [[sha512](https://downloads.apache.org/openoffice/4.1.11/binaries/SDK/Apache_OpenOffice-SDK_4.1.11_Win_x86_install_en-US.exe.sha512)]
 
 **Note**
 All downloads can be verified using the Apache OpenOffice code signing [KEYS](https://downloads.apache.org/openoffice/KEYS).<br>
@@ -62,6 +62,51 @@
 
 ## Release Archives ##
 
+***Apache OpenOffice 4.1.10 (released on May 04, 2021)***
+
+ * **Source**:
+    * [apache-openoffice-4.1.10-b1cdbd2c1b-src.zip](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.zip)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.zip.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.zip.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.zip.sha512)]
+    * [apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.gz.sha512)]
+    * [apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/source/apache-openoffice-4.1.10-b1cdbd2c1b-src.tar.bz2.sha512)]
+
+ * **Binaries**:
+    * [Downloads](https://www.openoffice.org/download/index.html)
+
+ * **Software Development Kit (SDK)**:
+    * [Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-deb_en-US.tar.gz.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86-64_install-rpm_en-US.tar.gz.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-deb_en-US.tar.gz.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Linux_x86_install-rpm_en-US.tar.gz.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_MacOS_x86-64_install_en-US.dmg.sha512)]
+    * [Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe)
+      [[asc](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe.asc)]
+      [[sha256](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe.sha256)]
+      [[sha512](https://archive.apache.org/dist/openoffice/4.1.10/binaries/SDK/Apache_OpenOffice-SDK_4.1.10_Win_x86_install_en-US.exe.sha512)]
+
 ***Apache OpenOffice 4.1.9 (released on February 07, 2021)***
 
  * **Source**:
diff --git a/content/index.md b/content/index.md
index 7df1fe8..3012e33 100644
--- a/content/index.md
+++ b/content/index.md
@@ -16,6 +16,12 @@
 
 ## Announcements
 
+*2021-10-06 -- [Apache OpenOffice][1] 4.1.11 is released!*
+
+- [Download Source and SDK](/downloads.html)
+- [Download Binaries](https://www.openoffice.org/download/)
+- [Release Notes](https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.11+Release+Notes)
+
 *2021-05-04 -- [Apache OpenOffice][1] 4.1.10 is released!*
 
 - [Download Source and SDK](/downloads.html)
diff --git a/content/orientation/decision-making.md b/content/orientation/decision-making.md
index 435437b..917b616 100644
--- a/content/orientation/decision-making.md
+++ b/content/orientation/decision-making.md
@@ -59,7 +59,7 @@
 
    2. In most cases proposals are decided by consensus, based on community discussions. Only in rare cases, and in a small number of pre-defined administrative questions, do we resort to a formal counting of votes. The places where we require voting are: voting to release, voting in a new Committer or PMC Member, Voting in a new PMC Chair. That's it. Generally speaking, voting on any other topic is avoided in favor of consensus building. With voting there are winners and losers. With consensus everyone wins.
 
-   3. Another aspect of decision making in an Apache project is the "veto". Every Committer has the ability to "veto" a change, for technical reasons, provided he explains the technical reasons for the veto, describes an alternative approach, and offers to help implement the alternative approach. Vetos are quite rare.
+   3. Another aspect of decision making in an Apache project is the "veto". Every Committer has the ability to "veto" a change, for technical reasons, provided they explain the technical reasons for the veto, describes an alternative approach, and offers to help implement the alternative approach. Vetos are quite rare.
 
    4. There is one disorder of community decision making that is common enough to warrant a colorful name: [bikeshedding](http://bikeshed.com/). Follow the link and read more about this topic.
 
diff --git a/content/orientation/intro-doc.md b/content/orientation/intro-doc.md
index b6f14e3..836d094 100644
--- a/content/orientation/intro-doc.md
+++ b/content/orientation/intro-doc.md
@@ -68,7 +68,7 @@
 
 1. Subscribe to our Documentation mailing list by sending an email to [doc-subscribe@openoffice.apache.org](mailto:doc-subscribe@openoffice.apache.org).
 1. Sign up for an account on our MWiki by sending an e-mail with your preferred user name and e-mail address to the [Documentation mailing list](mailto:doc@openoffice.apache.org?subject=Requesting%20MWiki%20Account)
-1. Sign up for an account on [our CWiki](https://cwiki.apache.org/confluence/display/OOOUSERS/Wiki+Home) (Why do we have two wikis? It is a long story...)**Note:** **After creation the account must be whitelisted by sending a request with the account name to the [Documentation mailing list](mailto:doc@openoffice.apache.org?subject=Whitelist%20CWiki%20Account)**
+1. Sign up for an account on [our CWiki](https://cwiki.apache.org/confluence/display/OOOUSERS/Wiki+Home) (Why do we have two wikis? It is a long story...)**Note:** **After creation the account must be allowed by sending a request with the account name to the [Documentation mailing list](mailto:doc@openoffice.apache.org?subject=Allow%20CWiki%20Account)**
 1. Add your name to our [Directory of Volunteers](https://cwiki.apache.org/confluence/display/OOOUSERS/Directory+of+Volunteers) and
 [Documentation Volunteers](https://cwiki.apache.org/confluence/display/OOOUSERS/Documentation+Volunteers) pages.
 1. Send an email to the [Documentation mailing list](mailto:doc@openoffice.apache.org?subject=New%20Doc%20Volunteer) and introduce yourself.
diff --git a/content/orientation/intro-qa.md b/content/orientation/intro-qa.md
index 968bcb2..53ec3e1 100644
--- a/content/orientation/intro-qa.md
+++ b/content/orientation/intro-qa.md
@@ -174,7 +174,7 @@
 
 ## Easy QA Task: Test Case Authoring
 
-This is a more advanced topic, but after mastery of the above two steps, and learning to "think like a bug", you will be ready for this.
+This is a more advanced topic, but with the above two steps, and learning to "think like a bug", you will be ready for this.
 
 After some practice on test case execution, now you can start writing new test cases.
 
diff --git a/content/source.md b/content/source.md
index a864134..dec2673 100644
--- a/content/source.md
+++ b/content/source.md
@@ -32,7 +32,7 @@
 
 ### Source archive of the latest release
 
-An archive of the source for the latest release can be obtainted from the Apache Software Foundation repository:
+An archive of the source for the latest release can be obtained from the Apache Software Foundation repository:
 [https://archive.apache.org/dist/openoffice](https://archive.apache.org/dist/openoffice/)
 
 
@@ -62,7 +62,7 @@
 Install the RPM pack with --prefix="some new AOO directory" option.
 * Windows: Use the custom install option, and choose a new directory location for the
 AOO developer install.
-* Mac: create a new folder for AOO developer install. Download the ".dmg" file there, and install
+* Mac: Create a new folder for AOO developer install. Download the ".dmg" file there, and install
 to the new directory.
 
 
diff --git a/pelicanconf.py b/pelicanconf.py
deleted file mode 100644
index 695d6d5..0000000
--- a/pelicanconf.py
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*- #
-
-from __future__ import unicode_literals
-from datetime import date
-
-import sys
-import os
-
-AUTHOR = u'OpenOffice Community'
-SITENAME = 'Apache OpenOffice'
-SITEURL = 'https://openoffice.apache.org/'
-SITEDOMAIN = 'openoffice.apache.org'
-SITEDESC = 'The official developer website of the Apache OpenOffice open source project, home of OpenOffice Writer, Calc, Impress, Draw and Base.'
-SITEKEYS = 'OpenOffice, Open Office, Apache OpenOffice, Apache Open Office, OpenOffice.org, Developer, Project, Website, Official, Writer, Calc, Impress, Draw, Base, ODF, Open Document Format'
-SITELOGO = 'https://openoffice.apache.org/images/AOO4_website_logo.png'
-CURRENTYEAR = date.today().year
-
-PATH = 'content'
-
-TIMEZONE = 'UTC'
-
-DEFAULT_DATE = 'fs'
-DEFAULT_LANG = u'en'
-
-# Save pages using full directory preservation
-PAGE_PATHS = [ '.' ]
-STATIC_PATHS = [ '.' ]
-PATH_METADATA= '(?P<path_no_ext>.*)\..*'
-PAGE_SAVE_AS= '{path_no_ext}.html'
-PAGE_URL= '{path_no_ext}.html'
-PAGE_TRANSLATION_ID = None
-# SLUGIFY_SOURCE = 'basename'
-# PAGE_SAVE_AS = '{slug}.html'
-
-# We don't use articles, but we don't want pelican to think
-# that content/ contains articles.
-ARTICLE_PATHS = [ 'articles' ]
-
-# Disable these pages
-ARCHIVES_SAVE_AS = ''
-ARTICLE_SAVE_AS = ''
-AUTHORS_SAVE_AS = ''
-CATEGORIES_SAVE_AS = ''
-INDEX_SAVE_AS = ''
-TAGS_SAVE_AS = ''
-
-# Feed generation is usually not desired when developing
-FEED_ALL_ATOM = None
-CATEGORY_FEED_ATOM = None
-TRANSLATION_FEED_ATOM = None
-AUTHOR_FEED_ATOM = None
-AUTHOR_FEED_RSS = None
-
-# Configure the asfgenid plugin                                                                                                                                                                                    
-ASF_GENID = {
-    'unsafe_tags': True,
-    'metadata': False,
-    'elements': True,
-    'headings': True,
-    'headings_re': '^h[1-4]',
-    'permalinks': True,
-    'toc': True,
-    'toc_headers': '^h[1-6]',
-    'tables': True,
-    'debug': False
-}
-
-# TOC Generator
-THEME = 'theme/openoffice'
-PLUGIN_PATHS = ['./theme/plugins']
-PLUGINS = ['asfgenid', 'pelican-gfm']
-
-# Unused links
-LINKS = ( )
-SOCIAL = ( )
-
-# Blogroll
-#LINKS = (('Pelican', 'https://getpelican.com/'),
-#         ('Python.org', 'https://www.python.org/'),
-#         ('Jinja2', 'https://palletsprojects.com/p/jinja/'),
-#         ('You can modify those links in your config file', '#'),)
-
-# Social widget
-#SOCIAL = (('You can add links in your config file', '#'),
-#          ('Another social link', '#'),)
-
-DEFAULT_PAGINATION = False
-
-# Uncomment following line if you want document-relative URLs when developing
-#RELATIVE_URLS = True
-
diff --git a/theme/plugins/asfgenid.py b/theme/plugins/asfgenid.py
deleted file mode 100644
index 35c776e..0000000
--- a/theme/plugins/asfgenid.py
+++ /dev/null
@@ -1,389 +0,0 @@
-'''
-asfgenid
-===================================
-Generates HeadingIDs, ElementID, and PermaLinks
-First find all specified IDs and classes. Assure unique ID and permalink
-Next find all headings missing IDs. Assure unique ID and permalink
-Generates a Table of Content
-'''
-
-# from __future__ import unicode_literals
-
-import sys
-import traceback
-import re
-import unicodedata
-
-from bs4 import BeautifulSoup, Comment
-
-import pelican.contents
-import pelican.plugins.signals
-
-'''
-Based on
-https://github.com/waylan/Python-Markdown/blob/master/markdown/extensions/headerid.py
-Which is BSD licensed, but is very much rewritten.
-'''
-
-ASF_GENID = {
-    'unsafe_tags': True,        # fix script, style, and iframe html that gfm filters as unsafe
-    'metadata': True,           # {{ metadata }} inclusion of data in the html.
-    'elements': True,	        # {#id} and {.class} annotations.
-    'headings': True,	        # add slugified id to headings missing id. Can be overridden by page metadata.
-    'headings_re': r'^h[1-6]',  # regex for which headings to check.
-    'permalinks': True,	        # add permalinks to elements and headings when id is added.
-    'toc': True,  	        # check for [TOC] and add Table of Content if present.
-    'toc_headers': r'h[1-6]',   # regex for which headings to include in the [TOC]
-    'tables': True,	        # add class="table" for tables missing class.
-    'debug': False
-}
-
-# Fixup tuples for HTML that GFM makes into text.
-FIXUP_UNSAFE = [
-    (re.compile(r'&lt;script'), '<script'),
-    (re.compile(r'&lt;/script'), '</script'),
-    (re.compile(r'&lt;style'), '<style'),
-    (re.compile(r'&lt;/style'), '</style'),
-    (re.compile(r'&lt;iframe'), '<iframe'),
-    (re.compile(r'&lt;/iframe'), '</iframe')
-]
-
-# Find {{ metadata }} inclusions
-METADATA_RE = re.compile(r'{{\s*(?P<meta>[-_:a-zA-Z0-9]+)\s*}}')
-
-# Find {#id} or {.class} elementid annotations
-ELEMENTID_RE = re.compile(r'(?:[ \t]*[{\[][ \t]*(?P<type>[#.])(?P<id>[-._:a-zA-Z0-9 ]+)[}\]])(\n|$)')
-
-# ID duplicates match
-IDCOUNT_RE = re.compile(r'^(.*)_([0-9]+)$')
-
-# For permalinks
-LINK_CHAR = '¶'
-
-# strip permalink chars from headings for ToC
-PARA_MAP = {
-    ord(LINK_CHAR): None
-}
-
-# Find table tags - to check for ones without class attribute.
-TABLE_RE = re.compile(r'^table')
-
-
-# An item in a Table of Contents - from toc.py
-class HtmlTreeNode(object):
-    def __init__(self, parent, header, level, id):
-        self.children = []
-        self.parent = parent
-        self.header = header
-        self.level = level
-        self.id = id
-
-    def add(self, new_header):
-        new_level = new_header.name
-        new_string = new_header.string
-        new_id = new_header.attrs.get('id')
-
-        if not new_string:
-            new_string = new_header.find_all(
-                text=lambda t: not isinstance(t, Comment),
-                recursive=True)
-            new_string = ''.join(new_string)
-        new_string = new_string.translate(PARA_MAP)
-
-        if self.level < new_level:
-            new_node = HtmlTreeNode(self, new_string, new_level, new_id)
-            self.children += [new_node]
-            return new_node, new_header
-        elif self.level == new_level:
-            new_node = HtmlTreeNode(self.parent, new_string, new_level, new_id)
-            self.parent.children += [new_node]
-            return new_node, new_header
-        elif self.level > new_level:
-            return self.parent.add(new_header)
-
-    def __str__(self):
-        ret = ''
-        if self.parent:
-            ret = "<a class='toc-href' href='#{0}' title='{1}'>{1}</a>".format(
-                self.id, self.header)
-
-        if self.children:
-            ret += "<ul>{}</ul>".format('{}' * len(self.children)).format(
-                *self.children)
-
-        if self.parent:
-            ret = "<li>{}</li>".format(ret)
-
-        if not self.parent:
-            ret = "<div id='toc'>{}</div>".format(ret)
-
-        return ret
-
-
-# assure configuration
-def init_default_config(pelican):
-    from pelican.settings import DEFAULT_CONFIG
-
-    DEFAULT_CONFIG.setdefault('ASF_GENID', ASF_GENID)
-    if(pelican):
-        pelican.settings.setdefault('ASF_GENID', ASF_GENID)
-
-
-# from Apache CMS markdown/extensions/headerid.py - slugify in the same way as the Apache CMS
-def slugify(value, separator):
-    """ Slugify a string, to make it URL friendly. """
-    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
-    value = re.sub('[^\\w\\s-]', '', value.decode('ascii')).strip().lower()
-    return re.sub('[%s\\s]+' % separator, separator, value)
-
-
-# Ensure an id is unique in a set of ids. Append '_1', '_2'... if not
-def unique(id, ids):
-    while id in ids or not id:
-        m = IDCOUNT_RE.match(id)
-        print(f'id="{id}" is a duplicate')
-        if m:
-            id = '%s_%d' % (m.group(1), int(m.group(2)) + 1)
-        else:
-            id = '%s_%d' % (id, 1)
-    ids.add(id)
-    return id
-
-
-# append a permalink
-def permalink(soup, mod_element):
-    new_tag = soup.new_tag('a', href='#' + mod_element['id'])
-    new_tag['class'] = 'headerlink'
-    new_tag['title'] = 'Permalink'
-    new_tag.string = LINK_CHAR
-    mod_element.append(new_tag)
-
-
-# fixup cmark content - note that this may be too hungry. It may need to occur later and skipped in codeblock and pre tags.
-def fixup_content(content):
-    text = content._content
-    modified = False
-    # Find messed up html
-    for regex, replace in FIXUP_UNSAFE:
-        m = regex.search(text)
-        if m:
-            modified = True
-            text = re.sub(regex, replace, text)
-    if modified:
-        content._content = text
-
-
-# expand metadata found in {{ key }}
-def expand_metadata(tag, metadata):
-    this_string = str(tag.string)
-    m = 1
-    modified = False
-    while m:
-        m = METADATA_RE.search(this_string)
-        if m:
-            this_data = m.group(1).strip()
-            format_string = '{{{0}}}'.format(this_data)
-            try:
-                new_string = format_string.format(**metadata)
-                print(f'{{{{{m.group(1)}}}}} -> {new_string}')
-            except Exception:
-                # the data expression was not found
-                print(f'{{{{{m.group(1)}}}}} is not found')
-                new_string = format_string
-            # replace the first pattern with the new_string
-            this_string = re.sub(METADATA_RE, new_string, this_string, count=1)
-            modified = True
-    if modified:
-        tag.string.replace_with(this_string)
-
-
-# do elementid transformation for {#id} and {.class} attribute annotations.
-def elementid_transform(ids, soup, tag, permalinks, perma_set, debug):
-    tagnav = tag.parent
-    this_string = str(tag.string)
-    if debug:
-        print(f'name = {tagnav.name}, string = {this_string}')
-    if tagnav.name not in ['[document]', 'code', 'pre']:
-        m = ELEMENTID_RE.search(tag.string)
-        if m:
-            # this replacement could be better it truncates and likely drops additional annotations
-            tag.string.replace_with(this_string[:m.start()])
-            if m.group('type') == '#':
-                # id attribute annotation
-                tagnav['id'] = unique(m.group('id'), ids)
-                if permalinks:
-                    permalink(soup, tagnav)
-                    unique(tagnav['id'], perma_set)
-                if debug:
-                    print(f'# insertion {tagnav}')
-            else:
-                # class attribute annotation (regex only recognizes the two types)
-                tagnav['class'] = m.group('id')
-                if debug:
-                    print(f'Class {tag.name} : {tagnav["class"]}')
-
-
-# generate id for a heading
-def headingid_transform(ids, soup, tag, permalinks, perma_set):
-    new_string = tag.string
-    if not new_string:
-        # roll up strings if no immediate string
-        new_string = tag.find_all(
-            text=lambda t: not isinstance(t, Comment),
-            recursive=True)
-        new_string = ''.join(new_string)
-
-    # don't have an id create it from text
-    new_id = slugify(new_string, '-')
-    tag['id'] = unique(new_id, ids)
-    if permalinks:
-        permalink(soup, tag)
-        # inform if there is a duplicate permalink
-        unique(tag['id'], perma_set)
-
-
-# generate table of contents from headings after [TOC] content
-def generate_toc(content, tags, title, toc_headers):
-    settoc = False
-    tree = node = HtmlTreeNode(None, title, 'h0', '')
-    # find the last [TOC]
-    taglast = tags[0]
-    for tag in tags:
-        taglast = tag
-    # find all headings after the final [TOC]
-    heading_re = re.compile(toc_headers)
-    for header in taglast.findAllNext(heading_re):
-        # we have heading content for the ToC
-        settoc = True
-        # add the heading.
-        node, _new_header = node.add(header)
-    # convert the ToC to Beautiful Soup
-    tree_soup = ''
-    if settoc:
-        print('  ToC')
-        # convert the HtmlTreeNode into Beautiful Soup
-        tree_string = '{}'.format(tree)
-        tree_soup = BeautifulSoup(tree_string, 'html.parser')
-        # Make the ToC available to the theme's template
-        content.toc = tree_soup.decode(formatter='html')
-    # replace the first [TOC] with the generated table of contents
-    for tag in tags:
-        tag.replaceWith(tree_soup)
-        # replace additional [TOC] with nothing
-        tree_soup = ''
-
-
-# add the asfdata metadata into GFM content.
-def add_data(content):
-    """ Mix in ASF data as metadata """
-
-    # if the reader is 'asf' then the asf metadata is already in place during asfreader plugin.
-    if content.metadata.get('reader') != 'asf':
-        asf_metadata = content.settings.get('ASF_DATA', { }).get('metadata')
-        if asf_metadata:
-            content.metadata.update(asf_metadata)
-
-
-# main worker transforming the html
-def generate_id(content):
-    if isinstance(content, pelican.contents.Static):
-        return
-
-    # get plugin settings
-    asf_genid = content.settings['ASF_GENID']
-    # asf_headings setting may be overridden
-    asf_headings = content.metadata.get('asf_headings', str(asf_genid['headings']))
-
-    # show active plugins
-    if asf_genid['debug']:
-        print('asfgenid:\nshow plugins in case one is processing before this one')
-        for name in content.settings['PLUGINS']:
-            print(f'plugin: {name}')
-
-    # track the id tags
-    ids = set()
-    # track permalinks
-    permalinks = set()
-
-    # step 1 - fixup html that cmark marks unsafe - move to later?
-    if asf_genid['unsafe_tags']:
-        fixup_content(content)
-
-    # step 2 - prepare for genid processes
-    # parse html content into BeautifulSoup4
-    soup = BeautifulSoup(content._content, 'html.parser')
-    # page title
-    title = content.metadata.get('title', 'Title')
-    # assure relative source path is in the metadata
-    content.metadata['relative_source_path'] = content.relative_source_path
-    # display output path and title
-    print(f'{content.relative_source_path} - {title}')
-    # enhance metadata if done by asfreader
-    add_data(content)
-
-    # step 3 - metadata expansion
-    if asf_genid['metadata']:
-        if asf_genid['debug']:
-            print(f'metadata expansion: {content.relative_source_path}')
-        for tag in soup.findAll(string=METADATA_RE):
-            expand_metadata(tag, content.metadata)
-
-    # step 4 - find all id attributes already present
-    for tag in soup.findAll(id=True):
-        unique(tag['id'], ids)
-        # don't change existing ids
-
-    # step 5 - find all {#id} and {.class} text and assign attributes
-    if asf_genid['elements']:
-        if asf_genid['debug']:
-            print(f'elementid: {content.relative_source_path}')
-        for tag in soup.findAll(string=ELEMENTID_RE):
-            elementid_transform(ids, soup, tag, asf_genid['permalinks'], permalinks, asf_genid['debug'])
-
-    # step 6 - find all headings w/o ids already present or assigned with {#id} text
-    if asf_headings == 'True':
-        if asf_genid['debug']:
-            print(f'headings: {content.relative_source_path}')
-        # Find heading tags
-        HEADING_RE = re.compile(asf_genid['headings_re'])
-        for tag in soup.findAll(HEADING_RE, id=False):
-            headingid_transform(ids, soup, tag, asf_genid['permalinks'], permalinks)
-
-    # step 7 - find all tables without class
-    if asf_genid['tables']:
-        if asf_genid['debug']:
-            print(f'tables: {content.relative_source_path}')
-        for tag in soup.findAll(TABLE_RE, _class=False):
-            tag['class'] = 'table'
-
-    # step 8 - find TOC tag and generate Table of Contents
-    if asf_genid['toc']:
-        tags = soup('p', text='[TOC]')
-        if tags:
-            generate_toc(content, tags, title, asf_genid['toc_headers'])
-
-    # step 9 - reset the html content
-    content._content = soup.decode(formatter='html')
-
-    # step 10 - output all of the permalinks created
-    for tag in permalinks:
-        print(f'    #{tag}')
-
-
-def tb_connect(pel_ob):
-    """Print any exception, before Pelican chews it into nothingness."""
-    try:
-        generate_id(pel_ob)
-    except Exception:
-        print('-----', file=sys.stderr)
-        print('FATAL: %s' % (pel_ob.relative_source_path), file=sys.stderr)
-        traceback.print_exc()
-        # if we have errors in this module then we want to quit to avoid erasing the site
-        sys.exit(4)
-
-
-def register():
-    pelican.plugins.signals.initialized.connect(init_default_config)
-
-
-pelican.plugins.signals.content_object_init.connect(tb_connect)
