diff --git a/eclipse.pde.build/org.eclipse.pde.build/scripts/productBuild/allElements.xml b/eclipse.pde.build/org.eclipse.pde.build/scripts/productBuild/allElements.xml
index 1c2033f..e80dcd8 100644
--- a/eclipse.pde.build/org.eclipse.pde.build/scripts/productBuild/allElements.xml
+++ b/eclipse.pde.build/org.eclipse.pde.build/scripts/productBuild/allElements.xml
@@ -70,6 +70,20 @@
 		</ant>
  	</target>
 	
+	<property name="assemble.org.eclipse.pde.build.container.feature.freebsd.gtk.x86" value="true" />
+ 	<target name="assemble.org.eclipse.pde.build.container.feature.freebsd.gtk.x86">
+ 		<ant antfile="${assembleScriptName}" dir="${buildDirectory}">			
+ 			<property name="archiveName" value="${archiveNamePrefix}-freebsd.gtk.x86.zip"/>
+		</ant>
+ 	</target>
+	
+	<property name="assemble.org.eclipse.pde.build.container.feature.freebsd.gtk.x86_64" value="true" />
+ 	<target name="assemble.org.eclipse.pde.build.container.feature.freebsd.gtk.x86_64">
+ 		<ant antfile="${assembleScriptName}" dir="${buildDirectory}">			
+ 			<property name="archiveName" value="${archiveNamePrefix}-freebsd.gtk.x86_64.zip"/>
+		</ant>
+ 	</target>
+	
 	<property name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.x86" value="true" />
  	<target name="assemble.org.eclipse.pde.build.container.feature.linux.gtk.x86">
  		<ant antfile="${assembleScriptName}" dir="${buildDirectory}">			
diff --git a/eclipse.pde.build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Utils.java b/eclipse.pde.build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Utils.java
index 442bd6c..119ce58 100644
--- a/eclipse.pde.build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Utils.java
+++ b/eclipse.pde.build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Utils.java
@@ -694,7 +694,7 @@ public final class Utils implements IPDEBuildConstants, IBuildPropertiesConstant
 			arguments.add("-sf"); //$NON-NLS-1$
 			arguments.add(links[i]);
 			arguments.add(links[i + 1]);
-			script.printExecTask("ln", dir, arguments, "Linux"); //$NON-NLS-1$ //$NON-NLS-2$
+			script.printExecTask("ln", dir, arguments, "Linux,FreeBSD"); //$NON-NLS-1$ //$NON-NLS-2$
 			arguments.clear();
 		}
 	}
diff --git a/eclipse.pde.build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java b/eclipse.pde.build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
index 08540fa..582bc74 100644
--- a/eclipse.pde.build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
+++ b/eclipse.pde.build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
@@ -933,7 +933,7 @@ public class ModelBuildScriptGenerator extends AbstractBuildScriptGenerator {
 		for (int i = 0; i < links.length; i += 2) {
 			arguments.add(links[i]);
 			arguments.add(links[i + 1]);
-			script.printExecTask("ln -s", dir, arguments, "Linux"); //$NON-NLS-1$ //$NON-NLS-2$
+			script.printExecTask("ln -s", dir, arguments, "Linux,FreeBSD"); //$NON-NLS-1$ //$NON-NLS-2$
 			arguments.clear();
 		}
 	}
diff --git a/eclipse.pde.build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/JNLPGenerator.java b/eclipse.pde.build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/JNLPGenerator.java
index 5399a48..e395cb5 100644
--- a/eclipse.pde.build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/JNLPGenerator.java
+++ b/eclipse.pde.build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/JNLPGenerator.java
@@ -314,6 +314,8 @@ public class JNLPGenerator extends DefaultHandler {
 			return "HP-UX"; //$NON-NLS-1$
 		if ("aix".equalsIgnoreCase(os)) //$NON-NLS-1$
 			return "AIX"; //$NON-NLS-1$
+		if ("freebsd".equalsIgnoreCase(os)) //$NON-NLS-1$
+			return "FreeBSD"; //$NON-NLS-1$
 		return os;
 	}
 
diff --git a/eclipse.pde.build/org.eclipse.pde.build/templates/packager/customTargets.xml b/eclipse.pde.build/org.eclipse.pde.build/templates/packager/customTargets.xml
index eac9576..9081501 100644
--- a/eclipse.pde.build/org.eclipse.pde.build/templates/packager/customTargets.xml
+++ b/eclipse.pde.build/org.eclipse.pde.build/templates/packager/customTargets.xml
@@ -18,6 +18,18 @@
 		</ant>
 	</target>
 	
+	<target name="assemble.freebsd.gtk.x86.xml">
+		<ant antfile="${assembleScriptName}" >
+			<property name="archiveName" value="${archiveNamePrefix}-freebsd.gtk.x86.zip"/>
+		</ant>
+	</target>
+	
+	<target name="assemble.freebsd.gtk.x86_64.xml">
+		<ant antfile="${assembleScriptName}" >
+			<property name="archiveName" value="${archiveNamePrefix}-freebsd.gtk.x86_64.zip"/>
+		</ant>
+	</target>
+	
 	<target name="assemble.linux.gtk.x86.xml">
 		<ant antfile="${assembleScriptName}" >
 			<property name="archiveName" value="${archiveNamePrefix}-linux.gtk.x86.zip"/>
diff --git a/eclipse.pde.build/org.eclipse.pde.build/templates/packager/packaging.properties b/eclipse.pde.build/org.eclipse.pde.build/templates/packager/packaging.properties
index be53c51..7e89865 100644
--- a/eclipse.pde.build/org.eclipse.pde.build/templates/packager/packaging.properties
+++ b/eclipse.pde.build/org.eclipse.pde.build/templates/packager/packaging.properties
@@ -18,6 +18,8 @@ root.macosx.carbon.ppc.permissions.755=Eclipse.app/Contents/MacOS/eclipse
 
 root.win32.win32.x86=eclipse.exe, eclipsec.exe
 root.linux.motif.x86=eclipse,libcairo-swt.so,libXm.so.2,about_files/,about.html,icon.xpm
+root.freebsd.gtk.x86=eclipse,libcairo-swt.so,about_files/,about.html,icon.xpm
+root.freebsd.gtk.x86_64=eclipse,libcairo-swt.so,about_files/,about.html,icon.xpm
 root.linux.gtk.x86=eclipse,libcairo-swt.so,about_files/,about.html,icon.xpm
 root.linux.gtk.x86_64=eclipse,libcairo-swt.so,about_files/,about.html,icon.xpm
 root.linux.gtk.ppc=eclipse
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/ProductExportOperation.java b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/ProductExportOperation.java
index 436c5b0..dd4b3fc 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/ProductExportOperation.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/ProductExportOperation.java
@@ -336,6 +336,8 @@ public class ProductExportOperation extends FeatureExportOperation {
 					images = getExpandedPath(info.getIconPath(ILauncherInfo.LINUX_ICON));
 				} else if (configs[i][0].equals("macosx")) { //$NON-NLS-1$
 					images = getExpandedPath(info.getIconPath(ILauncherInfo.MACOSX_ICON));
+				} else if (configs[i][0].equals("freebsd")) { //$NON-NLS-1$
+					images = getExpandedPath(info.getIconPath(ILauncherInfo.FREEBSD_ICON));
 				}
 				if (images != null) {
 					if (icons.length() > 0)
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IArgumentsInfo.java b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IArgumentsInfo.java
index 617304c..e2a6a31 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IArgumentsInfo.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IArgumentsInfo.java
@@ -17,12 +17,14 @@ public interface IArgumentsInfo extends IProductObject {
 	public static final String P_PROG_ARGS_MAC = "programArgsMac"; //$NON-NLS-1$
 	public static final String P_PROG_ARGS_SOL = "programArgsSol"; //$NON-NLS-1$
 	public static final String P_PROG_ARGS_WIN = "programArgsWin"; //$NON-NLS-1$
+	public static final String P_PROG_ARGS_FRE = "programArgsFre"; //$NON-NLS-1$
 
 	public static final String P_VM_ARGS = "vmArgs"; //$NON-NLS-1$
 	public static final String P_VM_ARGS_LIN = "vmArgsLin"; //$NON-NLS-1$
 	public static final String P_VM_ARGS_MAC = "vmArgsMac"; //$NON-NLS-1$
 	public static final String P_VM_ARGS_SOL = "vmArgsSol"; //$NON-NLS-1$
 	public static final String P_VM_ARGS_WIN = "vmArgsWin"; //$NON-NLS-1$
+	public static final String P_VM_ARGS_FRE = "vmArgsFre"; //$NON-NLS-1$
 
 	public static final String P_ARGS_ARCH_X86 = "argsX86"; //$NON-NLS-1$
 	public static final String P_ARGS_ARCH_X86_64 = "argsX86_64"; //$NON-NLS-1$
@@ -37,6 +39,7 @@ public interface IArgumentsInfo extends IProductObject {
 	public static final int L_ARGS_MACOS = 2;
 	public static final int L_ARGS_SOLAR = 3;
 	public static final int L_ARGS_WIN32 = 4;
+	public static final int L_ARGS_FRBSD = 5;
 
 	public static final int L_ARGS_ARCH_ALL = 0;
 	public static final int L_ARGS_ARCH_X86 = 1;
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/ILauncherInfo.java b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/ILauncherInfo.java
index e88ee99..40628dc 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/ILauncherInfo.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/ILauncherInfo.java
@@ -12,6 +12,8 @@ package org.eclipse.pde.internal.core.iproduct;
 
 public interface ILauncherInfo extends IProductObject {
 
+	public static final String FREEBSD_ICON = "freebsdIcon"; //$NON-NLS-1$
+
 	public static final String LINUX_ICON = "linuxIcon"; //$NON-NLS-1$
 
 	public static final String MACOSX_ICON = "macosxIcon"; //$NON-NLS-1$
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ArgumentsInfo.java b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ArgumentsInfo.java
index 5dcda32..437aab8 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ArgumentsInfo.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ArgumentsInfo.java
@@ -20,12 +20,14 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 
 	private static final long serialVersionUID = 1L;
 	private String[] fProgramArgs = new String[8];
+	private String[] fProgramArgsFre = new String[8];
 	private String[] fProgramArgsLin = new String[8];
 	private String[] fProgramArgsMac = new String[8];
 	private String[] fProgramArgsSol = new String[8];
 	private String[] fProgramArgsWin = new String[8];
 
 	private String[] fVMArgs = new String[8];
+	private String[] fVMArgsFre = new String[8];
 	private String[] fVMArgsLin = new String[8];
 	private String[] fVMArgsMac = new String[8];
 	private String[] fVMArgsSol = new String[8];
@@ -34,11 +36,13 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 	public ArgumentsInfo(IProductModel model) {
 		super(model);
 		this.initializeArgs(fProgramArgs);
+		this.initializeArgs(fProgramArgsFre);
 		this.initializeArgs(fProgramArgsLin);
 		this.initializeArgs(fProgramArgsMac);
 		this.initializeArgs(fProgramArgsSol);
 		this.initializeArgs(fProgramArgsWin);
 		this.initializeArgs(fVMArgs);
+		this.initializeArgs(fVMArgsFre);
 		this.initializeArgs(fVMArgsLin);
 		this.initializeArgs(fVMArgsMac);
 		this.initializeArgs(fVMArgsSol);
@@ -66,6 +70,12 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 				if (isEditable())
 					firePropertyChanged(P_PROG_ARGS, old, fProgramArgs[arch]);
 				break;
+			case L_ARGS_FRBSD :
+				old = fProgramArgsFre[arch];
+				fProgramArgsFre[arch] = args;
+				if (isEditable())
+					firePropertyChanged(P_PROG_ARGS_FRE, old, fProgramArgsFre[arch]);
+				break;
 			case L_ARGS_LINUX :
 				old = fProgramArgsLin[arch];
 				fProgramArgsLin[arch] = args;
@@ -101,6 +111,8 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 		switch (platform) {
 			case L_ARGS_ALL :
 				return fProgramArgs[arch];
+			case L_ARGS_FRBSD :
+				return fProgramArgsFre[arch];
 			case L_ARGS_LINUX :
 				return fProgramArgsLin[arch];
 			case L_ARGS_MACOS :
@@ -150,6 +162,9 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 		} else if (Platform.OS_SOLARIS.equals(os)) {
 			archArgs = archIndex > 0 ? getProgramArguments(L_ARGS_SOLAR, archIndex) + " " + archArgsAllPlatforms : archArgsAllPlatforms; //$NON-NLS-1$
 			return getCompleteArgs(archArgs, getProgramArguments(L_ARGS_SOLAR), fProgramArgs[L_ARGS_ARCH_ALL]);
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			archArgs = archIndex > 0 ? getProgramArguments(L_ARGS_FRBSD, archIndex) + " " + archArgsAllPlatforms : archArgsAllPlatforms; //$NON-NLS-1$
+			return getCompleteArgs(archArgs, getProgramArguments(L_ARGS_FRBSD), fProgramArgs[L_ARGS_ARCH_ALL]);
 		} else {
 			return getCompleteArgs(archArgsAllPlatforms, "", fProgramArgs[L_ARGS_ALL]); //$NON-NLS-1$
 		}
@@ -170,6 +185,12 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 				if (isEditable())
 					firePropertyChanged(P_VM_ARGS, old, fVMArgs[arch]);
 				break;
+			case L_ARGS_FRBSD :
+				old = fVMArgsFre[arch];
+				fVMArgsFre[arch] = args;
+				if (isEditable())
+					firePropertyChanged(P_VM_ARGS_FRE, old, fVMArgsFre[arch]);
+				break;
 			case L_ARGS_LINUX :
 				old = fVMArgsLin[arch];
 				fVMArgsLin[arch] = args;
@@ -205,6 +226,8 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 		switch (platform) {
 			case L_ARGS_ALL :
 				return fVMArgs[arch];
+			case L_ARGS_FRBSD :
+				return fVMArgsFre[arch];
 			case L_ARGS_LINUX :
 				return fVMArgsLin[arch];
 			case L_ARGS_MACOS :
@@ -255,6 +278,9 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 		} else if (Platform.OS_SOLARIS.equals(os)) {
 			archArgs = archIndex > 0 ? getVMArguments(L_ARGS_SOLAR, archIndex) + " " + archArgsAllPlatforms : archArgsAllPlatforms; //$NON-NLS-1$
 			return getCompleteArgs(archArgs, getVMArguments(L_ARGS_SOLAR), fVMArgs[L_ARGS_ARCH_ALL]);
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			archArgs = archIndex > 0 ? getVMArguments(L_ARGS_FRBSD, archIndex) + " " + archArgsAllPlatforms : archArgsAllPlatforms; //$NON-NLS-1$
+			return getCompleteArgs(archArgs, getVMArguments(L_ARGS_FRBSD), fVMArgs[L_ARGS_ARCH_ALL]);
 		} else {
 			return getCompleteArgs(archArgsAllPlatforms, "", fVMArgs[L_ARGS_ARCH_ALL]); //$NON-NLS-1$
 		}
@@ -278,6 +304,9 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 				if (child.getNodeName().equals(P_PROG_ARGS)) {
 					parentArgs = fProgramArgs;
 					fProgramArgs[L_ARGS_ARCH_ALL] = getText(child).trim();
+				} else if (child.getNodeName().equals(P_PROG_ARGS_FRE)) {
+					parentArgs = fProgramArgsFre;
+					fProgramArgsFre[L_ARGS_ARCH_ALL] = getText(child).trim();
 				} else if (child.getNodeName().equals(P_PROG_ARGS_LIN)) {
 					parentArgs = fProgramArgsLin;
 					fProgramArgsLin[L_ARGS_ARCH_ALL] = getText(child).trim();
@@ -293,6 +322,9 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 				} else if (child.getNodeName().equals(P_VM_ARGS)) {
 					parentArgs = fVMArgs;
 					fVMArgs[L_ARGS_ARCH_ALL] = getText(child).trim();
+				} else if (child.getNodeName().equals(P_VM_ARGS_FRE)) {
+					parentArgs = fVMArgsFre;
+					fVMArgsFre[L_ARGS_ARCH_ALL] = getText(child).trim();
 				} else if (child.getNodeName().equals(P_VM_ARGS_LIN)) {
 					parentArgs = fVMArgsLin;
 					fVMArgsLin[L_ARGS_ARCH_ALL] = getText(child).trim();
@@ -353,6 +385,15 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 			writeArchArgs(fProgramArgs, subIndent, writer);
 			writer.println(subIndent + "</" + P_PROG_ARGS + ">"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		if (hasArgs(fProgramArgsFre)) {
+			writer.print(subIndent + "<" + P_PROG_ARGS_FRE + ">"); //$NON-NLS-1$ //$NON-NLS-2$
+			if (fProgramArgsFre[L_ARGS_ARCH_ALL].length() > 0) {
+				writer.print(getWritableString(fProgramArgsFre[L_ARGS_ARCH_ALL]));
+			}
+			writer.println();
+			writeArchArgs(fProgramArgsFre, subIndent, writer);
+			writer.println(subIndent + "</" + P_PROG_ARGS_FRE + ">"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 		if (hasArgs(fProgramArgsLin)) {
 			writer.print(subIndent + "<" + P_PROG_ARGS_LIN + ">"); //$NON-NLS-1$ //$NON-NLS-2$
 			if (fProgramArgsLin[L_ARGS_ARCH_ALL].length() > 0) {
@@ -398,6 +439,15 @@ public class ArgumentsInfo extends ProductObject implements IArgumentsInfo {
 			writeArchArgs(fVMArgs, subIndent, writer);
 			writer.println(subIndent + "</" + P_VM_ARGS + ">"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		if (hasArgs(fVMArgsFre)) {
+			writer.print(subIndent + "<" + P_VM_ARGS_FRE + ">"); //$NON-NLS-1$ //$NON-NLS-2$
+			if (fVMArgsFre[L_ARGS_ARCH_ALL].length() > 0) {
+				writer.print(getWritableString(fVMArgsFre[L_ARGS_ARCH_ALL]));
+			}
+			writer.println();
+			writeArchArgs(fVMArgsFre, subIndent, writer);
+			writer.println(subIndent + "</" + P_VM_ARGS_FRE + ">"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 		if (hasArgs(fVMArgsLin)) {
 			writer.print(subIndent + "<" + P_VM_ARGS_LIN + ">"); //$NON-NLS-1$ //$NON-NLS-2$
 			if (fVMArgsLin[L_ARGS_ARCH_ALL].length() > 0) {
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ConfigurationFileInfo.java b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ConfigurationFileInfo.java
index c3c286b..ab12da0 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ConfigurationFileInfo.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ConfigurationFileInfo.java
@@ -24,11 +24,13 @@ public class ConfigurationFileInfo extends ProductObject implements IConfigurati
 	private String fUse;
 	private String fPath;
 
+	private static final String FRE = Constants.OS_FREEBSD;
 	private static final String LIN = Constants.OS_LINUX;
 	private static final String MAC = Constants.OS_MACOSX;
 	private static final String SOL = Constants.OS_SOLARIS;
 	private static final String WIN = Constants.OS_WIN32;
 
+	private String fFrePath, fFreUse;
 	private String fLinPath, fLinUse;
 	private String fMacPath, fMacUse;
 	private String fSolPath, fSolUse;
@@ -79,6 +81,9 @@ public class ConfigurationFileInfo extends ProductObject implements IConfigurati
 					} else if (child.getNodeName().equals(WIN)) {
 						fWinPath = getText(child);
 						fWinUse = fWinPath == null ? "default" : "custom"; //$NON-NLS-1$ //$NON-NLS-2$
+					} else if (child.getNodeName().equals(FRE)) {
+						fFrePath = getText(child);
+						fFreUse = fFrePath == null ? "default" : "custom"; //$NON-NLS-1$ //$NON-NLS-2$
 					}
 				}
 			}
@@ -101,6 +106,10 @@ public class ConfigurationFileInfo extends ProductObject implements IConfigurati
 					fWinPath = fWinPath == null ? fPath : null;
 					fWinUse = "custom"; //$NON-NLS-1$
 				}
+				if (fFreUse == null) {
+					fFrePath = fFrePath == null ? fPath : null;
+					fFreUse = "custom"; //$NON-NLS-1$
+				}
 				// null out things
 				fPath = null;
 				fUse = "default"; //$NON-NLS-1$
@@ -159,6 +168,12 @@ public class ConfigurationFileInfo extends ProductObject implements IConfigurati
 			writer.print(getWritableString(fWinPath.trim()));
 			writer.println("</" + WIN + ">"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		if (fFrePath != null) {
+			writer.print(indent);
+			writer.print("   <" + FRE + ">"); //$NON-NLS-1$ //$NON-NLS-2$
+			writer.print(getWritableString(fFrePath.trim()));
+			writer.println("</" + FRE + ">"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 
 		writer.print(indent + "</configIni>"); //$NON-NLS-1$
 		writer.println();
@@ -192,6 +207,11 @@ public class ConfigurationFileInfo extends ProductObject implements IConfigurati
 			fSolUse = use;
 			if (isEditable())
 				firePropertyChanged(SOL, old, fSolUse);
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			String old = fFreUse;
+			fFreUse = use;
+			if (isEditable())
+				firePropertyChanged(FRE, old, fFreUse);
 		}
 	}
 
@@ -207,6 +227,8 @@ public class ConfigurationFileInfo extends ProductObject implements IConfigurati
 			return fMacUse;
 		} else if (Platform.OS_SOLARIS.equals(os)) {
 			return fSolUse;
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			return fFreUse;
 		}
 		return null;
 	}
@@ -239,6 +261,11 @@ public class ConfigurationFileInfo extends ProductObject implements IConfigurati
 			fSolPath = path;
 			if (isEditable())
 				firePropertyChanged(SOL, old, fSolPath);
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			String old = fFrePath;
+			fFrePath = path;
+			if (isEditable())
+				firePropertyChanged(FRE, old, fFrePath);
 		}
 	}
 
@@ -254,6 +281,8 @@ public class ConfigurationFileInfo extends ProductObject implements IConfigurati
 			return fMacPath;
 		} else if (Platform.OS_SOLARIS.equals(os)) {
 			return fSolPath;
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			return fFrePath;
 		}
 		return null;
 	}
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/JREInfo.java b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/JREInfo.java
index e0d0333..d8b9100 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/JREInfo.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/JREInfo.java
@@ -22,17 +22,20 @@ import org.w3c.dom.NodeList;
 
 public class JREInfo extends ProductObject implements IJREInfo {
 
+	private static final String JRE_FRE = "freebsd"; //$NON-NLS-1$
 	private static final String JRE_LIN = "linux"; //$NON-NLS-1$
 	private static final String JRE_MAC = "macos"; //$NON-NLS-1$
 	private static final String JRE_SOL = "solaris"; //$NON-NLS-1$
 	private static final String JRE_WIN = "windows"; //$NON-NLS-1$
 
 	private static final long serialVersionUID = 1L;
+	private IPath fJVMFre;
 	private IPath fJVMLin;
 	private IPath fJVMMac;
 	private IPath fJVMSol;
 	private IPath fJVMWin;
 
+	private boolean bIncludeFre;
 	private boolean bIncludeLin;
 	private boolean bIncludeMac;
 	private boolean bIncludeSol;
@@ -54,6 +57,8 @@ public class JREInfo extends ProductObject implements IJREInfo {
 			return fJVMMac;
 		} else if (Platform.OS_SOLARIS.equals(os)) {
 			return fJVMSol;
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			return fJVMFre;
 		}
 		return null;
 	}
@@ -82,6 +87,11 @@ public class JREInfo extends ProductObject implements IJREInfo {
 			fJVMSol = jreContainerPath;
 			if (isEditable())
 				firePropertyChanged(JRE_SOL, old, fJVMSol);
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			IPath old = fJVMFre;
+			fJVMFre = jreContainerPath;
+			if (isEditable())
+				firePropertyChanged(JRE_FRE, old, fJVMFre);
 		}
 	}
 
@@ -118,6 +128,9 @@ public class JREInfo extends ProductObject implements IJREInfo {
 				} else if (child.getNodeName().equals(JRE_SOL)) {
 					fJVMSol = getPath(child);
 					bIncludeSol = include;
+				} else if (child.getNodeName().equals(JRE_FRE)) {
+					fJVMFre = getPath(child);
+					bIncludeFre = include;
 				} else if (child.getNodeName().equals(JRE_WIN)) {
 					fJVMWin = getPath(child);
 					bIncludeWin = include;
@@ -166,6 +179,12 @@ public class JREInfo extends ProductObject implements IJREInfo {
 			writer.print(fJVMSol.toPortableString());
 			writer.println("</" + JRE_SOL + ">"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		if (fJVMFre != null) {
+			writer.print(indent);
+			writer.print("   <" + JRE_FRE + " include=\"" + String.valueOf(bIncludeFre) + "\">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			writer.print(fJVMFre.toPortableString());
+			writer.println("</" + JRE_FRE + ">"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 		if (fJVMWin != null) {
 			writer.print(indent);
 			writer.print("   <" + JRE_WIN + " include=\"" + String.valueOf(bIncludeWin) + "\">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -184,6 +203,8 @@ public class JREInfo extends ProductObject implements IJREInfo {
 			return bIncludeMac;
 		} else if (Platform.OS_SOLARIS.equals(os)) {
 			return bIncludeSol;
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			return bIncludeFre;
 		}
 		return false;
 	}
@@ -209,6 +230,11 @@ public class JREInfo extends ProductObject implements IJREInfo {
 			bIncludeSol = includeJRE;
 			if (isEditable())
 				firePropertyChanged(JRE_SOL, old, Boolean.valueOf(bIncludeSol));
+		} else if (Platform.OS_FREEBSD.equals(os)) {
+			Boolean old = Boolean.valueOf(bIncludeFre);
+			bIncludeFre = includeJRE;
+			if (isEditable())
+				firePropertyChanged(JRE_FRE, old, Boolean.valueOf(bIncludeFre));
 		}
 	}
 
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/LauncherInfo.java b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/LauncherInfo.java
index 9387921..5e461cc 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/LauncherInfo.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/LauncherInfo.java
@@ -71,7 +71,9 @@ public class LauncherInfo extends ProductObject implements ILauncherInfo {
 				Node child = children.item(i);
 				if (child.getNodeType() == Node.ELEMENT_NODE) {
 					String name = child.getNodeName();
-					if (name.equals("linux")) { //$NON-NLS-1$
+					if (name.equals("freebsd")) { //$NON-NLS-1$
+						parseFreeBSD((Element) child);
+					} else if (name.equals("linux")) { //$NON-NLS-1$
 						parseLinux((Element) child);
 					} else if (name.equals("macosx")) { //$NON-NLS-1$
 						parseMac((Element) child);
@@ -122,13 +124,18 @@ public class LauncherInfo extends ProductObject implements ILauncherInfo {
 		fIcons.put(LINUX_ICON, element.getAttribute("icon")); //$NON-NLS-1$
 	}
 
+	private void parseFreeBSD(Element element) {
+		fIcons.put(FREEBSD_ICON, element.getAttribute("icon")); //$NON-NLS-1$
+	}
+
	@Override
 	public void write(String indent, PrintWriter writer) {
 		writer.print(indent + "<launcher"); //$NON-NLS-1$
 		if (fLauncherName != null && fLauncherName.length() > 0)
 			writer.print(" name=\"" + fLauncherName + "\""); //$NON-NLS-1$ //$NON-NLS-2$
 		writer.println(">"); //$NON-NLS-1$
 
+		writeFreeBSD(indent + "   ", writer); //$NON-NLS-1$
 		writeLinux(indent + "   ", writer); //$NON-NLS-1$
 		writeMac(indent + "   ", writer); //$NON-NLS-1$
 		writeSolaris(indent + "   ", writer); //$NON-NLS-1$
@@ -182,4 +189,10 @@ public class LauncherInfo extends ProductObject implements ILauncherInfo {
 			writer.println(indent + "<linux icon=\"" + getWritableString(icon) + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$ 
 	}
 
+	private void writeFreeBSD(String indent, PrintWriter writer) {
+		String icon = fIcons.get(FREEBSD_ICON);
+		if (icon != null && icon.length() > 0)
+			writer.println(indent + "<freebsd icon=\"" + getWritableString(icon) + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$ 
+	}
+
 }
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/rcp/IntroTemplate.java b/eclipse.pde.ui/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/rcp/IntroTemplate.java
index 8ee34a0..d6aaf40 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/rcp/IntroTemplate.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/rcp/IntroTemplate.java
@@ -160,7 +160,7 @@ public class IntroTemplate extends PDETemplateSection {
 		presentationElement.setAttribute("home-page-id", "root"); //$NON-NLS-1$ //$NON-NLS-2$
 		IPluginElement implementationElement = factory.createElement(presentationElement);
 		implementationElement.setName("implementation"); //$NON-NLS-1$
-		implementationElement.setAttribute("os", "win32,linux,macosx"); //$NON-NLS-1$ //$NON-NLS-2$
+		implementationElement.setAttribute("os", "win32,linux,macosx,freebsd"); //$NON-NLS-1$ //$NON-NLS-2$
 		if (getTargetVersion() == 3.0)
 			implementationElement.setAttribute("style", "content/shared.css"); //$NON-NLS-1$//$NON-NLS-2$
 
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
index 32e395e..994e51d 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
@@ -1004,6 +1004,7 @@ public class PDEUIMessages extends NLS {
 	public static String LauncherSection_48High;
 	public static String LauncherSection_256High;
 	public static String LauncherSection_linuxLabel;
+	public static String LauncherSection_freebsdLabel;
 	public static String LauncherSection_large;
 	public static String LauncherSection_medium;
 	public static String LauncherSection_small;
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ArgumentsSection.java b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ArgumentsSection.java
index 06ee395..ee92f5c 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ArgumentsSection.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ArgumentsSection.java
@@ -34,6 +34,7 @@ public class ArgumentsSection extends PDESection {
 	private static final String[] TAB_LABELS = new String[5];
 	static {
 		TAB_LABELS[IArgumentsInfo.L_ARGS_ALL] = PDEUIMessages.ArgumentsSection_allPlatforms;
+		TAB_LABELS[IArgumentsInfo.L_ARGS_FRBSD] = "freebsd"; //$NON-NLS-1$
 		TAB_LABELS[IArgumentsInfo.L_ARGS_LINUX] = "linux"; //$NON-NLS-1$
 		TAB_LABELS[IArgumentsInfo.L_ARGS_MACOS] = "macosx"; //$NON-NLS-1$
 		TAB_LABELS[IArgumentsInfo.L_ARGS_SOLAR] = "solaris"; //$NON-NLS-1$
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ConfigurationSection.java b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ConfigurationSection.java
index e6bde32..6334e65 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ConfigurationSection.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ConfigurationSection.java
@@ -50,8 +50,8 @@ public class ConfigurationSection extends PDESection {
 	private FormEntry fCustomEntry;
 	private boolean fBlockChanges;
 
-	private static final String[] TAB_LABELS = {"linux", "macosx", "solaris", "win32"}; //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-	private static final String[] TAB_OS = {Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_SOLARIS, Platform.OS_WIN32};
+	private static final String[] TAB_LABELS = {"freebsd", "linux", "macosx", "solaris", "win32"}; //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+	private static final String[] TAB_OS = {Platform.OS_FREEBSD, Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_SOLARIS, Platform.OS_WIN32};
 
 	private CTabFolder fTabFolder;
 	private int fLastTab;
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/JRESection.java b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/JRESection.java
index e51b309..d44ec23 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/JRESection.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/JRESection.java
@@ -63,8 +63,8 @@ public class JRESection extends PDESection {
 	private ComboViewerPart fEEsCombo;
 	private boolean fBlockChanges;
 
-	private static final String[] TAB_LABELS = {"linux", "macosx", "solaris", "win32"}; //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-	private static final String[] TAB_OS = {Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_SOLARIS, Platform.OS_WIN32};
+	private static final String[] TAB_LABELS = {"freebsd", "linux", "macosx", "solaris", "win32"}; //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+	private static final String[] TAB_OS = {Platform.OS_FREEBSD, Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_SOLARIS, Platform.OS_WIN32};
 
 	private CTabFolder fTabFolder;
 	private int fLastTab;
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/LauncherSection.java b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/LauncherSection.java
index 7be4406..92d3bcd 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/LauncherSection.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/LauncherSection.java
@@ -60,6 +60,7 @@ public class LauncherSection extends PDESection {
 	private CTabFolder fTabFolder;
 	private Composite fNotebook;
 	private StackLayout fNotebookLayout;
+	private Composite fFreeBSDSection;
 	private Composite fLinuxSection;
 	private Composite fMacSection;
 	private Composite fSolarisSection;
@@ -156,6 +157,7 @@ public class LauncherSection extends PDESection {
 		fNotebookLayout = new StackLayout();
 		fNotebook.setLayout(fNotebookLayout);
 
+		fFreeBSDSection = addFreeBSDSection(fNotebook, toolkit);
 		fLinuxSection = addLinuxSection(fNotebook, toolkit);
 		fMacSection = addMacSection(fNotebook, toolkit);
 		fSolarisSection = addSolarisSection(fNotebook, toolkit);
@@ -181,6 +183,7 @@ public class LauncherSection extends PDESection {
 	}
 
 	private void createTabs() {
+		addTab("freebsd"); //$NON-NLS-1$
 		addTab("linux"); //$NON-NLS-1$
 		addTab("macosx"); //$NON-NLS-1$
 		addTab("solaris"); //$NON-NLS-1$
@@ -188,16 +191,19 @@ public class LauncherSection extends PDESection {
 
 		String currentTarget = TargetPlatform.getOS();
 		if ("win32".equals(currentTarget)) { //$NON-NLS-1$
-			fTabFolder.setSelection(3);
+			fTabFolder.setSelection(4);
 			fNotebookLayout.topControl = fWin32Section;
 		} else if ("macosx".equals(currentTarget)) { //$NON-NLS-1$
-			fTabFolder.setSelection(1);
+			fTabFolder.setSelection(2);
 			fNotebookLayout.topControl = fMacSection;
 		} else if ("solaris".equals(currentTarget)) { //$NON-NLS-1$
-			fTabFolder.setSelection(2);
+			fTabFolder.setSelection(3);
 			fNotebookLayout.topControl = fSolarisSection;
-		} else {
+		} else if ("freebsd".equals(currentTarget)) { //$NON-NLS-1$
 			fTabFolder.setSelection(0);
+			fNotebookLayout.topControl = fFreeBSDSection;
+		} else {
+			fTabFolder.setSelection(1);
 			fNotebookLayout.topControl = fLinuxSection;
 		}
 	}
@@ -290,6 +296,14 @@ public class LauncherSection extends PDESection {
 		}
 	}
 
+	private Composite addFreeBSDSection(Composite parent, FormToolkit toolkit) {
+		Composite comp = createComposite(parent, toolkit);
+		createLabel(comp, toolkit, PDEUIMessages.LauncherSection_freebsdLabel, 3);
+		fIcons.add(new IconEntry(comp, toolkit, PDEUIMessages.LauncherSection_icon, ILauncherInfo.FREEBSD_ICON));
+		toolkit.paintBordersFor(comp);
+		return comp;
+	}
+
 	private Composite addLinuxSection(Composite parent, FormToolkit toolkit) {
 		Composite comp = createComposite(parent, toolkit);
 		createLabel(comp, toolkit, PDEUIMessages.LauncherSection_linuxLabel, 3);
@@ -446,7 +460,7 @@ public class LauncherSection extends PDESection {
 	}
 
 	private String getExtension(String iconId) {
-		if (iconId.equals(ILauncherInfo.LINUX_ICON))
+		if (iconId.equals(ILauncherInfo.LINUX_ICON) || iconId.equals(ILauncherInfo.FREEBSD_ICON))
 			return "xpm"; //$NON-NLS-1$
 		if (iconId.equals(ILauncherInfo.MACOSX_ICON))
 			return "icns"; //$NON-NLS-1$
@@ -473,15 +487,18 @@ public class LauncherSection extends PDESection {
 		Control oldPage = fNotebookLayout.topControl;
 		switch (index) {
 			case 0 :
-				fNotebookLayout.topControl = fLinuxSection;
+				fNotebookLayout.topControl = fFreeBSDSection;
 				break;
 			case 1 :
-				fNotebookLayout.topControl = fMacSection;
+				fNotebookLayout.topControl = fLinuxSection;
 				break;
 			case 2 :
-				fNotebookLayout.topControl = fSolarisSection;
+				fNotebookLayout.topControl = fMacSection;
 				break;
 			case 3 :
+				fNotebookLayout.topControl = fSolarisSection;
+				break;
+			case 4 :
 				fNotebookLayout.topControl = fWin32Section;
 				break;
 		}
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
index fecf4aa..de25e4f 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
@@ -596,6 +596,7 @@ LauncherSection_48Low=48x48 (8-bit):
 LauncherSection_48High=48x48 (32-bit):
 LauncherSection_256High=256x256 (32-bit):
 LauncherSection_linuxLabel=A single XPM icon is required:
+LauncherSection_freebsdLabel=A single XPM icon is required:
 LauncherSection_large=Large:
 LauncherSection_medium=Medium:
 LauncherSection_small=Small:
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/product/ProductIntroOperation.java b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/product/ProductIntroOperation.java
index 3c8c426..fa46f72 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/product/ProductIntroOperation.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/product/ProductIntroOperation.java
@@ -128,7 +128,7 @@ public class ProductIntroOperation extends BaseManifestOperation implements IVar
 		implementation.setName("implementation"); //$NON-NLS-1$
 		implementation.setAttribute("kind", "html"); //$NON-NLS-1$ //$NON-NLS-2$
 		implementation.setAttribute("style", "content/shared.css"); //$NON-NLS-1$ //$NON-NLS-2$
-		implementation.setAttribute("os", "win32,linux,macosx"); //$NON-NLS-1$ //$NON-NLS-2$
+		implementation.setAttribute("os", "win32,linux,macosx,freebsd"); //$NON-NLS-1$ //$NON-NLS-2$
 
 		presentation.add(implementation);
 
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PropertiesSection.java b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PropertiesSection.java
index bcedc5e..a313d19 100644
--- a/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PropertiesSection.java
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PropertiesSection.java
@@ -106,7 +106,7 @@ public class PropertiesSection extends TableSection {
		private IConfigurationProperty fEdit;
		private Set<String> fExistingNames;

-		private String[] COMBO_OSLABELS = new String[] {PDEUIMessages.PropertiesSection_All, Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_SOLARIS, Platform.OS_WIN32};
+		private String[] COMBO_OSLABELS = new String[] {PDEUIMessages.PropertiesSection_All, Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_SOLARIS, Platform.OS_WIN32, Platform.OS_FREEBSD};
		private String[] COMBO_ARCHLABELS = new String[] {PDEUIMessages.PropertiesSection_All, Platform.ARCH_X86, Platform.ARCH_X86_64, Platform.ARCH_PPC, Platform.ARCH_IA64, Platform.ARCH_IA64_32, Platform.ARCH_PA_RISC, Platform.ARCH_SPARC};
 
		public PropertyDialog(Shell shell, IConfigurationProperty property, Set<String> existingNames) {
diff --git a/eclipse.platform.releng/features/org.eclipse.platform-feature/pom.xml b/eclipse.platform.releng/features/org.eclipse.platform-feature/pom.xml
index 7e7e8ac..72c8597 100644
--- a/eclipse.platform.releng/features/org.eclipse.platform-feature/pom.xml
+++ b/eclipse.platform.releng/features/org.eclipse.platform-feature/pom.xml
@@ -60,6 +60,7 @@
                 <plugin id="org.eclipse.core.filesystem.aix.ppc"/>
                 <plugin id="org.eclipse.core.filesystem.aix.ppc64"/>
                 <plugin id="org.eclipse.core.filesystem.hpux.ia64"/>
+                <plugin id="org.eclipse.core.filesystem.freebsd.%%ECLIPSE_ARCH%%"/>
                 <plugin id="org.eclipse.core.filesystem.linux.x86"/>
                 <plugin id="org.eclipse.core.filesystem.linux.x86_64"/>
                 <plugin id="org.eclipse.core.filesystem.solaris.sparc"/>
@@ -70,6 +71,7 @@
                 <plugin id="org.eclipse.core.filesystem.linux.ppc64le"/>
                 <plugin id="org.eclipse.core.resources.win32.x86"/>
                 <plugin id="org.eclipse.core.resources.win32.x86_64"/>
+                <plugin id="org.eclipse.core.net.freebsd.%%ECLIPSE_ARCH%%"/>
                 <plugin id="org.eclipse.core.net.linux.x86"/>
                 <plugin id="org.eclipse.core.net.linux.x86_64"/>
                 <plugin id="org.eclipse.core.net.win32.x86"/>
diff --git a/eclipse.platform.releng/features/org.eclipse.sdk.examples-feature/pom.xml b/eclipse.platform.releng/features/org.eclipse.sdk.examples-feature/pom.xml
index d8c8edf..886e7d8 100644
--- a/eclipse.platform.releng/features/org.eclipse.sdk.examples-feature/pom.xml
+++ b/eclipse.platform.releng/features/org.eclipse.sdk.examples-feature/pom.xml
@@ -39,11 +39,9 @@
               <features>
                 <feature id="org.eclipse.sdk.examples"/>
               </features>
-              <!-- 
               <excludes>
-                <plugin id="org.eclipse.sdk.examples"/>
+                <plugin id="org.eclipse.swt.examples.ole.win32"/>
               </excludes>
-               -->
             </configuration>
           </execution>
         </executions>
diff --git a/eclipse.platform.resources/bundles/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/LocalFileSystem.java b/eclipse.platform.resources/bundles/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/LocalFileSystem.java
index a335001..003e20a 100644
--- a/eclipse.platform.resources/bundles/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/LocalFileSystem.java
+++ b/eclipse.platform.resources/bundles/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/LocalFileSystem.java
@@ -98,7 +98,7 @@ public class LocalFileSystem extends FileSystem {
 		String arch = System.getProperty("osgi.arch", ""); //$NON-NLS-1$ //$NON-NLS-2$
 		if (os.equals(Constants.OS_WIN32))
 			attributes |= EFS.ATTRIBUTE_ARCHIVE | EFS.ATTRIBUTE_HIDDEN;
-		else if (os.equals(Constants.OS_LINUX) || (os.equals(Constants.OS_SOLARIS) && arch.equals(Constants.ARCH_SPARC)))
+		else if (os.equals(Constants.OS_FREEBSD) || os.equals(Constants.OS_LINUX) || (os.equals(Constants.OS_SOLARIS) && arch.equals(Constants.ARCH_SPARC)))
 			attributes |= EFS.ATTRIBUTE_EXECUTABLE | EFS.ATTRIBUTE_SYMLINK | EFS.ATTRIBUTE_LINK_TARGET;
 		else if (os.equals(Constants.OS_MACOSX) || os.equals(Constants.OS_HPUX) || os.equals(Constants.OS_QNX))
 			attributes |= EFS.ATTRIBUTE_EXECUTABLE;
diff --git a/eclipse.platform.resources/pom.xml b/eclipse.platform.resources/pom.xml
index 4b33285..6b6fcc7 100644
--- a/eclipse.platform.resources/pom.xml
+++ b/eclipse.platform.resources/pom.xml
@@ -43,6 +43,7 @@
 
   <modules>
     <module>bundles/org.eclipse.core.filesystem</module>
+    <module>bundles/org.eclipse.core.filesystem/fragments/org.eclipse.core.filesystem.freebsd.%%ECLIPSE_ARCH%%</module>
     <module>bundles/org.eclipse.core.filesystem.hpux.ia64</module>
     <module>bundles/org.eclipse.core.filesystem.hpux.PA_RISC</module>
     <module>bundles/org.eclipse.core.filesystem.linux.ppc</module>
diff --git a/eclipse.platform.resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/filesystem/SymlinkTest.java b/eclipse.platform.resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/filesystem/SymlinkTest.java
index 7c8ad8c..b15bbf6 100644
--- a/eclipse.platform.resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/filesystem/SymlinkTest.java
+++ b/eclipse.platform.resources/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/filesystem/SymlinkTest.java
@@ -339,7 +339,7 @@ public class SymlinkTest extends FileSystemTest {
 	public void testSymlinkEnabled() {
 		String os = Platform.getOS();
 		String arch = Platform.getOSArch();
-		if (Platform.OS_LINUX.equals(os) || (Platform.OS_SOLARIS.equals(os) && Platform.ARCH_SPARC.equals(arch)) || Platform.OS_MACOSX.equals(os) || Platform.OS_AIX.equals(os) || isWindowsVistaOrHigher()) {
+		if (Platform.OS_FREEBSD.equals(os) || Platform.OS_LINUX.equals(os) || (Platform.OS_SOLARIS.equals(os) && Platform.ARCH_SPARC.equals(arch)) || Platform.OS_MACOSX.equals(os) || Platform.OS_AIX.equals(os) || isWindowsVistaOrHigher()) {
 			assertTrue(haveSymlinks());
 		} else {
 			assertFalse(haveSymlinks());
diff --git a/eclipse.platform.runtime/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java b/eclipse.platform.runtime/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
index 8ace8e8..21ba40f 100644
--- a/eclipse.platform.runtime/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
+++ b/eclipse.platform.runtime/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
@@ -62,7 +62,7 @@ public final class InternalPlatform {
 	//XXX This is not synchronized
 	private static Map logs = new HashMap(5);
 
-	private static final String[] OS_LIST = {Platform.OS_AIX, Platform.OS_HPUX, Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_QNX, Platform.OS_SOLARIS, Platform.OS_WIN32};
+	private static final String[] OS_LIST = {Platform.OS_AIX, Platform.OS_FREEBSD, Platform.OS_HPUX, Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_QNX, Platform.OS_SOLARIS, Platform.OS_WIN32};
 	private static String password = ""; //$NON-NLS-1$
 	private static final String PASSWORD = "-password"; //$NON-NLS-1$
 
diff --git a/eclipse.platform.runtime/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Platform.java b/eclipse.platform.runtime/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Platform.java
index 18b64e4..344be72 100644
--- a/eclipse.platform.runtime/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Platform.java
+++ b/eclipse.platform.runtime/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Platform.java
@@ -261,6 +261,17 @@ public final class Platform {
 	public static final String OS_MACOSX = "macosx";//$NON-NLS-1$
 
 	/**
+	 * Constant string (value "freebsd") indicating the platform is running on a
+	 * FreeBSD operating system.
+	 * <p>
+	 * Note this constant is not officially supported by the eclipse project
+	 * and is only available on eclipse versions built from the FreeBSD ports
+	 * tree.
+	 * </p>
+	 */
+	public static final String OS_FREEBSD = "freebsd";//$NON-NLS-1$
+
+	/**
 	 * Constant string (value "unknown") indicating the platform is running on a
 	 * machine running an unknown operating system.
 	 * <p>
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom.cpp b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom.cpp
index 7c713c7..f166708 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom.cpp	
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom.cpp	
@@ -180,7 +180,7 @@ JNIEXPORT jint JNICALL XPCOM_NATIVE(_1NS_1NewLocalFile)
 	jint rc = 0;
 	XPCOM_NATIVE_ENTER(env, that, _1NS_1NewLocalFile_FUNC);
 	if (arg2) if ((lparg2 = env->GetIntLongArrayElements(arg2, NULL)) == NULL) goto fail;
-	rc = (jint)NS_NewLocalFile(*(nsAString *)arg0, arg1, (nsILocalFile**)lparg2);
+	rc = (jint)NS_NewLocalFile(*(nsAString *)arg0, arg1, (nsIFile**)lparg2);
 fail:
 	if (arg2 && lparg2) env->ReleaseIntLongArrayElements(arg2, lparg2, 0);
 	XPCOM_NATIVE_EXIT(env, that, _1NS_1NewLocalFile_FUNC);
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom.h b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom.h
index afc18ec..3b6da84 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom.h	
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom.h	
@@ -32,6 +32,8 @@
 
 #define XPCOM_LOAD_FUNCTION LOAD_FUNCTION
 
+#define nsStaticModuleInfo void
+
 #ifdef _WIN32
 #if !(defined(__i386__) || defined(_M_IX86) || defined(_X86_))
 #define nsStaticModuleInfo void /* define on 64-bit win32 due to use of XULRunner 10 SDK */
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh
index 689616e..86afdfe 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	
@@ -64,6 +64,8 @@ case $OS in
 	"FreeBSD")
 		SWT_OS=freebsd
 		MAKEFILE=make_freebsd.mak
+		MAKE_TYPE=gmake
+		MODEL=`uname -m`
 		;;
 	*)
 		SWT_OS=`uname -s | tr -s '[:upper:]' '[:lower:]'`
@@ -407,6 +409,34 @@ case $SWT_OS.$SWT_ARCH in
 			export PKG_CONFIG_PATH="/opt/gtk_64bit/lib/hpux64/pkgconfig"
 		fi
 		;;
+	"freebsd.x86"|"freebsd.x86_64")
+#		PATH="/export/home/SUNWspro/bin:/usr/ccs/bin:/usr/bin:$PATH"
+		if [ "${CC}" = "" ]; then
+			CC="cc"
+		fi
+		if [ "${CXX}" = "" ]; then
+			CXX="c++"
+		fi
+		if [ "${CDE_HOME}" = "" ]; then
+			CDE_HOME="/usr/dt"
+		fi
+		if [ "${JAVA_HOME}" = "" ]; then
+			JAVA_HOME="/usr/local/openjdk7"
+		fi
+		if [ "${PKG_CONFIG_PATH}" = "" ]; then
+			PKG_CONFIG_PATH="/usr/local/libdata/pkgconfig/"
+		fi
+#		if [ "${MOZILLA_SDK}" = "" ]; then
+#			MOZILLA_SDK="/bluebird/teamswt/swt-builddir/geckoSDK/1.4/gecko-sdk"
+#		fi
+#		if [ "${MOZILLA_INCLUDES}" = "" ]; then
+#			MOZILLA_INCLUDES="-I${MOZILLA_SDK} -I${MOZILLA_SDK}/xpcom/include -I${MOZILLA_SDK}/nspr/include -I${MOZILLA_SDK}/embed_base/include -I${MOZILLA_SDK}/embedstring/include -I${MOZILLA_SDK}/string/include"
+#		fi
+#		if [ "${MOZILLA_LIBS}" = "" ]; then
+#			MOZILLA_LIBS="${MOZILLA_SDK}/embedstring/bin/libembedstring.a -L${MOZILLA_SDK}/xpcom/bin -L${MOZILLA_SDK}/nspr/bin -lxpcom -lnspr4 -lplds4 -lplc4"
+#		fi
+		export PATH CC CXX CDE_HOME JAVA_HOME PKG_CONFIG_PATH MOZILLA_SDK MOZILLA_INCLUDES MOZILLA_LIBS;
+		;;
 esac	
 
 
@@ -478,24 +508,35 @@ if [ -z "${MOZILLA_INCLUDES}" -a -z "${MOZILLA_LIBS}" -a ${MODEL} != 'sparc64' ]
 		export MOZILLA_INCLUDES
 		export MOZILLA_LIBS
 		MAKE_MOZILLA=make_mozilla
+		echo "Mozilla/XPCOM found, compiling Mozilla embedded browser support"
 	elif [ x`pkg-config --exists firefox-xpcom && echo YES` = "xYES" ]; then
 		MOZILLA_INCLUDES=`pkg-config --cflags firefox-xpcom`
 		MOZILLA_LIBS=`pkg-config --libs firefox-xpcom`
 		export MOZILLA_INCLUDES
 		export MOZILLA_LIBS
 		MAKE_MOZILLA=make_mozilla
-	elif [ x`pkg-config --exists libxul && echo YES` = "xYES" ]; then
-		XULRUNNER_INCLUDES=`pkg-config --cflags libxul`
-		XULRUNNER_LIBS=`pkg-config --libs libxul`
+		echo "Firefox/XPCOM found, compiling Mozilla embedded browser support"
+	elif [ x`pkg-config --exists libxul libxul-embedding && echo YES` = "xNO" ]; then  # don't bother, it doesn't work
+		XULRUNNER_INCLUDES="-include /usr/local/include/libxul/mozilla-config.h `pkg-config --cflags libxul libxul-embedding`"
+		XULRUNNER_LIBS=`pkg-config --libs libxul-embedding`
 		export XULRUNNER_INCLUDES
 		export XULRUNNER_LIBS
 		MAKE_MOZILLA=make_xulrunner
+		echo "XULRunner/XPCOM found, compiling Mozilla embedded browser support"
 	else
 		echo "None of the following libraries were found:  Mozilla/XPCOM, Firefox/XPCOM, or XULRunner/XPCOM"
 		echo "    *** Mozilla embedding support will not be compiled."
 	fi
 fi
 
+if [ x`pkg-config --exists webkit-1.0 && echo YES` = "xYES" ]; then
+	echo "WebKit found, compiling webkit embedded browser support."
+	MAKE_WEBKIT=make_webkit
+else
+	echo "WebKit not found:"
+	echo "    *** WebKit embedding support will not be compiled."
+fi
+
 # Find AWT if available
 if [ -z "${AWT_LIB_PATH}" ]; then
 	if [ -f ${JAVA_HOME}/jre/lib/${AWT_ARCH}/libjawt.* ]; then
@@ -524,5 +565,5 @@ fi
 if [ "x${1}" = "xclean" ]; then
 	${MAKE_TYPE} -f $MAKEFILE clean
 else
-	${MAKE_TYPE} -f $MAKEFILE all $MAKE_GNOME $MAKE_CAIRO $MAKE_AWT $MAKE_MOZILLA ${1} ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9}
+	${MAKE_TYPE} -f $MAKEFILE all $MAKE_GNOME $MAKE_CAIRO $MAKE_AWT $MAKE_MOZILLA $MAKE_WEBKIT ${1} ${2} ${3} ${4} ${5} ${6} ${7} ${8} ${9}
 fi
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak
index d2da90e..51989f8 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak	
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak	
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2011 IBM Corporation and others.
+# Copyright (c) 2000, 2012 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,7 +9,7 @@
 #     IBM Corporation - initial API and implementation
 #*******************************************************************************
 
-# Makefile for creating SWT libraries for Linux GTK
+# Makefile for creating SWT libraries for FreeBSD GTK
 
 include make_common.mak
 
@@ -21,13 +21,19 @@ WS_PREFIX = gtk
 SWT_PREFIX = swt
 CDE_PREFIX = swt-cde
 AWT_PREFIX = swt-awt
+ifeq ($(GTK_VERSION), 3.0)
+SWTPI_PREFIX = swt-pi3
+else
 SWTPI_PREFIX = swt-pi
+endif
 CAIRO_PREFIX = swt-cairo
 ATK_PREFIX = swt-atk
 GNOME_PREFIX = swt-gnome
 MOZILLA_PREFIX = swt-mozilla$(GCC_VERSION)
 XULRUNNER_PREFIX = swt-xulrunner
+XULRUNNER24_PREFIX = swt-xulrunner24
 XPCOMINIT_PREFIX = swt-xpcominit
+WEBKIT_PREFIX = swt-webkit
 GLX_PREFIX = swt-glx
 
 SWT_LIB = lib$(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
@@ -39,28 +45,36 @@ ATK_LIB = lib$(ATK_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
 GNOME_LIB = lib$(GNOME_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
 MOZILLA_LIB = lib$(MOZILLA_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
 XULRUNNER_LIB = lib$(XULRUNNER_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+XULRUNNER24_LIB = lib$(XULRUNNER24_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
 XPCOMINIT_LIB = lib$(XPCOMINIT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+WEBKIT_LIB = lib$(WEBKIT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
 GLX_LIB = lib$(GLX_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
 
 CAIROCFLAGS = `pkg-config --cflags cairo`
 CAIROLIBS = `pkg-config --libs-only-L cairo` -lcairo
 
 # Do not use pkg-config to get libs because it includes unnecessary dependencies (i.e. pangoxft-1.0)
-GTKCFLAGS = `pkg-config --cflags gtk+-2.0 gtk+-unix-print-$(GTK_VERSION)`
-GTKLIBS = `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst
+GTKCFLAGS = `pkg-config --cflags gtk+-$(GTK_VERSION) gtk+-unix-print-$(GTK_VERSION)`
+ifeq ($(GTK_VERSION), 3.0)
+GTKLIBS = `pkg-config --libs-only-L gtk+-$(GTK_VERSION) gthread-2.0` $(XLIB64) -L/usr/X11R6/lib -lgtk-3 -lgdk-3 -lcairo -lgthread-2.0 -lXtst
+else
+GTKLIBS = `pkg-config --libs-only-L gtk+-$(GTK_VERSION) gthread-2.0` $(XLIB64) -L/usr/X11R6/lib -lgtk-x11-$(GTK_VERSION) -lgthread-2.0 -lXtst
+endif
 
 CDE_LIBS = -L$(CDE_HOME)/lib -R$(CDE_HOME)/lib -lXt -lX11 -lDtSvc
 
-AWT_LFLAGS = -shared
+AWT_LFLAGS = -shared ${SWT_LFLAGS} 
 AWT_LIBS = -L$(AWT_LIB_PATH) -ljawt
 
-ATKCFLAGS = `pkg-config --cflags atk gtk+-2.0 gtk+-unix-print-$(GTK_VERSION)`
-ATKLIBS = `pkg-config --libs-only-L atk gtk+-2.0` -latk-1.0 -lgtk-x11-2.0
+ATKCFLAGS = `pkg-config --cflags atk gtk+-$(GTK_VERSION) gtk+-unix-print-$(GTK_VERSION)`
+ATKLIBS = `pkg-config --libs-only-L atk` -latk-1.0 
 
 GNOMECFLAGS = `pkg-config --cflags gnome-vfs-module-2.0 libgnome-2.0 libgnomeui-2.0`
 GNOMELIBS = `pkg-config --libs-only-L gnome-vfs-module-2.0 libgnome-2.0 libgnomeui-2.0` -lgnomevfs-2 -lgnome-2 -lgnomeui-2
 
-GLXLIBS = -L/usr/X11R6/lib -lGL -lGLU -lm
+GLXLIBS = -lGL -lGLU -lm
+
+SWT_LFLAGS = -L/usr/local/lib
 
 # Uncomment for Native Stats tool
 #NATIVE_STATS = -DNATIVE_STATS
@@ -75,11 +89,24 @@ MOZILLACFLAGS = -O \
 	-Wno-non-virtual-dtor \
 	-fPIC \
 	-I. \
+	-I/usr/local/include \
 	-I$(JAVA_HOME)/include \
 	-I$(JAVA_HOME)/include/freebsd \
 	${SWT_PTR_CFLAGS}
-MOZILLALFLAGS = -shared -Wl,--version-script=mozilla_exports -Bsymbolic
-	
+MOZILLALFLAGS = -shared ${SWT_LFLAGS} -Wl,--version-script=mozilla_exports -Bsymbolic
+MOZILLAEXCLUDES = -DNO__1XPCOMGlueShutdown \
+	-DNO__1XPCOMGlueStartup \
+	-DNO__1XPCOMGlueLoadXULFunctions \
+	-DNO_memmove__ILorg_eclipse_swt_internal_mozilla_nsDynamicFunctionLoad_2I \
+	-DNO_memmove__JLorg_eclipse_swt_internal_mozilla_nsDynamicFunctionLoad_2J \
+	-DNO_nsDynamicFunctionLoad_1sizeof \
+	-DNO__1Call__IIIIII \
+	-DNO__1Call__JJJJJI \
+	-DNO_nsDynamicFunctionLoad
+XULRUNNEREXCLUDES = -DNO__1NS_1InitXPCOM2
+
+WEBKITCFLAGS = `pkg-config --cflags glib-2.0`
+
 SWT_OBJECTS = swt.o c.o c_stats.o callback.o
 CDE_OBJECTS = swt.o cde.o cde_structs.o cde_stats.o
 AWT_OBJECTS = swt_awt.o
@@ -88,19 +115,22 @@ CAIRO_OBJECTS = swt.o cairo.o cairo_structs.o cairo_stats.o
 ATK_OBJECTS = swt.o atk.o atk_structs.o atk_custom.o atk_stats.o
 GNOME_OBJECTS = swt.o gnome.o gnome_structs.o gnome_stats.o
 MOZILLA_OBJECTS = swt.o xpcom.o xpcom_custom.o xpcom_structs.o xpcom_stats.o
-XULRUNNER_OBJECTS = swt.o xpcomxul.o xpcomxul_custom.o xpcomxul_structs.o xpcomxul_stats.o xpcomxulglue.o xpcomxulglue_stats.o
+XULRUNNER_OBJECTS = swt.o xpcomxul.o xpcomxul_custom.o xpcomxul_structs.o xpcomxul_stats.o
+XULRUNNER24_OBJECTS = swt.o xpcom24_custom.o
 XPCOMINIT_OBJECTS = swt.o xpcominit.o xpcominit_structs.o xpcominit_stats.o
+WEBKIT_OBJECTS = swt.o webkit.o webkit_structs.o webkit_stats.o
 GLX_OBJECTS = swt.o glx.o glx_structs.o glx_stats.o
 
 CFLAGS = -O -Wall \
 		-DSWT_VERSION=$(SWT_VERSION) \
 		$(NATIVE_STATS) \
 		-DFREEBSD -DGTK \
+		-I/usr/local/include \
 		-I$(JAVA_HOME)/include \
 		-I$(JAVA_HOME)/include/freebsd \
 		-fPIC \
 		${SWT_PTR_CFLAGS}
-LFLAGS = -shared -fPIC
+LFLAGS = -shared -fPIC ${SWT_LFLAGS}
 
 ifndef NO_STRIP
 	AWT_LFLAGS := $(AWT_LFLAGS) -s
@@ -108,7 +138,7 @@ ifndef NO_STRIP
 	LFLAGS := $(LFLAGS) -s
 endif
 
-all: make_swt make_atk make_gnome make_glx
+all: make_swt make_atk make_glx make_webkit
 
 #
 # SWT libs
@@ -210,42 +240,47 @@ $(MOZILLA_LIB): $(MOZILLA_OBJECTS)
 	$(CXX) -o $(MOZILLA_LIB) $(MOZILLA_OBJECTS) $(MOZILLALFLAGS) ${MOZILLA_LIBS}
 
 xpcom.o: xpcom.cpp
-	$(CXX) $(MOZILLACFLAGS) ${MOZILLA_INCLUDES} -c xpcom.cpp
+	$(CXX) $(MOZILLACFLAGS) $(MOZILLAEXCLUDES) ${MOZILLA_INCLUDES} -c xpcom.cpp
 
 xpcom_structs.o: xpcom_structs.cpp
-	$(CXX) $(MOZILLACFLAGS) ${MOZILLA_INCLUDES} -c xpcom_structs.cpp
+	$(CXX) $(MOZILLACFLAGS) $(MOZILLAEXCLUDES) ${MOZILLA_INCLUDES} -c xpcom_structs.cpp
 	
 xpcom_custom.o: xpcom_custom.cpp
-	$(CXX) $(MOZILLACFLAGS) ${MOZILLA_INCLUDES} -c xpcom_custom.cpp
+	$(CXX) $(MOZILLACFLAGS) $(MOZILLAEXCLUDES) ${MOZILLA_INCLUDES} -c xpcom_custom.cpp
 
 xpcom_stats.o: xpcom_stats.cpp
-	$(CXX) $(MOZILLACFLAGS) ${MOZILLA_INCLUDES} -c xpcom_stats.cpp
+	$(CXX) $(MOZILLACFLAGS) $(MOZILLAEXCLUDES) ${MOZILLA_INCLUDES} -c xpcom_stats.cpp
 
 #
-# XULRunner lib
+# XULRunner libs
 #
 make_xulrunner:$(XULRUNNER_LIB)
 
 $(XULRUNNER_LIB): $(XULRUNNER_OBJECTS)
+	echo -e "#include<stdlib.h>\nsize_t je_malloc_usable_size_in_advance(size_t n) {\nreturn n;\n}" | $(CXX) $(LFLAGS) $(CFLAGS) -xc - -o libswt-xulrunner-fix10.so
 	$(CXX) -o $(XULRUNNER_LIB) $(XULRUNNER_OBJECTS) $(MOZILLALFLAGS) ${XULRUNNER_LIBS}
 
 xpcomxul.o: xpcom.cpp
-	$(CXX) -o xpcomxul.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcom.cpp
+	$(CXX) -o xpcomxul.o $(MOZILLACFLAGS) $(XULRUNNEREXCLUDES) ${XULRUNNER_INCLUDES} -c xpcom.cpp
 
 xpcomxul_structs.o: xpcom_structs.cpp
-	$(CXX) -o xpcomxul_structs.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcom_structs.cpp
+	$(CXX) -o xpcomxul_structs.o $(MOZILLACFLAGS) $(XULRUNNEREXCLUDES) ${XULRUNNER_INCLUDES} -c xpcom_structs.cpp
 	
 xpcomxul_custom.o: xpcom_custom.cpp
-	$(CXX) -o xpcomxul_custom.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcom_custom.cpp
+	$(CXX) -o xpcomxul_custom.o $(MOZILLACFLAGS) $(XULRUNNEREXCLUDES) ${XULRUNNER_INCLUDES} -c xpcom_custom.cpp
 
 xpcomxul_stats.o: xpcom_stats.cpp
-	$(CXX) -o xpcomxul_stats.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcom_stats.cpp
+	$(CXX) -o xpcomxul_stats.o $(MOZILLACFLAGS) $(XULRUNNEREXCLUDES) ${XULRUNNER_INCLUDES} -c xpcom_stats.cpp
+
+
+make_xulrunner24:$(XULRUNNER24_LIB)
 
-xpcomxulglue.o: xpcomglue.cpp
-	$(CXX) -o xpcomxulglue.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcomglue.cpp
+$(XULRUNNER24_LIB): $(XULRUNNER24_OBJECTS)
+	echo -e "#include<stdlib.h>\nsize_t je_malloc_usable_size_in_advance(size_t n) {\nreturn n;\n}" | $(CXX) $(LFLAGS) $(CFLAGS) -L${XULRUNNER24_SDK}/lib -Wl,--whole-archive -lmozglue -Wl,--no-whole-archive -xc - -o libswt-xulrunner-fix24.so
+	$(CXX) -o $(XULRUNNER24_LIB) $(XULRUNNER24_OBJECTS) $(MOZILLALFLAGS) -L${XULRUNNER24_SDK}/lib -lxpcomglue
 
-xpcomxulglue_stats.o: xpcomglue_stats.cpp
-	$(CXX) -o xpcomxulglue_stats.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcomglue_stats.cpp
+xpcom24_custom.o: xpcom24_custom.cpp
+	$(CXX) $(MOZILLACFLAGS) -c xpcom24_custom.cpp
 
 #
 # XPCOMInit lib
@@ -265,6 +300,23 @@ xpcominit_stats.o: xpcominit_stats.cpp
 	$(CXX) $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcominit_stats.cpp
 
 #
+# WebKit lib
+#
+make_webkit: $(WEBKIT_LIB)
+
+$(WEBKIT_LIB): $(WEBKIT_OBJECTS)
+	$(CC) $(LFLAGS) -o $(WEBKIT_LIB) $(WEBKIT_OBJECTS)
+
+webkit.o: webkitgtk.c 
+	$(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk.c -o webkit.o
+
+webkit_structs.o: webkitgtk_structs.c 
+	$(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk_structs.c -o webkit_structs.o
+	
+webkit_stats.o: webkitgtk_stats.c webkitgtk_stats.h
+	$(CC) $(CFLAGS) $(WEBKITCFLAGS) -c webkitgtk_stats.c -o webkit_stats.o
+
+#
 # GLX lib
 #
 make_glx: $(GLX_LIB)
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
index 8392189..f02a5ef 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c	
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c	
@@ -4162,11 +4162,17 @@ JNIEXPORT void JNICALL OS_NATIVE(_1g_1thread_1init)
 JNIEXPORT jboolean JNICALL OS_NATIVE(_1g_1thread_1supported)
 	(JNIEnv *env, jclass that)
 {
+	return 1;
+	/*
+		g_thread_supported is non-existent in glib-2.36+,
+		but is still referenced.
+
 	jboolean rc = 0;
 	OS_NATIVE_ENTER(env, that, _1g_1thread_1supported_FUNC);
 	rc = (jboolean)g_thread_supported();
 	OS_NATIVE_EXIT(env, that, _1g_1thread_1supported_FUNC);
 	return rc;
+	*/
 }
 #endif
 
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
index cc81dd1..fa992cd 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java	
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java	
@@ -47,18 +47,19 @@ public class OS extends C {
 	}
 
 	/** OS Constants */
-	public static final boolean IsAIX, IsSunOS, IsLinux, IsHPUX, BIG_ENDIAN;
+	public static final boolean IsAIX, IsSunOS, IsLinux, IsHPUX, IsFreeBSD, BIG_ENDIAN;
 	static {
 
 		/* Initialize the OS flags and locale constants */
 		String osName = System.getProperty ("os.name");
-		boolean isAIX = false, isSunOS = false, isLinux = false, isHPUX = false;
+		boolean isAIX = false, isSunOS = false, isLinux = false, isHPUX = false, isFreeBSD = false;
 		if (osName.equals ("Linux")) isLinux = true;
 		if (osName.equals ("AIX")) isAIX = true;
 		if (osName.equals ("Solaris")) isSunOS = true;
 		if (osName.equals ("SunOS")) isSunOS = true;
 		if (osName.equals ("HP-UX")) isHPUX = true;
-		IsAIX = isAIX;  IsSunOS = isSunOS;  IsLinux = isLinux;  IsHPUX = isHPUX;
+		if (osName.equals ("FreeBSD")) isFreeBSD = true;
+		IsAIX = isAIX;  IsSunOS = isSunOS;  IsLinux = isLinux;  IsHPUX = isHPUX;  IsFreeBSD = isFreeBSD;
 
 		byte[] buffer = new byte[4];
 		long /*int*/ ptr = OS.malloc(4);
diff --git a/eclipse.platform.swt/local-build/org.eclipse.swt.fragments.localbuild/META-INF/p2.inf b/eclipse.platform.swt/local-build/org.eclipse.swt.fragments.localbuild/META-INF/p2.inf
index 39c103e..d1b97c0 100644
--- a/eclipse.platform.swt/local-build/org.eclipse.swt.fragments.localbuild/META-INF/p2.inf
+++ b/eclipse.platform.swt/local-build/org.eclipse.swt.fragments.localbuild/META-INF/p2.inf
@@ -73,3 +73,8 @@ requires.17.namespace = org.eclipse.equinox.p2.iu
 requires.17.name = org.eclipse.swt.gtk.hpux.ia64
 requires.17.range = 0.0.0
 requires.17.filter = (&(osgi.os=hpux)(osgi.ws=gtk)(osgi.arch=ia64))
+
+requires.18.namespace = org.eclipse.equinox.p2.iu
+requires.18.name = org.eclipse.swt.gtk.freebsd.%%ECLIPSE_ARCH%%
+requires.18.range = 0.0.0
+requires.18.filter = (&(osgi.os=freebsd)(osgi.ws=gtk)(osgi.arch=%%ECLIPSE_ARCH%%))
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/META-INF/p2.inf b/eclipse.platform.swt/bundles/org.eclipse.swt/META-INF/p2.inf
index 98517c0..6f17162 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/META-INF/p2.inf
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/META-INF/p2.inf
@@ -95,3 +95,8 @@ requires.19.namespace = org.eclipse.equinox.p2.iu
 requires.19.name = org.eclipse.swt.gtk.linux.aarch64
 requires.19.range = [$version$,$version$]
 requires.19.filter = (&(osgi.os=linux)(osgi.ws=gtk)(osgi.arch=aarch64)(!(org.eclipse.swt.buildtime=true)))
+
+requires.20.namespace = org.eclipse.equinox.p2.iu
+requires.20.name = org.eclipse.swt.gtk.freebsd.%%ECLIPSE_ARCH%%
+requires.20.range = [$version$,$version$]
+requires.20.filter = (&(osgi.os=freebsd)(osgi.ws=gtk)(osgi.arch=%%ECLIPSE_ARCH%%)(!(org.eclipse.swt.buildtime=true)))
diff --git a/eclipse.platform.swt.binaries/pom.xml b/eclipse.platform.swt.binaries/pom.xml
index cc8d6f7..46c8f5a 100644
--- a/eclipse.platform.swt.binaries/pom.xml
+++ b/eclipse.platform.swt.binaries/pom.xml
@@ -91,6 +91,7 @@
     <module>bundles/org.eclipse.swt.gtk.linux.s390x</module>
     <module>bundles/org.eclipse.swt.gtk.linux.x86</module>
     <module>bundles/org.eclipse.swt.gtk.linux.x86_64</module>
+    <module>bundles/org.eclipse.swt.gtk.freebsd.%%ECLIPSE_ARCH%%</module>
     <module>bundles/org.eclipse.swt.gtk.solaris.sparcv9</module>
     <module>bundles/org.eclipse.swt.gtk.solaris.x86_64</module>
     <module>bundles/org.eclipse.swt.win32.win32.x86</module>
diff --git a/eclipse.platform.team/bundles/org.eclipse.core.net/natives/unix/gnomeproxy.c b/eclipse.platform.team/bundles/org.eclipse.core.net/natives/unix/gnomeproxy.c
index 2417b4e..c665afe 100644
--- a/eclipse.platform.team/bundles/org.eclipse.core.net/natives/unix/gnomeproxy.c
+++ b/eclipse.platform.team/bundles/org.eclipse.core.net/natives/unix/gnomeproxy.c
@@ -17,7 +17,7 @@
 #include <gconf/gconf-value.h>
 #include <gconf/gconf-client.h>
 
-#ifdef __linux__
+#ifdef __STDC__
 #include <string.h>
 #else
 #include <strings.h>
diff --git a/eclipse.platform.team/pom.xml b/eclipse.platform.team/pom.xml
index d192566..3b590cd 100644
--- a/eclipse.platform.team/pom.xml
+++ b/eclipse.platform.team/pom.xml
@@ -63,6 +63,7 @@
     <module>features/org.eclipse.cvs-feature</module>
 
     <!-- creatively located fragments -->
+    <module>bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.freebsd.%%ECLIPSE_ARCH%%</module>
     <module>bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86</module>
     <module>bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64</module>
     <module>bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86</module>
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpBasePreferenceInitializer.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpBasePreferenceInitializer.java
index 7482d60..c3150b7 100644
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpBasePreferenceInitializer.java
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpBasePreferenceInitializer.java
@@ -39,6 +39,9 @@ public class HelpBasePreferenceInitializer extends
 		} else if (os.indexOf("linux") != -1) { //$NON-NLS-1$
 			prefs.put("custom_browser_path", //$NON-NLS-1$
 					"konqueror %1"); //$NON-NLS-1$
+		} else if (os.indexOf("freebsd") != -1) { //$NON-NLS-1$
+			prefs.put("custom_browser_path", //$NON-NLS-1$
+					"firefox %1"); //$NON-NLS-1$
 		} else {
 			prefs.put("custom_browser_path", "mozilla %1"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
diff --git a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/browser/BrowserManager.java b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/browser/BrowserManager.java
index 3fc1fd7..47ab00d 100644
--- a/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/browser/BrowserManager.java
+++ b/eclipse.platform.ua/org.eclipse.help.base/src/org/eclipse/help/internal/browser/BrowserManager.java
@@ -99,6 +99,7 @@ public class BrowserManager {
 			if (Constants.WS_WIN32.equalsIgnoreCase(os)) {
 				setDefaultBrowserID(BROWSER_ID_SYSTEM);
 			} else if (Constants.OS_AIX.equalsIgnoreCase(os)
+					|| (Constants.OS_FREEBSD.equalsIgnoreCase(os))
 					|| (Constants.OS_HPUX.equalsIgnoreCase(os))
 					|| (Constants.OS_LINUX.equalsIgnoreCase(os))
 					|| (Constants.OS_SOLARIS.equalsIgnoreCase(os))) {
diff --git a/eclipse.platform.ua/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowserFactory.java b/eclipse.platform.ua/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowserFactory.java
index dec7f54..859167c 100644
--- a/eclipse.platform.ua/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowserFactory.java
+++ b/eclipse.platform.ua/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowserFactory.java
@@ -64,7 +64,8 @@ public class EmbeddedBrowserFactory implements IBrowserFactory {
 	 */
 	private boolean test() {
 		if (!Constants.OS_WIN32.equalsIgnoreCase(Platform.getOS())
-				&& !Constants.OS_LINUX.equalsIgnoreCase(Platform.getOS())) {
+				&& !Constants.OS_LINUX.equalsIgnoreCase(Platform.getOS())
+				&& !Constants.OS_FREEBSD.equalsIgnoreCase(Platform.getOS())) {
 			return false;
 		}
 		if (!tested) {
diff --git a/eclipse.platform.ui/features/org.eclipse.e4.rcp/feature.xml b/eclipse.platform.ui/features/org.eclipse.e4.rcp/feature.xml
index 966c283..fdde997 100644
--- a/eclipse.platform.ui/features/org.eclipse.e4.rcp/feature.xml
+++ b/eclipse.platform.ui/features/org.eclipse.e4.rcp/feature.xml
@@ -455,6 +465,16 @@
          fragment="true"/>
 
    <plugin
+         id="org.eclipse.equinox.launcher.gtk.freebsd.%%ECLIPSE_ARCH%%"
+         os="freebsd"
+         ws="gtk"
+         arch="%%ECLIPSE_ARCH%%"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"/>
+
+   <plugin
          id="org.eclipse.equinox.launcher.gtk.linux.x86_64"
          os="linux"
          ws="gtk"
@@ -621,6 +652,17 @@
          unpack="false"/>
 
    <plugin
+         id="org.eclipse.swt.gtk.freebsd.%%ECLIPSE_ARCH%%"
+         os="freebsd"
+         ws="gtk"
+         arch="%%ECLIPSE_ARCH%%"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.swt.gtk.linux.x86_64"
          os="linux"
          ws="gtk"
diff --git a/eclipse.platform.ui/features/org.eclipse.e4.rcp/pom.xml b/eclipse.platform.ui/features/org.eclipse.e4.rcp/pom.xml
index 918a8ff..ceb1b3e 100644
--- a/eclipse.platform.ui/features/org.eclipse.e4.rcp/pom.xml
+++ b/eclipse.platform.ui/features/org.eclipse.e4.rcp/pom.xml
@@ -48,6 +48,7 @@
                 <plugin id="org.eclipse.equinox.launcher.gtk.linux.s390x"/>
                 <plugin id="org.eclipse.equinox.launcher.gtk.linux.s390"/>
                 <plugin id="org.eclipse.equinox.launcher.gtk.linux.x86_64"/>
+                <plugin id="org.eclipse.equinox.launcher.gtk.freebsd.%%ECLIPSE_ARCH%%"/>
                 <plugin id="org.eclipse.equinox.launcher.gtk.aix.ppc"/>
                 <plugin id="org.eclipse.equinox.launcher.gtk.aix.ppc64"/>
                 <plugin id="org.eclipse.equinox.launcher.gtk.hpux.ia64"/>
diff --git a/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/pom.xml b/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/pom.xml
index 32968af..6610342 100644
--- a/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/pom.xml
+++ b/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/pom.xml
@@ -21,4 +21,70 @@
   <artifactId>org.eclipse.equinox.launcher</artifactId>
   <version>1.3.200-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <artifactId>maven-antrun-plugin</artifactId>
+          <version>1.7</version>
+          <dependencies>
+            <dependency>
+              <groupId>bsf</groupId>
+              <artifactId>bsf</artifactId>
+              <version>2.4.0</version>
+            </dependency>
+            <dependency>
+              <groupId>rhino</groupId>
+              <artifactId>js</artifactId>
+              <version>1.7R2</version>
+            </dependency>
+            <dependency>
+              <groupId>org.apache.ant</groupId>
+              <artifactId>ant-apache-bsf</artifactId>
+              <version>1.8.3</version>
+            </dependency>
+            <dependency>
+              <groupId>org.apache.ant</groupId>
+              <artifactId>ant-nodeps</artifactId>
+              <version>1.8.1</version>
+            </dependency>
+          </dependencies>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>build-native-launchers-gtk.freebsd.%%ECLIPSE_ARCH%%</id>
+      <activation>
+        <property>
+          <name>native</name>
+          <value>gtk.freebsd.%%ECLIPSE_ARCH%%</value>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-antrun-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>compile-executable-natives</id>
+                <phase>generate-resources</phase>
+                <configuration>
+                  <target>
+                    <ant antfile="build.xml" dir="../../features/org.eclipse.equinox.executable.feature/library/gtk/" target="build_eclipse"/>
+                  </target>
+                </configuration>
+                <goals>
+                  <goal>run</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
 </project>
diff --git a/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/internal/launcher/Constants.java b/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/internal/launcher/Constants.java
index 6e83b71..db56cd5 100644
--- a/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/internal/launcher/Constants.java
+++ b/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/internal/launcher/Constants.java
@@ -26,6 +26,7 @@ public class Constants {
 	public static final String INTERNAL_OS_OS400 = "OS/400"; //$NON-NLS-1$
 	public static final String INTERNAL_OS_OS390 = "OS/390"; //$NON-NLS-1$
 	public static final String INTERNAL_OS_ZOS = "z/OS"; //$NON-NLS-1$
+	public static final String INTERNAL_OS_FREEBSD = "FreeBSD"; //$NON-NLS-1$
 
 	public static final String ARCH_X86 = "x86";//$NON-NLS-1$
 	public static final String ARCH_X86_64 = "x86_64";//$NON-NLS-1$
@@ -91,6 +92,17 @@ public class Constants {
 	public static final String OS_ZOS = "z/os"; //$NON-NLS-1$
 
 	/**
+	 * Constant string (value "freebsd") indicating the platform is running on a
+	 * FreeBSD operating system.
+	 * <p>
+	 * Note this constant is not officially supported by the eclipse project
+	 * and is only available on eclipse versions built from the FreeBSD ports
+	 * tree.
+	 * </p>
+	 */
+	public static final String OS_FREEBSD = "freebsd"; //$NON-NLS-1$
+
+	/**
 	 * Constant string (value "unknown") indicating the platform is running on a
 	 * machine running an unknown operating system.
 	 */
diff --git a/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java b/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
index 85417f6..5448261 100644
--- a/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
+++ b/rt.equinox.framework/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
@@ -336,6 +336,8 @@ public class Main {
 			return Constants.WS_GTK;
 		if (osName.equals(Constants.OS_QNX))
 			return Constants.WS_PHOTON;
+		if (osName.equals(Constants.OS_FREEBSD))
+			return Constants.WS_GTK;
 		return Constants.WS_UNKNOWN;
 	}
 
@@ -382,6 +384,8 @@ public class Main {
 		// os.name on Mac OS can be either Mac OS or Mac OS X
 		if (osName.regionMatches(true, 0, Constants.INTERNAL_OS_MACOSX, 0, Constants.INTERNAL_OS_MACOSX.length()))
 			return Constants.OS_MACOSX;
+		if (osName.equalsIgnoreCase(Constants.INTERNAL_OS_FREEBSD))
+			return Constants.OS_FREEBSD;
 		return Constants.OS_UNKNOWN;
 	}
 
diff --git a/rt.equinox.framework/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/util/TextProcessor.java b/rt.equinox.framework/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/util/TextProcessor.java
index 6f2b039..7feb9b6 100644
--- a/rt.equinox.framework/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/util/TextProcessor.java
+++ b/rt.equinox.framework/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/util/TextProcessor.java
@@ -77,7 +77,7 @@ public class TextProcessor {
 
 		if ("iw".equals(lang) || "he".equals(lang) || "ar".equals(lang) || "fa".equals(lang) || "ur".equals(lang)) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 			String osName = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$
-			if (osName.startsWith("windows") || osName.startsWith("linux") || osName.startsWith("mac")) { //$NON-NLS-1$	//$NON-NLS-2$ //$NON-NLS-3$
+			if (osName.startsWith("windows") || osName.startsWith("linux") || osName.startsWith("mac") || osName.startsWith("freebsd")) { //$NON-NLS-1$	//$NON-NLS-2$ //$NON-NLS-3$
 				IS_PROCESSING_NEEDED = true;
 			}
 		}
diff --git a/rt.equinox.framework/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxConfiguration.java b/rt.equinox.framework/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxConfiguration.java
index 0d091d7..5acffe0 100644
--- a/rt.equinox.framework/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxConfiguration.java
+++ b/rt.equinox.framework/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxConfiguration.java
@@ -40,6 +40,7 @@ public class EclipseEnvironmentInfo implements EnvironmentInfo {
 	private static final String INTERNAL_OS_OS400 = "OS/400"; //$NON-NLS-1$
 	private static final String INTERNAL_OS_OS390 = "OS/390"; //$NON-NLS-1$
 	private static final String INTERNAL_OS_ZOS = "z/OS"; //$NON-NLS-1$
+	private static final String INTERNAL_OS_FREEBSD = "FreeBSD"; //$NON-NLS-1$
 	// While we recognize the i386 architecture, we change
 	// this internally to be x86.
	private static final String INTERNAL_ARCH_I386 = "i386"; //$NON-NLS-1$
@@ -202,6 +203,8 @@ public class EclipseEnvironmentInfo implements EnvironmentInfo {
 			return Constants.WS_GTK;
 		if (osName.equals(Constants.OS_QNX))
 			return Constants.WS_PHOTON;
+		if (osName.equals(Constants.OS_FREEBSD))
+			return Constants.WS_GTK;
 		return Constants.WS_UNKNOWN;
 	}
 
@@ -230,6 +233,8 @@ public class EclipseEnvironmentInfo implements EnvironmentInfo {
 		// os.name on Mac OS can be either Mac OS or Mac OS X
 		if (osName.regionMatches(true, 0, INTERNAL_OS_MACOSX, 0, INTERNAL_OS_MACOSX.length()))
 			return Constants.OS_MACOSX;
+		if (osName.equalsIgnoreCase(INTERNAL_OS_FREEBSD))
+			return Constants.OS_FREEBSD;
 		return Constants.OS_UNKNOWN;
 	}
 
diff --git a/rt.equinox.framework/bundles/org.eclipse.osgi.compatibility.plugins/src/org/eclipse/osgi/compatibility/plugins/PluginConverterImpl.java b/rt.equinox.framework/bundles/org.eclipse.osgi.compatibility.plugins/src/org/eclipse/osgi/compatibility/plugins/PluginConverterImpl.java
index fe1447f..3160fd5 100644
--- a/rt.equinox.framework/bundles/org.eclipse.osgi.compatibility.plugins/src/org/eclipse/osgi/compatibility/plugins/PluginConverterImpl.java
+++ b/rt.equinox.framework/bundles/org.eclipse.osgi.compatibility.plugins/src/org/eclipse/osgi/compatibility/plugins/PluginConverterImpl.java
@@ -68,7 +68,7 @@ public class PluginConverterImpl implements PluginConverter {
 	static public final String FRAGMENT_MANIFEST = "fragment.xml"; //$NON-NLS-1$
 	static public final String GENERATED_FROM = "Generated-from"; //$NON-NLS-1$
 	static public final String MANIFEST_TYPE_ATTRIBUTE = "type"; //$NON-NLS-1$
-	private static final String[] OS_LIST = {org.eclipse.osgi.service.environment.Constants.OS_AIX, org.eclipse.osgi.service.environment.Constants.OS_HPUX, org.eclipse.osgi.service.environment.Constants.OS_LINUX, org.eclipse.osgi.service.environment.Constants.OS_MACOSX, org.eclipse.osgi.service.environment.Constants.OS_QNX, org.eclipse.osgi.service.environment.Constants.OS_SOLARIS, org.eclipse.osgi.service.environment.Constants.OS_WIN32};
+	private static final String[] OS_LIST = {org.eclipse.osgi.service.environment.Constants.OS_AIX, org.eclipse.osgi.service.environment.Constants.OS_FREEBSD, org.eclipse.osgi.service.environment.Constants.OS_HPUX, org.eclipse.osgi.service.environment.Constants.OS_LINUX, org.eclipse.osgi.service.environment.Constants.OS_MACOSX, org.eclipse.osgi.service.environment.Constants.OS_QNX, org.eclipse.osgi.service.environment.Constants.OS_SOLARIS, org.eclipse.osgi.service.environment.Constants.OS_WIN32};
 	protected static final String PI_RUNTIME = "org.eclipse.core.runtime"; //$NON-NLS-1$
 	protected static final String PI_BOOT = "org.eclipse.core.boot"; //$NON-NLS-1$
 	protected static final String PI_RUNTIME_COMPATIBILITY = "org.eclipse.core.runtime.compatibility"; //$NON-NLS-1$
diff --git a/rt.equinox.framework/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/Constants.java b/rt.equinox.framework/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/Constants.java
index 4b017cd..013d6b1 100644
--- a/rt.equinox.framework/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/Constants.java
+++ b/rt.equinox.framework/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/Constants.java
@@ -93,6 +93,15 @@ public interface Constants {
 	public static final String OS_ZOS = "z/os"; //$NON-NLS-1$
 
 	/**
+	 * Constant string (value "freebsd") indicating the platform is running on a
+	 * FreeBSD operating system.
+	 * Note this constant is not officially supported by the eclipse project
+	 * and is only available on eclipse versions built from the FreeBSD ports
+	 * tree.
+	 */
+	public static final String OS_FREEBSD = "freebsd"; //$NON-NLS-1$
+
+	/**
 	 * Constant string (value "unknown") indicating the platform is running on a
 	 * machine running an unknown operating system.
 	 */
diff --git a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/feature.xml b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/feature.xml
index 7b4a01b..fbbbe06 100644
--- a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/feature.xml
+++ b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/feature.xml
@@ -92,6 +92,16 @@
          fragment="true"/>
 
    <plugin
+         id="org.eclipse.equinox.launcher.gtk.freebsd.%%ECLIPSE_ARCH%%"
+         os="freebsd"
+         ws="gtk"
+         arch="%%ECLIPSE_ARCH%%"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"/>
+
+   <plugin
          id="org.eclipse.equinox.launcher.gtk.linux.x86"
          os="linux"
          ws="gtk"
diff --git a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/library/gtk/build.sh b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/library/gtk/build.sh
index 29d3871..0ca7ccd 100644
--- a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/library/gtk/build.sh
+++ b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/library/gtk/build.sh
@@ -40,6 +40,7 @@ defaultJava=DEFAULT_JAVA_JNI
 defaultJavaHome=""
 javaHome=""
 makefile=""
+MAKE=make
 if [ "${CC}" = "" ]; then
 	CC=cc
 	export CC
@@ -124,6 +125,28 @@ case $defaultOS in
 				;;
 		esac
 		;;
+	"FreeBSD" | "freebsd")
+		MODEL=`uname -m`
+		makefile="make_freebsd.mak"
+		MAKE=gmake
+		defaultOS="freebsd"
+		case $MODEL in
+			"amd64")
+				defaultOSArch="x86_64"
+				defaultJava=DEFAULT_JAVA_EXEC
+				[ -d ${JAVA_HOME}/jre ] && defaultJavaHome="${JAVA_HOME}/jre"
+				OUTPUT_DIR="$EXEC_DIR/bin/$defaultWS/$defaultOS/$defaultOSArch"
+				;;
+			i?86 | "x86")
+				defaultOSArch="x86"
+				[ -d ${JAVA_HOME}/jre ] && defaultJavaHome="${JAVA_HOME}/jre"
+				OUTPUT_DIR="$EXEC_DIR/bin/$defaultWS/$defaultOS/$defaultOSArch"
+				;;
+			*)
+				echo "*** Unknown MODEL <${MODEL}>"
+				;;
+		esac
+		;;
 	"AIX" | "aix")
 		makefile="make_aix.mak"
 		defaultOS="aix"
@@ -220,13 +243,14 @@ export OUTPUT_DIR PROGRAM_OUTPUT DEFAULT_OS DEFAULT_OS_ARCH DEFAULT_WS DEFAULT_J
 # If the OS is supported (a makefile exists)
 if [ "$makefile" != "" ]; then
 	if [ "$extraArgs" != "" ]; then
-		make -f $makefile $extraArgs
+		echo "Building $OS launcher with args $extraArgs. Defaults: -os $DEFAULT_OS -arch $DEFAULT_OS_ARCH -ws $DEFAULT_WS"
+		${MAKE} -f $makefile $extraArgs
 	else
 		echo "Building $OS launcher. Defaults: -os $DEFAULT_OS -arch $DEFAULT_OS_ARCH -ws $DEFAULT_WS"
-		make -f $makefile clean
+		${MAKE} -f $makefile clean
 		case x$CC in
-		  x*gcc*) make -f $makefile all PICFLAG=-fpic ;;
-		  *)      make -f $makefile all ;;
+		  x*cc*)  ${MAKE} -f $makefile all PICFLAG=-fpic ;;
+		  *)      ${MAKE} -f $makefile all ;;
 		esac
 	fi
 else
diff --git a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/pom.xml b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/pom.xml
index 156de22..7353724 100644
--- a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/pom.xml
+++ b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/pom.xml
@@ -130,6 +130,36 @@
 
   <profiles>
     <profile>
+      <id>build-native-launchers-gtk.freebsd.%%ECLIPSE_ARCH%%</id>
+      <activation>
+        <property>
+          <name>native</name>
+          <value>gtk.freebsd.%%ECLIPSE_ARCH%%</value>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-antrun-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>compile-executable-natives</id>
+                <phase>generate-resources</phase>
+                <configuration>
+                  <target>
+                    <ant antfile="build.xml" dir="library/gtk/" target="build_eclipse"/>
+                  </target>
+                </configuration>
+                <goals>
+                  <goal>run</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
       <id>build-native-launchers-gtk.linux.x86_64</id>
       <activation>
         <property>
@@ -343,6 +373,7 @@
                         <include name="gtk/linux/ppc64le/**/*"/>
                         <include name="gtk/linux/x86/**/*"/>
                         <include name="gtk/linux/x86_64/**/*"/>
+                        <include name="gtk/freebsd/%%ECLIPSE_ARCH%%/**/*"/>
                         <include name="gtk/solaris/x86_64/**/*"/>
                         <include name="win32/win32/x86/**/*"/>
                         <include name="win32/win32/x86_64/**/*"/>
diff --git a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/resources/build.properties b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/resources/build.properties
index 0f30a87..36382de 100644
--- a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/resources/build.properties
+++ b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/resources/build.properties
@@ -19,6 +19,11 @@ root.win32.win32.x86.permissions.755=launcher.exe
 root.win32.win32.x86_64=file:bin/win32/win32/x86_64/launcher.exe
 root.win32.win32.x86_64.permissions.755=launcher.exe
 
+root.freebsd.gtk.x86=bin/gtk/freebsd/x86,gtk_root
+root.freebsd.gtk.x86.permissions.755=launcher,libcairo-swt.so
+root.freebsd.gtk.x86_64=bin/gtk/freebsd/x86_64,gtk_root
+root.freebsd.gtk.x86_64.permissions.755=launcher,libcairo-swt.so
+
 root.linux.gtk.x86=bin/gtk/linux/x86,gtk_root
 root.linux.gtk.x86.permissions.755=launcher,libcairo-swt.so
 
diff --git a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/resources/build.xml b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/resources/build.xml
index cdded03..a2a0af3 100644
--- a/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/resources/build.xml
+++ b/rt.equinox.framework/features/org.eclipse.equinox.executable.feature/resources/build.xml
@@ -128,6 +128,22 @@
 		<chmod perm="755" dir="${feature.base}/macosx.cocoa.x86_64/${collectingFolder}" includes="${launcherName}" /> 
 		<chmod perm="755" dir="${feature.base}/macosx.cocoa.x86_64/${collectingFolder}" includes="Eclipse.app/Contents/MacOS/launcher" /> 
 	</target>
+	<target name="rootFilesfreebsd_gtk_x86">
+		<mkdir dir="${feature.base}/freebsd.gtk.x86/${collectingFolder}"/>
+		<copy todir="${feature.base}/freebsd.gtk.x86/${collectingFolder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}/bin/gtk/freebsd/x86" includes="**"			/>
+			<fileset dir="${basedir}/gtk_root" includes="**"			/>
+		</copy>
+		<chmod perm="755" dir="${feature.base}/freebsd.gtk.x86/${collectingFolder}" includes="launcher" /> 
+	</target>
+	<target name="rootFilesfreebsd_gtk_x86_64">
+		<mkdir dir="${feature.base}/freebsd.gtk.x86_64/${collectingFolder}"/>
+		<copy todir="${feature.base}/freebsd.gtk.x86_64/${collectingFolder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}/bin/gtk/freebsd/x86_64" includes="**"			/>
+			<fileset dir="${basedir}/gtk_root" includes="**"			/>
+		</copy>
+		<chmod perm="755" dir="${feature.base}/freebsd.gtk.x86_64/${collectingFolder}" includes="launcher" /> 
+	</target>
 	<target name="rootFileslinux_gtk_x86">
 		<mkdir dir="${feature.base}/linux.gtk.x86/${collectingFolder}"/>
 		<copy todir="${feature.base}/linux.gtk.x86/${collectingFolder}" failonerror="true" overwrite="true">
@@ -243,6 +259,8 @@
 		<antcall target="rootFilesmacosx_carbon_x86"/>
 		<antcall target="rootFilesmacosx_cocoa_ppc"/>
 		<antcall target="rootFilesmacosx_cocoa_x86"/>
+		<antcall target="rootFilesfreebsd_gtk_x86"/>
+		<antcall target="rootFilesfreebsd_gtk_x86_64"/>
 		<antcall target="rootFileslinux_gtk_x86"/>
 		<antcall target="rootFileslinux_gtk_ppc"/>
 		<antcall target="rootFileslinux_gtk_ppc64"/>
diff --git a/rt.equinox.framework/pom.xml b/rt.equinox.framework/pom.xml
index b46cdc6..d46c81d 100644
--- a/rt.equinox.framework/pom.xml
+++ b/rt.equinox.framework/pom.xml
@@ -60,6 +60,7 @@
     <module>bundles/org.eclipse.equinox.launcher.gtk.linux.s390x</module>
     <module>bundles/org.eclipse.equinox.launcher.gtk.linux.x86</module>
     <module>bundles/org.eclipse.equinox.launcher.gtk.linux.x86_64</module>
+    <module>bundles/org.eclipse.equinox.launcher.gtk.freebsd.%%ECLIPSE_ARCH%%</module>
     <module>bundles/org.eclipse.equinox.launcher.gtk.solaris.x86_64</module>
     <module>bundles/org.eclipse.equinox.launcher.win32.win32.x86</module>
     <module>bundles/org.eclipse.equinox.launcher.win32.win32.x86_64</module>
diff --git a/rt.equinox.p2/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java b/rt.equinox.p2/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java
index 3cf2fe1..53f82b3 100644
--- a/rt.equinox.p2/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java
+++ b/rt.equinox.p2/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java
@@ -123,6 +123,8 @@ public class BrandingIron {
 			brandAIX(descriptor);
 		else if ("hpux".equals(os)) //$NON-NLS-1$
 			brandHPUX(descriptor);
+		else if ("freebsd".equals(os)) //$NON-NLS-1$
+			brandFreeBSD(descriptor);
 		else
 			renameLauncher(descriptor);
 		descriptor.setExecutableName(name, true);
@@ -178,6 +180,14 @@ public class BrandingIron {
 		}
 	}
 
+	private void brandFreeBSD(ExecutablesDescriptor descriptor) throws Exception {
+		renameLauncher(descriptor);
+
+		File root = descriptor.getLocation();
+		if (brandIcons)
+			Utils.copy(new File(icons[0]), new File(root, "icon.xpm")); //$NON-NLS-1$
+	}
+
 	private void brandMac(ExecutablesDescriptor descriptor) throws Exception {
 		//Initially the files are in: <root>/Eclipse.app/ 
 		//and they must appear in <root>/MyAppName.app/
diff --git a/rt.equinox.p2/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java b/rt.equinox.p2/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
index 73fd078..89299b2 100644
--- a/rt.equinox.p2/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
+++ b/rt.equinox.p2/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
@@ -68,11 +68,13 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
 
 	private static final String PROGRAM_ARGS = "programArgs"; //$NON-NLS-1$
+	private static final String PROGRAM_ARGS_FREEBSD = "programArgsFre"; //$NON-NLS-1$
 	private static final String PROGRAM_ARGS_LINUX = "programArgsLin"; //$NON-NLS-1$
 	private static final String PROGRAM_ARGS_MAC = "programArgsMac"; //$NON-NLS-1$
 	private static final String PROGRAM_ARGS_SOLARIS = "programArgsSol"; //$NON-NLS-1$
 	private static final String PROGRAM_ARGS_WIN = "programArgsWin"; //$NON-NLS-1$
 	private static final String VM_ARGS = "vmArgs"; //$NON-NLS-1$
+	private static final String VM_ARGS_FREEBSD = "vmArgsFre"; //$NON-NLS-1$
 	private static final String VM_ARGS_LINUX = "vmArgsLin"; //$NON-NLS-1$
 	private static final String VM_ARGS_MAC = "vmArgsMac"; //$NON-NLS-1$
 	private static final String VM_ARGS_SOLARIS = "vmArgsSol"; //$NON-NLS-1$
@@ -95,6 +97,7 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 	private static final String OS_LINUX = "linux";//$NON-NLS-1$
 	private static final String OS_SOLARIS = "solaris";//$NON-NLS-1$
 	private static final String OS_MACOSX = "macosx";//$NON-NLS-1$
+	private static final String OS_FREEBSD = "freebsd";//$NON-NLS-1$
 
 	// These must match Platform constant values
 	private static final String ARCH_X86 = "x86"; //$NON-NLS-1$
@@ -138,11 +141,13 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 	private static final int STATE_PLUGINS = 4;
 	private static final int STATE_FEATURES = 5;
 	private static final int STATE_PROGRAM_ARGS = 6;
+	private static final int STATE_PROGRAM_ARGS_FREEBSD = 100;
 	private static final int STATE_PROGRAM_ARGS_LINUX = 7;
 	private static final int STATE_PROGRAM_ARGS_MAC = 8;
 	private static final int STATE_PROGRAM_ARGS_SOLARIS = 9;
 	private static final int STATE_PROGRAM_ARGS_WIN = 10;
 	private static final int STATE_VM_ARGS = 11;
+	private static final int STATE_VM_ARGS_FREEBSD = 101;
 	private static final int STATE_VM_ARGS_LINUX = 12;
 	private static final int STATE_VM_ARGS_MAC = 13;
 	private static final int STATE_VM_ARGS_SOLARIS = 14;
@@ -532,6 +537,8 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 			key = VM_ARGS_MAC;
 		} else if (os.equals(OS_SOLARIS)) {
 			key = VM_ARGS_SOLARIS;
+		} else if (os.equals(OS_FREEBSD)) {
+			key = VM_ARGS_FREEBSD;
 		}
 
 		arch = arch == null ? "" : arch; //$NON-NLS-1$
@@ -611,6 +618,8 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 			key = PROGRAM_ARGS_MAC;
 		} else if (os.equals(OS_SOLARIS)) {
 			key = PROGRAM_ARGS_SOLARIS;
+		} else if (os.equals(OS_FREEBSD)) {
+			key = PROGRAM_ARGS_FREEBSD;
 		}
 
 		arch = arch == null ? "" : arch; //$NON-NLS-1$
@@ -724,6 +733,8 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 					processLinux(attributes);
 				} else if (OS_MACOSX.equals(localName)) {
 					processMac(attributes);
+				} else if (OS_FREEBSD.equals(localName)) {
+					processFreeBSD(attributes);
 				}
 				if ("ico".equals(localName)) { //$NON-NLS-1$
 					processIco(attributes);
@@ -735,6 +746,8 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 			case STATE_LAUNCHER_ARGS :
 				if (PROGRAM_ARGS.equals(localName)) {
 					state = STATE_PROGRAM_ARGS;
+				} else if (PROGRAM_ARGS_FREEBSD.equals(localName)) {
+					state = STATE_PROGRAM_ARGS_FREEBSD;
 				} else if (PROGRAM_ARGS_LINUX.equals(localName)) {
 					state = STATE_PROGRAM_ARGS_LINUX;
 				} else if (PROGRAM_ARGS_MAC.equals(localName)) {
@@ -745,6 +758,8 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 					state = STATE_PROGRAM_ARGS_WIN;
 				} else if (VM_ARGS.equals(localName)) {
 					state = STATE_VM_ARGS;
+				} else if (VM_ARGS_FREEBSD.equals(localName)) {
+					state = STATE_VM_ARGS_FREEBSD;
 				} else if (VM_ARGS_LINUX.equals(localName)) {
 					state = STATE_VM_ARGS_LINUX;
 				} else if (VM_ARGS_MAC.equals(localName)) {
@@ -764,6 +779,11 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 				setArchState(localName);
 				break;
 
+			case STATE_PROGRAM_ARGS_FREEBSD :
+				platformKeyPrefix = PROGRAM_ARGS_FREEBSD;
+				setArchState(localName);
+				break;
+
 			case STATE_PROGRAM_ARGS_LINUX :
 				platformKeyPrefix = PROGRAM_ARGS_LINUX;
 				setArchState(localName);
@@ -789,6 +809,11 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 				setArchState(localName);
 				break;
 
+			case STATE_VM_ARGS_FREEBSD :
+				platformKeyPrefix = VM_ARGS_FREEBSD;
+				setArchState(localName);
+				break;
+
 			case STATE_VM_ARGS_LINUX :
 				platformKeyPrefix = VM_ARGS_LINUX;
 				setArchState(localName);
@@ -961,11 +986,13 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 				break;
 
 			case STATE_PROGRAM_ARGS :
+			case STATE_PROGRAM_ARGS_FREEBSD :
 			case STATE_PROGRAM_ARGS_LINUX :
 			case STATE_PROGRAM_ARGS_MAC :
 			case STATE_PROGRAM_ARGS_SOLARIS :
 			case STATE_PROGRAM_ARGS_WIN :
 			case STATE_VM_ARGS :
+			case STATE_VM_ARGS_FREEBSD :
 			case STATE_VM_ARGS_LINUX :
 			case STATE_VM_ARGS_MAC :
 			case STATE_VM_ARGS_SOLARIS :
@@ -1008,6 +1035,9 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 			case STATE_PROGRAM_ARGS :
 				addLaunchArgumentToMap(PROGRAM_ARGS, String.valueOf(ch, start, length));
 				break;
+			case STATE_PROGRAM_ARGS_FREEBSD :
+				addLaunchArgumentToMap(PROGRAM_ARGS_FREEBSD, String.valueOf(ch, start, length));
+				break;
 			case STATE_PROGRAM_ARGS_LINUX :
 				addLaunchArgumentToMap(PROGRAM_ARGS_LINUX, String.valueOf(ch, start, length));
 				break;
@@ -1023,6 +1053,9 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 			case STATE_VM_ARGS :
 				addLaunchArgumentToMap(VM_ARGS, String.valueOf(ch, start, length));
 				break;
+			case STATE_VM_ARGS_FREEBSD :
+				addLaunchArgumentToMap(VM_ARGS_FREEBSD, String.valueOf(ch, start, length));
+				break;
 			case STATE_VM_ARGS_LINUX :
 				addLaunchArgumentToMap(VM_ARGS_LINUX, String.valueOf(ch, start, length));
 				break;
@@ -1206,6 +1239,10 @@ public class ProductFile extends DefaultHandler implements IProductDescriptor {
 		addIcon(OS_WIN32, attributes.getValue(WIN32_256_HIGH));
 	}
 
+	private void processFreeBSD(Attributes attributes) {
+		addIcon(OS_FREEBSD, attributes.getValue(ATTRIBUTE_ICON));
+	}
+
 	private void processLinux(Attributes attributes) {
 		addIcon(OS_LINUX, attributes.getValue(ATTRIBUTE_ICON));
 	}
diff --git a/rt.equinox.p2/examples/org.eclipse.equinox.p2.examples.rcp.cloud.releng/build.properties b/rt.equinox.p2/examples/org.eclipse.equinox.p2.examples.rcp.cloud.releng/build.properties
index d8e85b5..10e1c66 100644
--- a/rt.equinox.p2/examples/org.eclipse.equinox.p2.examples.rcp.cloud.releng/build.properties
+++ b/rt.equinox.p2/examples/org.eclipse.equinox.p2.examples.rcp.cloud.releng/build.properties
@@ -29,7 +29,8 @@ collectingFolder=${archivePrefix}
 #     configs=win32,win32,x86 & linux,motif,x86
 # By default the value is *,*,*
 configs = win32, win32, x86 & \
-    linux, gtk, x86 &
+	linux, gtk, x86 & \
+	freebsd, gtk, x86
 #configs=win32, win32, x86 & \
 #	linux, gtk, ppc &\
 # linux, gtk, x86 & \
diff --git a/rt.equinox.p2/examples/org.eclipse.equinox.p2.examples.rcp.discovery.releng/build.properties b/rt.equinox.p2/examples/org.eclipse.equinox.p2.examples.rcp.discovery.releng/build.properties
index 4be192c..10e1c66 100644
--- a/rt.equinox.p2/examples/org.eclipse.equinox.p2.examples.rcp.discovery.releng/build.properties
+++ b/rt.equinox.p2/examples/org.eclipse.equinox.p2.examples.rcp.discovery.releng/build.properties
@@ -29,7 +29,8 @@ collectingFolder=${archivePrefix}
 #     configs=win32,win32,x86 & linux,motif,x86
 # By default the value is *,*,*
 configs = win32, win32, x86 & \
-    linux, gtk, x86
+	linux, gtk, x86 & \
+	freebsd, gtk, x86
 #configs=win32, win32, x86 & \
 #	linux, gtk, ppc &\
 # linux, gtk, x86 & \
diff --git a/rt.equinox.p2/features/org.eclipse.equinox.p2.core.feature/pom.xml b/rt.equinox.p2/features/org.eclipse.equinox.p2.core.feature/pom.xml
index 70fdde5..d9807d9 100644
--- a/rt.equinox.p2/features/org.eclipse.equinox.p2.core.feature/pom.xml
+++ b/rt.equinox.p2/features/org.eclipse.equinox.p2.core.feature/pom.xml
@@ -39,6 +39,9 @@
               <excludes>
                 <plugin id="org.sat4j.core"/>
                 <plugin id="org.sat4j.pb"/>
+                <plugin id="org.eclipse.equinox.security.macosx"/>
+                <plugin id="org.eclipse.equinox.security.win32.x86"/>
+                <plugin id="org.eclipse.equinox.security.win32.x86_64"/>
               </excludes>
             </configuration>
           </execution>
diff --git a/eclipse.platform.ua/org.eclipse.ui.intro.universal/plugin.xml b/eclipse.platform.ua/org.eclipse.ui.intro.universal/plugin.xml
index e9f8e1d..35b3df6 100644
--- a/eclipse.platform.ua/org.eclipse.ui.intro.universal/plugin.xml
+++ b/eclipse.platform.ua/org.eclipse.ui.intro.universal/plugin.xml
@@ -46,7 +46,7 @@
             <implementation
                   style="themes/shared/html/shared.css,$theme$/html/shared.css,$theme$/html/font-$fontStyle$.css,$theme$/html/$direction$.css"
                   kind="html"
-                  os="win32,linux,macosx,solaris">
+                  os="win32,freebsd,linux,macosx,solaris">
             </implementation>
             <implementation
                   kind="swt">
diff --git a/eclipse.platform.ui/bundles/org.eclipse.ui.browser/plugin.xml b/eclipse.platform.ui/bundles/org.eclipse.ui.browser/plugin.xml
index 7ed3896..84af871 100644
--- a/eclipse.platform.ui/bundles/org.eclipse.ui.browser/plugin.xml
+++ b/eclipse.platform.ui/bundles/org.eclipse.ui.browser/plugin.xml
@@ -87,7 +87,7 @@
       <browser
          id="org.eclipse.ui.browser.firefox"
          name="%browserFirefox"
-         os="linux,aix,hpux,solaris"
+         os="freebsd,linux,aix,hpux,solaris"
          executable="firefox"
          factoryclass="org.eclipse.ui.internal.browser.browsers.MozillaFactory">
          <location>
diff --git a/eclipse.platform.text/org.eclipse.ui.workbench.texteditor/plugin.xml b/eclipse.platform.text/org.eclipse.ui.workbench.texteditor/plugin.xml
index 46672cb..86bfcd5 100644
--- a/eclipse.platform.text/org.eclipse.ui.workbench.texteditor/plugin.xml
+++ b/eclipse.platform.text/org.eclipse.ui.workbench.texteditor/plugin.xml
@@ -1184,7 +1184,7 @@
             %blockSelectionModeFont.description
          </description>
          <fontValue
-               os="linux"
+               os="freebsd,linux"
                value="Monospace-regular-10"
                ws="gtk">
          </fontValue>
diff --git a/eclipse.platform.ui/bundles/org.eclipse.ui.themes/plugin.xml b/eclipse.platform.ui/bundles/org.eclipse.ui.themes/plugin.xml
index 5334aec..0f27c9b 100644
--- a/eclipse.platform.ui/bundles/org.eclipse.ui.themes/plugin.xml
+++ b/eclipse.platform.ui/bundles/org.eclipse.ui.themes/plugin.xml
@@ -21,6 +21,12 @@
         os="linux">
     </theme>
     <theme
+        basestylesheeturi="css/e4-dark.css"
+        id="org.eclipse.e4.ui.css.theme.e4_dark"
+        label="%theme.dark"
+        os="freebsd">
+    </theme>
+    <theme
         basestylesheeturi="css/e4-dark_win.css"
         id="org.eclipse.e4.ui.css.theme.e4_dark"
         label="%theme.dark"
@@ -38,6 +44,12 @@
             label="%theme.gtk"
             os="linux">
       </theme>
+      <theme
+            basestylesheeturi="css/e4_default_gtk.css"
+            id="org.eclipse.e4.ui.css.theme.e4_default"
+            label="%theme.gtk"
+            os="freebsd">
+      </theme>
    <theme
          basestylesheeturi="css/e4_classic_winxp.css"
          id="org.eclipse.e4.ui.css.theme.e4_default"
diff --git a/rt.equinox.p2/bundles/org.eclipse.equinox.p2.tests.reconciler.product/pom.xml b/rt.equinox.p2/bundles/org.eclipse.equinox.p2.tests.reconciler.product/pom.xml
index 9b2fce9..68e15bc 100644
--- a/rt.equinox.p2/bundles/org.eclipse.equinox.p2.tests.reconciler.product/pom.xml
+++ b/rt.equinox.p2/bundles/org.eclipse.equinox.p2.tests.reconciler.product/pom.xml
@@ -38,6 +38,7 @@
 						</goals>
 						<configuration>
 							<formats>
+								<freebsd>tar.gz</freebsd>
 								<linux>tar.gz</linux>
 							</formats>
 						</configuration>
diff --git a/rt.equinox.p2/bundles/org.eclipse.equinox.p2.tests.reconciler.product/reconciler.product b/rt.equinox.p2/bundles/org.eclipse.equinox.p2.tests.reconciler.product/reconciler.product
index 92973d3..b492f25 100644
--- a/rt.equinox.p2/bundles/org.eclipse.equinox.p2.tests.reconciler.product/reconciler.product
+++ b/rt.equinox.p2/bundles/org.eclipse.equinox.p2.tests.reconciler.product/reconciler.product
@@ -43,7 +43,10 @@
       <plugin id="org.eclipse.core.expressions"/>
       <plugin id="org.eclipse.core.jobs"/>
       <plugin id="org.eclipse.core.net"/>
+      <plugin id="org.eclipse.core.net.freebsd.%%ECLIPSE_ARCH%%" fragment="true"/>
+<!--
       <plugin id="org.eclipse.core.net.linux.x86_64" fragment="true"/>
+-->
       <plugin id="org.eclipse.core.runtime"/>
       <plugin id="org.eclipse.core.runtime.compatibility"/>
       <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
@@ -128,11 +131,14 @@
       <plugin id="org.eclipse.osgi.services"/>
       <plugin id="org.eclipse.osgi.util"/>
       <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.gtk.freebsd.%%ECLIPSE_ARCH%%" fragment="true"/>
+<!--
       <plugin id="org.eclipse.swt.cocoa.macosx.x86_64" fragment="true"/>
       <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
       <plugin id="org.eclipse.swt.gtk.linux.x86_64" fragment="true"/>
       <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
       <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>
+-->
       <plugin id="org.eclipse.ui"/>
       <plugin id="org.eclipse.ui.workbench"/>
       <plugin id="org.eclipse.update.configurator"/>
diff --git a/eclipse.platform.releng/features/org.eclipse.rcp/pom.xml b/eclipse.platform.releng/features/org.eclipse.rcp/pom.xml
index dde92d3..09ab2ae 100644
--- a/eclipse.platform.releng/features/org.eclipse.rcp/pom.xml
+++ b/eclipse.platform.releng/features/org.eclipse.rcp/pom.xml
@@ -37,6 +37,7 @@
             <configuration>
               <excludes>
                 <plugin id="org.eclipse.rcp"/>
+                <plugin id="org.eclipse.ui.cocoa"/>
               </excludes>
             </configuration>
           </execution>
diff --git a/eclipse.platform.releng/features/org.eclipse.platform-feature/feature.xml b/eclipse.platform.releng/features/org.eclipse.platform-feature/feature.xml
index 35144a0..5492b95 100644
--- a/eclipse.platform.releng/features/org.eclipse.platform-feature/feature.xml
+++ b/eclipse.platform.releng/features/org.eclipse.platform-feature/feature.xml
@@ -106,6 +106,16 @@
          unpack="false"/>
 
    <plugin
+         id="org.eclipse.core.net.freebsd.%%ECLIPSE_ARCH%%"
+         os="freebsd"
+         arch="%%ECLIPSE_ARCH%%"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.core.net.linux.x86_64"
          os="linux"
          arch="x86_64"
@@ -397,6 +417,16 @@
          unpack="false"/>
 
    <plugin
+         id="org.eclipse.core.filesystem.freebsd.%%ECLIPSE_ARCH%%"
+         os="freebsd"
+         arch="%%ECLIPSE_ARCH%%"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.core.filesystem.linux.x86"
          os="linux"
          arch="x86"
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/pom.xml b/eclipse.platform.swt/bundles/org.eclipse.swt/pom.xml
index 01db883..22c1314 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/pom.xml
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/pom.xml
@@ -20,9 +20,9 @@
   <artifactId>org.eclipse.swt</artifactId>
   <version>3.105.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
-  <properties>
+  <!-- properties>
     <forceContextQualifier>v20160603-0902</forceContextQualifier>
-  </properties>
+  </properties -->
   <build>
     <plugins>
       <plugin>
diff --git a/eclipse.platform.swt.binaries/bundles/binaries-parent/pom.xml b/eclipse.platform.swt.binaries/bundles/binaries-parent/pom.xml
index 73c4197..4493f7c 100644
--- a/eclipse.platform.swt.binaries/bundles/binaries-parent/pom.xml
+++ b/eclipse.platform.swt.binaries/bundles/binaries-parent/pom.xml
@@ -21,9 +21,9 @@
   <artifactId>binaries-parent</artifactId>
   <version>4.6.0-SNAPSHOT</version>
   <packaging>pom</packaging>
-  <properties>
+  <!-- properties>
     <forceContextQualifier>v20160603-0902</forceContextQualifier>
-  </properties>
+  </properties -->
   <build>
     <plugins>
       <plugin>
