diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc
index 47b5cda..82401f5 100644
--- a/etc/inc/filter.inc
+++ b/etc/inc/filter.inc
@@ -775,20 +775,26 @@ function filter_generate_optcfg_array() {
 		$oic['virtual'] = true;
 		$FilterIflist['l2tp'] = $oic;
 	}
-	if($config['pppoe']['mode'] == "server") {
-		$oic = array();
-		$oic['if'] = 'pppoe';
-		$oic['descr'] = 'pppoe';
-		$oic['ip'] = $config['pppoe']['localip'];
-		$oic['sa'] = $config['pppoe']['remoteip'];
-		$oic['mode'] = $config['pppoe']['mode'];
-		$oic['virtual'] = true;
-		if($config['pppoe']['pppoe_subnet'] <> "")
-			$oic['sn'] = $config['pppoe']['pppoe_subnet'];
-		else
-			$oic['sn'] = "32";
-		$FilterIflist['pppoe'] = $oic;
-	}
+
+	if ($config['pppoes']['pppoe'])
+		foreach($config['pppoes']['pppoe'] as $pppoe)
+			if ($pppoe['mode'] == "server") {
+
+				$oic = array();
+				$oic['if'] = 'pppoe';
+				$oic['descr'] = 'pppoe';
+				$oic['ip'] = $pppoe['localip'];
+				$oic['sa'] = $pppoe['remoteip'];
+				$oic['mode'] = $pppoe['mode'];
+				$oic['virtual'] = true;
+				if($pppoe['pppoe_subnet'] <> "")
+					$oic['sn'] = $pppoe['pppoe_subnet'];
+				else
+					$oic['sn'] = "32";
+				$FilterIflist['pppoe'] = $oic;
+				//file_put_contents("/tmp/debug", $FilterIflist['pppoe']);
+			}
+
 	/* add ipsec interfaces */
 	if(isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable'])) {
 		$oic = array();
@@ -1304,14 +1310,21 @@ function filter_nat_rules_generate() {
 				$tonathosts .= "{$FilterIflist['pptp']['sa']}/{$pptp_subnet} ";
 			}
 		}
+
 		/* PPPoE subnet */
-		if(isset($FilterIflist['pppoe']) && $FilterIflist['pppoe']['mode'] == "server") {
+		if ($config['pppoes']['pppoe'])
+			foreach($config['pppoes']['pppoe'] as $pppoe)
+				if ($pppoe['mode'] == "server")
+					$server = true;
+
+		if(isset($FilterIflist['pppoe']) && $server) {
 			$pppoe_subnet = $FilterIflist['pppoe']['sn'];
 			if(is_private_ip($FilterIflist['pppoe']['sa']) && !empty($pppoe_subnet)) {
 				$numberofnathosts++;
 				$tonathosts .= "{$FilterIflist['pppoe']['sa']}/{$pppoe_subnet} ";
 			}
 		}
+
 		/* L2TP subnet */
 		if(isset($FilterIflist['l2tp']) && $FilterIflist['l2tp']['mode'] == "server") {
 			$l2tp_subnet = $FilterIflist['l2tp']['sn'];
diff --git a/usr/local/www/firewall_nat_1to1_edit.php b/usr/local/www/firewall_nat_1to1_edit.php
index 1a3ce77..fc31f01 100755
--- a/usr/local/www/firewall_nat_1to1_edit.php
+++ b/usr/local/www/firewall_nat_1to1_edit.php
@@ -284,9 +284,11 @@ function typesel_change() {
 						if(have_ruleint_access("pptp"))
 							$interfaces['pptp'] = "PPTP VPN";
 
-					if ($config['pppoe']['mode'] == "server")
-						if(have_ruleint_access("pppoe"))
-							$interfaces['pppoe'] = "PPPoE VPN";
+					if ($config['pppoes']['pppoe'])
+						foreach($config['pppoes']['pppoe'] as $pppoe)
+							if ($pppoe['mode'] == "server")
+								if(have_ruleint_access("pppoe"))
+									$interfaces['pppoe'] = "PPPoE VPN";
 
 					/* add ipsec interfaces */
 					if (isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable']))
diff --git a/usr/local/www/firewall_nat_edit.php b/usr/local/www/firewall_nat_edit.php
index 125a34f..e49a6d5 100755
--- a/usr/local/www/firewall_nat_edit.php
+++ b/usr/local/www/firewall_nat_edit.php
@@ -478,9 +478,12 @@ include("fbegin.inc"); ?>
 							if(have_ruleint_access("pptp"))
 								$interfaces['pptp'] = "PPTP VPN";
 
-						if ($config['pppoe']['mode'] == "server")
-							if(have_ruleint_access("pppoe"))
-								$interfaces['pppoe'] = "PPPoE VPN";
+
+							if ($config['pppoes']['pppoe'])
+								foreach($config['pppoes']['pppoe'] as $pppoe)
+									if ($pppoe['mode'] == "server")
+										if(have_ruleint_access("pppoe"))
+											$interfaces['pppoe'] = "PPPoE VPN";
 
 						/* add ipsec interfaces */
 						if (isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable']))
diff --git a/usr/local/www/firewall_nat_out_edit.php b/usr/local/www/firewall_nat_out_edit.php
index f03bded..4dff637 100755
--- a/usr/local/www/firewall_nat_out_edit.php
+++ b/usr/local/www/firewall_nat_out_edit.php
@@ -407,9 +407,11 @@ function poolopts_change() {
 					if(have_ruleint_access("pptp"))
 						$interfaces['pptp'] = "PPTP VPN";
 
-				if ($config['pppoe']['mode'] == "server")
-					if(have_ruleint_access("pppoe"))
-						$interfaces['pppoe'] = "PPPoE VPN";
+				if ($config['pppoes']['pppoe'])
+					foreach($config['pppoes']['pppoe'] as $pppoe)
+						if ($pppoe['mode'] == "server")
+							if(have_ruleint_access("pppoe"))
+								$interfaces['pppoe'] = "PPPoE VPN";
 
 				/* add ipsec interfaces */
 				if (isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable']))
diff --git a/usr/local/www/firewall_rules_edit.php b/usr/local/www/firewall_rules_edit.php
index 8933344..71f102b 100755
--- a/usr/local/www/firewall_rules_edit.php
+++ b/usr/local/www/firewall_rules_edit.php
@@ -682,10 +682,13 @@ include("head.inc");
 					if ($config['pptpd']['mode'] == "server")
 						if(have_ruleint_access("pptp")) 
 							$interfaces['pptp'] = "PPTP VPN";
-					
-					if ($config['pppoe']['mode'] == "server")
-						if(have_ruleint_access("pppoe")) 
-							$interfaces['pppoe'] = "PPPoE VPN";
+
+					if ($config['pppoes']['pppoe'])
+						foreach($config['pppoes']['pppoe'] as $pppoe)
+							if ($pppoe['mode'] == "server")
+								if(have_ruleint_access("pppoe"))
+									$interfaces['pppoe'] = "PPPoE VPN";
+
 					/* add ipsec interfaces */
 					if (isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable']))
 						if(have_ruleint_access("enc0")) 
