diff --git a/drivers/nutdrv_qx.c b/drivers/nutdrv_qx.c
index 8f3fe933..92f1c891 100644
--- a/drivers/nutdrv_qx.c
+++ b/drivers/nutdrv_qx.c
@@ -432,6 +432,7 @@ static USBDevice_t			usbdevice;
 static USBDeviceMatcher_t		*reopen_matcher = NULL;
 static USBDeviceMatcher_t		*regex_matcher = NULL;
 static int				langid_fix = -1;
+static int 				energenie_fix = 0;
 
 static int	(*subdriver_command)(const char *cmd, char *buf, size_t buflen) = NULL;
 
@@ -759,6 +760,11 @@ static int	krauler_command(const char *cmd, char *buf, size_t buflen)
 		{ NULL, 0, '\0' }
 	};
 
+	if (energenie_fix) {
+		buflen = 102;
+		upsdebugx(3, "Energenie fix enabled (buflen set to 102).");
+	}
+
 	int	i;
 
 	upsdebugx(3, "send: %.*s", (int)strcspn(cmd, "\r"), cmd);
@@ -2091,6 +2097,7 @@ void	upsdrv_makevartable(void)
 	nut_usb_addvars();
 
 	addvar(VAR_VALUE, "langid_fix", "Apply the language ID workaround to the krauler subdriver (0x409 or 0x4095)");
+	addvar(VAR_VALUE, "energenie_fix", "Apply the fix for for the Energenie UPS");
 	addvar(VAR_FLAG, "noscanlangid", "Don't autoscan valid range for langid");
 #endif	/* QX_USB */
 
@@ -2380,6 +2387,10 @@ void	upsdrv_initups(void)
 			}
 		}
 
+		if (getval("energenie_fix")) {
+		    energenie_fix = 1;
+		}
+
 		/* Pick up the subdriver name if set explicitly */
 		if (subdrv) {
 
