--- /etc/inc/gwlb.inc.orig	2014-09-11 10:38:28.000000000 +0200
+++ /etc/inc/gwlb.inc	2014-09-11 10:43:46.000000000 +0200
@@ -159,7 +159,11 @@ EOD;
 
 		/* Interface ip is needed since apinger will bind a socket to it. */
 		if (is_ipaddrv4($gateway['gateway'])) {
-			$gwifip = find_interface_ip($gateway['interface'], true);
+			if (is_ipaddrv4($gateway['srcip'])) {
+				$gwifip = $gateway['srcip'];
+			} else {
+				$gwifip = find_interface_ip($gateway['interface'], true);
+			}
 			if (!is_ipaddrv4($gwifip))
 				continue; //Skip this target
 
@@ -176,7 +180,9 @@ EOD;
 			}
 		} else if (is_ipaddrv6($gateway['gateway'])) {
 			/* link locals really need a different src ip */
-			if(is_linklocal($gateway['gateway'])) {
+			if (is_ipaddrv6($gateway['srcip'])) {
+				$gwifip = $gateway['srcip'];
+			} else if(is_linklocal($gateway['gateway'])) {
 				$gwifip = find_interface_ipv6_ll($gateway['interface'], true);
 			} else {
 				$gwifip = find_interface_ipv6($gateway['interface'], true);
@@ -327,10 +333,18 @@ function return_gateways_status($byname 
 			$tgtip = get_interface_gateway($realif);
 			if (!is_ipaddr($tgtip))
 				$tgtip = "none";
-			$srcip = find_interface_ip($realif);
+			if (is_ipaddr($gwitem['srcip'])) {
+				$srcip = $gwitem['srcip'];
+			} else {
+				$srcip = find_interface_ip($realif);
+			}
 		} else {
 			$tgtip = $gwitem['monitorip'];
-			$srcip = find_interface_ip($realif);
+			if (is_ipaddr($gwitem['srcip'])) {
+				$srcip = $gwitem['srcip'];
+			} else {
+				$srcip = find_interface_ip($realif);
+			}
 		}
 		if($byname == true)
 			$target = $gwitem['name'];
