  /* http://www.onsemi.com/pub_link/Collateral/ADP3208D.PDF */
  static inline uint32_t encode_voltage(uint32_t v)
  {
+@@ -209,7 +222,7 @@ static int decode_pkg(struct thr_info *thr, struct avalon2_ret *ar, uint8_t *pkg
+ 
+ 		memcpy(&modular_id, ar->data + 28, 4);
+ 		modular_id = be32toh(modular_id);
+-		if (modular_id == 3)
++		if (modular_id > 3)
+ 			modular_id = 0;
+ 
+ 		switch(type) {
 @@ -429,7 +442,7 @@ static int avalon2_stratum_pkgs(int fd, struct pool *pool, struct thr_info *thr)
  	while (avalon2_send_pkg(fd, &pkg, thr) != AVA2_SEND_OK)
  		;

 #ifdef USE_BAB
 	OPT_WITH_ARG("--bab-options",
diff --git a/driver-avalon2.c b/driver-avalon2.c
index 5261054..7b8b7ad 100644
--- a/driver-avalon2.c
+++ b/driver-avalon2.c
@@ -51,6 +51,8 @@ int opt_avalon2_fan_max = AVA2_DEFAULT_FAN_MAX;

 
 		info->diff = (int)pool->swork.diff - 1;
 		info->pool_no = pool->pool_no;
@@ -719,7 +738,12 @@ static int64_t avalon2_scanhash(struct thr_info *thr)
 		tmp = be32toh(info->fan_pwm);
 		memcpy(send_pkg.data, &tmp, 4);
 
