--- src/modules/cloak.c	2017-01-13 09:16:48.000000000 +0100
+++ src/modules/third/m_fullcloak.c	2017-05-26 15:20:09.624604983 +0200
@@ -25,6 +25,7 @@
 static char *cloak_key1 = NULL, *cloak_key2 = NULL, *cloak_key3 = NULL;
 static char cloak_checksum[64];
 static int nokeys = 1;
+static int fullcloak = 0;
 
 #undef KEY1
 #undef KEY2
@@ -121,6 +122,18 @@
 int keycnt = 0, errors = 0;
 char *keys[3];
 
+	if(type == CONFIG_SET && ce && ce->ce_varname) {
+		if(!strcmp(ce->ce_varname, "fullcloak")) {
+			if(!ce->ce_vardata || !strlen(ce->ce_vardata)) {
+				config_error("%s:%i: empty value for set::fullcloak", ce->ce_fileptr->cf_filename, ce->ce_varlinenum);
+				errors++;
+				*errs = errors;
+			}
+			return errors ? -1 : 1;
+		}
+		return 0;
+	}
+
 	if (type != CONFIG_CLOAKKEYS)
 		return 0;
 
@@ -185,6 +198,14 @@
 ConfigEntry *cep;
 char buf[512], result[16];
 
+	if(type == CONFIG_SET && ce && ce->ce_varname && ce->ce_vardata) {
+		if(!strcmp(ce->ce_varname, "fullcloak")) {
+			fullcloak = config_checkval(ce->ce_vardata, CFG_YESNO);
+			return 1;
+		}
+		return 0;
+	}
+	
 	if (type != CONFIG_CLOAKKEYS)
 		return 0;
 
@@ -367,6 +388,11 @@
 	n = strlen(res+16) + 16;
 	DoMD5(res2, res, n);
 	alpha = downsample(res2);
+	
+	if(fullcloak) {
+		ircsnprintf(result, sizeof(result),  "%s-%X", hidden_host, alpha);
+		return result;
+	}
 
 	for (p = host; *p; p++)
 		if (*p == '.')
