diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java
index 980ba017d7902da22452750d5912f2cade6e65bd..e0d719c4278d7c9cf890f4c7fcf1cb64862d4244 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java
@@ -55,10 +55,16 @@ public class GeneralHelper {
     private final I2PAppContext _context;
     protected final TunnelControllerGroup _group;
 
+    /**
+     *  @param tcg may be null ???
+     */
     public GeneralHelper(TunnelControllerGroup tcg) {
         this(I2PAppContext.getGlobalContext(), tcg);
     }
 
+    /**
+     *  @param tcg may be null ???
+     */
     public GeneralHelper(I2PAppContext context, TunnelControllerGroup tcg) {
         _context = context;
         _group = tcg;
@@ -68,6 +74,10 @@ public class GeneralHelper {
         return getController(_group, tunnel);
     }
 
+    /**
+     *  @param tcg may be null
+     *  @return null if not found or tcg is null
+     */
     public static TunnelController getController(TunnelControllerGroup tcg, int tunnel) {
         if (tunnel < 0) return null;
         if (tcg == null) return null;
@@ -696,6 +706,21 @@ public class GeneralHelper {
         return type.getCode();
     }
 
+    /**
+     *  @param encType code
+     *  @since 0.9.44
+     */
+    public boolean hasEncType(int tunnel, int encType) {
+        String senc = getProperty(tunnel, "i2cp.leaseSetEncType", "0");
+        String[] senca = DataHelper.split(senc, ",");
+        String se = Integer.toString(encType);
+        for (int i = 0; i < senca.length; i++) {
+            if (se.equals(senca[i]))
+                return true;
+        }
+        return false;
+    }
+
     /**
      *  Random keys
      */
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/TunnelConfig.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/TunnelConfig.java
index 01289da930f44a494063cf7104d8df651dfa5133..fb072c1296af106da7d9069157b56aea6249372c 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/TunnelConfig.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/TunnelConfig.java
@@ -632,6 +632,19 @@ public class TunnelConfig {
             _otherOptions.put(I2PClient.PROP_SIGTYPE, val.trim());
     }
 
+    /**
+     * Adds to existing, comma separated
+     * @since 0.9.44
+     */
+    public void setEncType(String val) {
+        if (val != null) {
+            String p = _otherOptions.get("i2cp.leaseSetEncType");
+            if (p != null)
+                val = p + ',' + val;
+            _otherOptions.put("i2cp.leaseSetEncType", val);
+        }
+    }
+
     /**
      * Random keys
      */
@@ -837,6 +850,7 @@ public class TunnelConfig {
                     p = OPT + "i2cp.leaseSetPrivateKey";
                     keys = KeyGenerator.getInstance().generatePKIKeys();
                     config.setProperty(p, "ELGAMAL_2048:" + keys[1].toBase64());
+                    // TODO ECIES key
                 } catch (GeneralSecurityException gse) {
                     // so much for that
                 }
@@ -1062,7 +1076,8 @@ public class TunnelConfig {
         I2PClient.PROP_SIGTYPE,
         I2PTunnelHTTPClient.PROP_SSL_OUTPROXIES,
         // following are mostly server but could also be persistent client
-        "inbound.randomKey", "outbound.randomKey", "i2cp.leaseSetSigningPrivateKey", "i2cp.leaseSetPrivateKey"
+        "inbound.randomKey", "outbound.randomKey", "i2cp.leaseSetSigningPrivateKey", "i2cp.leaseSetPrivateKey",
+        "i2cp.leaseSetEncType"
         };
     private static final String _otherServerOpts[] = {
         "i2cp.reduceIdleTime", "i2cp.reduceQuantity", "i2cp.leaseSetKey", "i2cp.accessList",
@@ -1071,7 +1086,8 @@ public class TunnelConfig {
          PROP_MAX_STREAMS, I2PClient.PROP_SIGTYPE,
          "inbound.randomKey", "outbound.randomKey", "i2cp.leaseSetSigningPrivateKey", "i2cp.leaseSetPrivateKey",
          I2PTunnelServer.PROP_ALT_PKF,
-         "i2cp.leaseSetSecret", "i2cp.leaseSetType", "i2cp.leaseSetAuthType", "i2cp.leaseSetPrivKey"
+         "i2cp.leaseSetSecret", "i2cp.leaseSetType", "i2cp.leaseSetAuthType", "i2cp.leaseSetPrivKey",
+        "i2cp.leaseSetEncType"
         };
     private static final String _httpServerOpts[] = {
         I2PTunnelHTTPServer.OPT_POST_WINDOW,
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java
index a3599e3fe346568e5307986f6f4e87bdf72cf3d6..8dbed733593562314254ff6e2f50e608f679a74c 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java
@@ -259,6 +259,14 @@ public class EditBean extends IndexBean {
         return getTunnelStatus(tunnel) == GeneralHelper.NOT_RUNNING;
     }
 
+    /**
+     *  @param encType code
+     *  @since 0.9.44
+     */
+    public boolean hasEncType(int tunnel, int encType) {
+        return _helper.hasEncType(tunnel, encType);
+    }
+
     /**
      *  Random keys, hidden in forms
      *  @since 0.9.18
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
index b09beceaa801bb89f03d5e661549ab276bbf326a..85fcd595b8c702226e525ee181c99ab6a06abce9 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
@@ -1239,6 +1239,14 @@ public class IndexBean {
         // Otherwise this only works on a new tunnel...
     }
 
+    /**
+     * Adds to existing, comma separated
+     * @since 0.9.44
+     */
+    public void setEncType(String s) {
+        _config.setEncType(s);
+    }
+
     /**
      *  Random keys, hidden in forms
      *  @since 0.9.18
diff --git a/apps/i2ptunnel/jsp/editClient.jsi b/apps/i2ptunnel/jsp/editClient.jsi
index 2ece40a25589c2757d32a0d5450149238f8e896e..666bfc789075e8cb1d83cb6be99f7bc1cfaccd3c 100644
--- a/apps/i2ptunnel/jsp/editClient.jsi
+++ b/apps/i2ptunnel/jsp/editClient.jsi
@@ -487,13 +487,12 @@
 <%
             } // if httpclient
 
-            if (true /* editBean.isAdvanced() */ ) {
-                int currentSigType = editBean.getSigType(curTunnel, tunnelType);
-                String disabled = editBean.canChangeSigType(curTunnel) ? "" : " disabled=\"disabled\" ";
+            int currentSigType = editBean.getSigType(curTunnel, tunnelType);
+            String disabled = editBean.canChangeSigType(curTunnel) ? "" : " disabled=\"disabled\" ";
 %>
         <tr>
             <th colspan="2">
-                <%=intl._t("Signature type")%> <%-- (<%=intl._t("Experts only!")%>) --%>
+                <%=intl._t("Signature type")%>
             </th>
         </tr><tr>
             <td colspan="2">
@@ -529,6 +528,31 @@
                 </select>
             </td>
         </tr>
+<%
+            if (editBean.isAdvanced()) {
+                boolean has0 = editBean.hasEncType(curTunnel, 0);
+                boolean has4 = editBean.hasEncType(curTunnel, 4);
+%>
+        <tr>
+            <th colspan="2">
+                <%=intl._t("Encryption types")%>
+            </th>
+        </tr><tr>
+            <td colspan="2">
+                <span class="multiOption">
+                    <label><input value="0" type="radio" id="startOnLoad" name="encType" <%=(has0 ? " checked=\"checked\"" : "")%> class="tickbox" />
+                    ElGamal-2048</label>
+                </span>
+                <span class="multiOption">
+                    <label><input value="4" type="radio" id="startOnLoad" name="encType" <%=(has4 ? " checked=\"checked\"" : "")%> class="tickbox" />
+                    ECIES-X25519 (<%=intl._t("Experts only!")%>)</label>
+                </span>
+                <span class="multiOption">
+                    <label><input value="0,4" type="radio" id="startOnLoad" name="encType" <%=((has0 && has4) ? " checked=\"checked\"" : "")%> class="tickbox" />
+                    <%=intl._t("Both")%> (<%=intl._t("Experts only!")%>)</label>
+                </span>
+            </td>
+        </tr>
 <%
             } // isAdvanced
 
diff --git a/apps/i2ptunnel/jsp/editServer.jsi b/apps/i2ptunnel/jsp/editServer.jsi
index 37db6c3f3404cb7aafec3fe741e3cb8eabdfcaa5..4222c16f34d4e8b8995e96d5095c5018215a4745 100644
--- a/apps/i2ptunnel/jsp/editServer.jsi
+++ b/apps/i2ptunnel/jsp/editServer.jsi
@@ -802,12 +802,11 @@
 <%
    **********************/
             int currentSigType = editBean.getSigType(curTunnel, tunnelType);
-            if (true /* editBean.isAdvanced() */ ) {
-                String disabled = editBean.canChangeSigType(curTunnel) ? "" : " disabled=\"disabled\" ";
+            String disabled = editBean.canChangeSigType(curTunnel) ? "" : " disabled=\"disabled\" ";
 %>
         <tr>
             <th colspan="2">
-                <%=intl._t("Signature type")%> <%-- (<%=intl._t("Experts only! Changes B32!")%>) --%>
+                <%=intl._t("Signature type")%>
             </th>
         </tr><tr>
             <td colspan="2">
@@ -838,7 +837,33 @@
                 </select>
             </td>
         </tr>
-<%          } // isAdvanced
+<%
+            if (editBean.isAdvanced()) {
+                boolean has0 = editBean.hasEncType(curTunnel, 0);
+                boolean has4 = editBean.hasEncType(curTunnel, 4);
+%>
+        <tr>
+            <th colspan="2">
+                <%=intl._t("Encryption types")%>
+            </th>
+        </tr><tr>
+            <td colspan="2">
+                <span class="multiOption">
+                    <label><input value="0" type="radio" id="startOnLoad" name="encType" <%=(has0 ? " checked=\"checked\"" : "")%> class="tickbox" />
+                    ElGamal-2048</label>
+                </span>
+                <span class="multiOption">
+                    <label><input value="4" type="radio" id="startOnLoad" name="encType" <%=(has4 ? " checked=\"checked\"" : "")%> class="tickbox" />
+                    ECIES-X25519 (<%=intl._t("Experts only!")%>)</label>
+                </span>
+                <span class="multiOption">
+                    <label><input value="0,4" type="radio" id="startOnLoad" name="encType" <%=((has0 && has4) ? " checked=\"checked\"" : "")%> class="tickbox" />
+                    <%=intl._t("Both")%> (<%=intl._t("Experts only!")%>)</label>
+                </span>
+            </td>
+        </tr>
+<%
+            } // isAdvanced
 
             /* alternate dest, only if current dest is set and is DSA_SHA1 */