diff --git a/i2p2www/__init__.py b/i2p2www/__init__.py
index b323f5597f79f3a9aa7e2787c804703c3da73f82..69e42e4dc980a585003c32ce5e4f77e8636220fa 100644
--- a/i2p2www/__init__.py
+++ b/i2p2www/__init__.py
@@ -22,7 +22,7 @@ except ImportError:
 ###########
 # Constants
 
-CURRENT_I2P_VERSION = '0.9.27'
+CURRENT_I2P_VERSION = '0.9.28'
 
 CANONICAL_DOMAIN = 'geti2p.net'
 
diff --git a/i2p2www/blog/2016/12/12/0.9.28-Release.draft.rst b/i2p2www/blog/2016/12/12/0.9.28-Release.rst
similarity index 100%
rename from i2p2www/blog/2016/12/12/0.9.28-Release.draft.rst
rename to i2p2www/blog/2016/12/12/0.9.28-Release.rst
diff --git a/i2p2www/pages/downloads/macros b/i2p2www/pages/downloads/macros
index e4d54e2ca0459f81b168b34c4b05eae494e4db58..eab88173550bd25654b5cf9e12497d7962518316 100644
--- a/i2p2www/pages/downloads/macros
+++ b/i2p2www/pages/downloads/macros
@@ -1,7 +1,7 @@
-{% set i2pinstall_windows_hash = 'af712a5f71d40c3dfdcd21f34696324acfb499fe54f6c751059aeea414b9f5c7' %}
-{% set i2pinstall_jar_hash     = '5e9ae0b1e8fb5707ae6903e09aa1110b6d98742b5c2952f24667133e563843f0' %}
-{% set i2psource_hash          = '89808fa062735fc880d28d232fae27028d9ecdc13b1695a251ecfec119bc15da' %}
-{% set i2pupdate_hash          = '0178a9aea4d1359c8be1ac82804e0d5711b01b6a3f28d4b587b7f491c292d74e' %}
+{% set i2pinstall_windows_hash = '7c393ab208e549ec6fc5f1aad77d7ef949989b0c66b6d02cdca235b291c3d3e6' %}
+{% set i2pinstall_jar_hash     = '55e65c18080689e0e9fadfd34ac56e9e1405e5bf3bfb1e1dd10816e8e0030712' %}
+{% set i2psource_hash          = '7bb27444bd1074a0f670276ad07e0b5b2a7a29ed6d25d93e6f95646981cd0aaf' %}
+{% set i2pupdate_hash          = '7ea794af14c46bef34b33fbad518007275bad18576b0350f2448788ff099ef6b' %}
 {% set i2p_android_hash        = 'b246cd892803f2aa9d67ba4e6a07dc0478b5341dba8261ec2f638fad7f059359' %}
 
 {% set i2p_android_version = '0.9.27' %}