diff --git a/src/preferences/network/EthernetSettingsView.cpp b/src/preferences/network/EthernetSettingsView.cpp
index 0250b24..65404f0 100644
--- a/src/preferences/network/EthernetSettingsView.cpp
+++ b/src/preferences/network/EthernetSettingsView.cpp
@@ -57,6 +57,8 @@ static const uint32 kMsgField = 'fild';
 static const uint32 kMsgInfo = 'info';
 static const uint32 kMsgStaticMode = 'stcm';
 static const uint32 kMsgDHCPMode = 'dynm';
+static const uint32 kMsgIPv4Type = 'ipv4';
+static const uint32 kMsgIPv6Type = 'ipv6';
 static const uint32 kMsgDisabledMode = 'disa';
 static const uint32	kMsgChange = 'chng';
 static const uint32 kMsgNetwork = 'netw';
@@ -187,12 +189,21 @@ EthernetSettingsView::EthernetSettingsView()
 	layout->AddItem(fDomainTextControl->CreateLabelLayoutItem(), 0, 8);
 	layout->AddItem(fDomainTextControl->CreateTextViewLayoutItem(), 1, 8);
 
+	BPopUpMenu* inet4Menu = new BPopUpMenu("IP type");
+	inet4Menu->AddItem(new BMenuItem(B_TRANSLATE("IPv4 only"),
+		new BMessage(kMsgIPv4Type)));
+	inet4Menu->AddItem(new BMenuItem(B_TRANSLATE("IPv4 and IPv6"),
+		new BMessage(kMsgIPv6Type)));
+	fInet4MenuField = new BMenuField(B_TRANSLATE("IP Type:"), inet4Menu);
+	layout->AddItem(fInet4MenuField->CreateLabelLayoutItem(), 0, 9);
+	layout->AddItem(fInet4MenuField->CreateMenuBarLayoutItem(), 1, 9);
+
 	fErrorMessage = new BStringView("error", "");
 	fErrorMessage->SetAlignment(B_ALIGN_LEFT);
 	fErrorMessage->SetFont(be_bold_font);
 	fErrorMessage->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
 
-	layout->AddView(fErrorMessage, 1, 9);
+	layout->AddView(fErrorMessage, 1, 10);
 
 	// button group (TODO: move to window, but take care of
 	// enabling/disabling)
@@ -234,6 +245,7 @@ EthernetSettingsView::AttachedToWindow()
 	fDeviceMenuField->Menu()->SetTargetForItems(this);
 	fNetworkMenuField->Menu()->SetTargetForItems(this);
 	fTypeMenuField->Menu()->SetTargetForItems(this);
+	fInet4MenuField->Menu()->SetTargetForItems(this);
 
 	// Display settigs of first adapter on startup, if any
 	_ShowConfiguration(fSettings.ItemAt(0));
@@ -258,6 +270,11 @@ EthernetSettingsView::MessageReceived(BMessage* message)
 			fApplyButton->SetEnabled(true);
 			fRevertButton->SetEnabled(true);
 			break;
+		case kMsgIPv4Type:
+		case kMsgIPv6Type:
+			fApplyButton->SetEnabled(true);
+			fRevertButton->SetEnabled(true);
+			break;
 		case kMsgInfo:
 		{
 		 	const char* name;
@@ -332,6 +349,7 @@ EthernetSettingsView::_ShowConfiguration(Settings* settings)
 
 	fDeviceMenuField->SetEnabled(settings != NULL);
 	fTypeMenuField->SetEnabled(settings != NULL);
+	fInet4MenuField->SetEnabled(settings != NULL);
 
 	bool enableControls = false;
 	BMenuItem* item;
@@ -347,6 +365,13 @@ EthernetSettingsView::_ShowConfiguration(Settings* settings)
 	if (item != NULL)
 		item->SetMarked(true);
 
+	if (settings == NULL || settings->Inet4())
+		item = fInet4MenuField->Menu()->FindItem(B_TRANSLATE("IPv4 only"));
+	else
+		item = fInet4MenuField->Menu()->FindItem(B_TRANSLATE("IPv4 and IPv6"));
+	if (item != NULL)
+		item->SetMarked(true);
+
 	if (settings == NULL) {
 		if (!fNetworkMenuField->IsHidden(fNetworkMenuField))
 			fNetworkMenuField->Hide();
@@ -473,6 +498,10 @@ EthernetSettingsView::_ApplyControlsToConfiguration()
 		fSecondaryDNSTextControl->Text()));
 	fCurrentSettings->SetDomain(fDomainTextControl->Text());
 
+	fCurrentSettings->SetInet4(
+		strcmp(fInet4MenuField->Menu()->FindMarked()->Label(),
+			B_TRANSLATE("IPv4 only")) == 0);
+
 	fApplyButton->SetEnabled(false);
 	fRevertButton->SetEnabled(true);
 }
@@ -521,6 +550,9 @@ EthernetSettingsView::_SaveDNSConfiguration()
 				<< settings->Domain()
 				<< "\n";
 		}
+		if (settings->Inet4()) {
+			content << "options inet4\n";
+		}
 	}
 
 	file.Write(content.String(), content.Length());
diff --git a/src/preferences/network/EthernetSettingsView.h b/src/preferences/network/EthernetSettingsView.h
index 24fd31f..135ace4 100644
--- a/src/preferences/network/EthernetSettingsView.h
+++ b/src/preferences/network/EthernetSettingsView.h
@@ -57,6 +57,7 @@ private:
 				BMenuField*		fDeviceMenuField;
 				BMenuField*		fNetworkMenuField;
 				BMenuField*		fTypeMenuField;
+				BMenuField*		fInet4MenuField;
 				BTextControl*	fIPTextControl;
 				BTextControl*	fNetMaskTextControl;
 				BTextControl*	fGatewayTextControl;
diff --git a/src/preferences/network/Settings.cpp b/src/preferences/network/Settings.cpp
index 8601b56..747537d 100644
--- a/src/preferences/network/Settings.cpp
+++ b/src/preferences/network/Settings.cpp
@@ -36,7 +36,8 @@ Settings::Settings(const char* name)
 	:
 	fAuto(true),
 	fDisabled(false),
-	fNameServers(5, true)
+	fNameServers(5, true),
+	fInet4(true)
 {
 	fSocket = socket(AF_INET, SOCK_DGRAM, 0);
 	fName = name;
@@ -216,5 +217,6 @@ Settings::ReadConfiguration()
 				new BString(inet_ntoa(state->nsaddr_list[i].sin_addr)));
 		}
 		fDomain = state->dnsrch[0];
+		fInet4 = (state->options & RES_USE_INET4) != 0;
 	}
 }
diff --git a/src/preferences/network/Settings.h b/src/preferences/network/Settings.h
index 2f54ca7..6d03eaf 100644
--- a/src/preferences/network/Settings.h
+++ b/src/preferences/network/Settings.h
@@ -33,6 +33,8 @@ public:
 									{ fDisabled = disabled; }
 			void				SetWirelessNetwork(const char* name)
 									{ fWirelessNetwork.SetTo(name); }
+			void				SetInet4(bool inet4)
+									{ fInet4 = inet4; }
 
 			const char*			IP()  { return fIP.String(); }
 			const char*			Gateway()  { return fGateway.String(); }
@@ -41,6 +43,7 @@ public:
 			const char*			Domain() { return fDomain.String(); }
 			bool				AutoConfigure() { return fAuto; }
 			bool				IsDisabled() { return fDisabled; }
+			bool				Inet4() { return fInet4; }
 			const BString&		WirelessNetwork() { return fWirelessNetwork; }
 
 			BObjectList<BString>& NameServers() { return fNameServers; }
@@ -60,6 +63,7 @@ private:
 			bool				fDisabled;
 			BObjectList<BString> fNameServers;
 			BString				fWirelessNetwork;
+			bool				fInet4;
 };
 
 
