Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-falcon into develop
diff --git a/ApproveFalcon.xml b/ApproveFalcon.xml
index b732e29..49d5677 100644
--- a/ApproveFalcon.xml
+++ b/ApproveFalcon.xml
@@ -189,7 +189,7 @@
         <delete file="jars.txt" />
         <!-- this is a comma-delimited, no spaces, no-line-breaks list used to decide which jars
          to skip in the rat-check of the binaries and which jars to examine before approval -->
-        <property name="jars-list" value="compiler/lib/falcon-flexTasks.jar,compiler/lib/compc.jar,compiler/lib/compiler.jar,compiler/lib/falcon-asc.jar,compiler/lib/falcon-compc.jar,compiler/lib/falcon-flexTasks.jar,compiler/lib/falcon-mxmlc.jar,compiler/lib/falcon-optimizer.jar,compiler/lib/falcon-swfdump.jar,compiler/lib/fdb.jar,compiler/lib/flex-compiler-oem.jar,js/lib/compc.jar,js/lib/externc.jar,js/lib/jsc.jar,js/lib/mxmlc.jar"/>
+        <property name="jars-list" value="compiler/lib/compc.jar,compiler/lib/compiler.jar,compiler/lib/falcon-asc.jar,compiler/lib/falcon-compc.jar,compiler/lib/falcon-mxmlc.jar,compiler/lib/falcon-optimizer.jar,compiler/lib/falcon-swfdump.jar,compiler/lib/fdb.jar,compiler/lib/flex-compiler-oem.jar,js/lib/asdoc.jar,js/lib/falcon-flexTasks.jar,js/lib/compc.jar,js/lib/externc.jar,js/lib/jsc.jar,js/lib/mxmlc.jar"/>
         <echo file="${basedir}/jars.txt" message="${jars-list}"/>
         <echo file="${basedir}/jarexcludes.txt" message="${jars-list}"/>
         <replaceregexp file="${basedir}/jarexcludes.txt" match="," flags="g" replace="${line.separator}" />
diff --git a/NOTICE b/NOTICE
index e9ed444..2f34c3b 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,5 @@
 Apache Flex Compiler
-Copyright 2012-2016 The Apache Software Foundation
+Copyright 2012-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/NOTICE.base b/NOTICE.base
index 4afe0a6..5a27857 100644
--- a/NOTICE.base
+++ b/NOTICE.base
@@ -1,5 +1,5 @@
 Apache Flex Compiler
-Copyright 2012-2016 The Apache Software Foundation
+Copyright 2012-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/NOTICE.fdb b/NOTICE.fdb
index a58ab89..4962b1c 100644
--- a/NOTICE.fdb
+++ b/NOTICE.fdb
@@ -1,5 +1,5 @@
 Apache Flex Debugger
-Copyright 2012-2016 The Apache Software Foundation
+Copyright 2012-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/NOTICE.jx b/NOTICE.jx
index a833bf3..9f7bf65 100644
--- a/NOTICE.jx
+++ b/NOTICE.jx
@@ -1,5 +1,5 @@
 Apache Flex Cross-Compiler
-Copyright 2012-2016 The Apache Software Foundation
+Copyright 2012-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/NOTICE.oem b/NOTICE.oem
index 8240a10..735b898 100644
--- a/NOTICE.oem
+++ b/NOTICE.oem
@@ -1,5 +1,5 @@
 Apache Flex Compiler
-Copyright 2012-2016 The Apache Software Foundation
+Copyright 2012-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/README_JX b/README_JX
index cd1cc1e..7cd70a6 100644
--- a/README_JX
+++ b/README_JX
@@ -73,7 +73,6 @@
 	args4j = http://search.maven.org/remotecontent?filepath=args4j/args4j/2.0.28/args4j-2.0.28.jar
         Google Closure Compiler - http://github.com/google/closure-compiler/archive/v	20151015.zip
         commons-io - https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.tar.gz
-	org.json = http://search.maven.org/remotecontent?filepath=org/codeartisans/org.json/20131017/org.json-20131017.jar
 
 
 Using the Binary Distribution
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 422ca64..6d24f5f 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,3 +1,16 @@
+Apache Flex 'Falcon' Compiler 0.8.0
+=================
+Apache Flex 'Falcon' Compiler 0.8.0 is the sixth release of a next-generation
+compiler intended to someday replace the MXMLC in Apache Flex SDKs, and is the
+compiler for Apache FlexJS SDKs.
+
+The compiler is now biased towards building Apache FlexJS projects.  The Ant
+tasks now point to the cross-compiler, which can now build both SWFs and
+cross-compiler (transpile) MXML and AS to JS.
+
+Lots of bug fixes and other small improvements are included in this release.
+See the RELEASE_NOTES_JX file for a list of resolved issues.
+
 Apache Flex 'Falcon' Compiler 0.7.0
 =================
 Apache Flex 'Falcon' Compiler 0.7.0 is the fifth release of a next-generation
diff --git a/RELEASE_NOTES_JX b/RELEASE_NOTES_JX
index 851646f..f683ea8 100644
--- a/RELEASE_NOTES_JX
+++ b/RELEASE_NOTES_JX
@@ -9,8 +9,16 @@
 
 In addition, lots of bug fixes and small improvements are included in this release. 
 
+New Features
+=================
+-FLEX-35186 Generate source maps for MXML files
+
 Bug Fixes
 ---------
+-FLEX-35323 NullPointerException when setting property of <fx:Object/> with binding
+-FLEX-35317 Generated require() call for Node.js modules does not produce valid code if module name includes dashes
+-FLEX-35316 -version compiler option does not show version
+-FLEX-35300 Could not find file for class: Error
 -FLEX-35239 Runtime error when setting a property to a constant value
 -FLEX-35236 Binding is not working when [Bindable] is set for the class
 -FLEX-35231 [FalconJX] Context Lost on Event Listeners
diff --git a/build.xml b/build.xml
index c6df1c3..231f152 100644
--- a/build.xml
+++ b/build.xml
@@ -1,5 +1,4 @@
 <?xml version="1.0" ?>
-
 <!--
 
   Licensed to the Apache Software Foundation (ASF) under one or more
@@ -284,6 +283,8 @@
     <target name="stage-source"
         description="Package source files required to build in zip file" >
         <antcall target="clean-temp"/>
+        <sleep seconds="3" />
+        <mkdir dir="${basedir}/temp"/>
 
         <copy todir="${basedir}/temp" includeEmptyDirs="false">
             <fileset dir="${basedir}">
diff --git a/compiler-jx/.classpath b/compiler-jx/.classpath
index d249dbd..79c17cd 100644
--- a/compiler-jx/.classpath
+++ b/compiler-jx/.classpath
@@ -9,7 +9,6 @@
 	<classpathentry kind="lib" path="lib/google/closure-compiler/compiler.jar"/>
 	<classpathentry kind="lib" path="lib/commons-io.jar"/>
 	<classpathentry kind="lib" path="lib/args4j.jar"/>
-	<classpathentry kind="lib" path="lib/org.json.jar"/>
 	<classpathentry kind="lib" path="lib/guava.jar"/>
 	<classpathentry kind="lib" path="lib/flex-tool-api.jar"/>
 	<classpathentry kind="lib" path="lib/junit-4.10.jar"/>
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java
index f13ee22..f9fcd9c 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSC.java
@@ -202,6 +202,7 @@
 	                case SWF:
 	                	System.out.println("COMPC");
 	                    COMPC compc = new COMPC();
+	                    mxmlc = compc;
 	                    compc.configurationClass = JSGoogCompcConfiguration.class;
 	                    result = compc.mainNoExit(removeJSArgs(args));
 	                    if (result != 0)
@@ -213,6 +214,7 @@
 	                case JS_FLEX:
 	                	System.out.println("COMPCJSCFlex");
 	                	COMPJSCFlex flex = new COMPJSCFlex();
+	                	lastCompiler = flex;
 	                    result = flex.mainNoExit(removeASArgs(args), problems.getProblems(), false);
 	                    if (result != 0)
 	                    {
@@ -220,7 +222,9 @@
 	                    }
 	                    break;
 	                case JS_NATIVE:
+                    case JS_NODE:
 	                	COMPJSCNative jsc = new COMPJSCNative();
+	                	lastCompiler = jsc;
 	                    result = jsc.mainNoExit(removeASArgs(args), problems.getProblems(), false);
 	                    if (result != 0)
 	                    {
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSCFlex.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSCFlex.java
index c403bbc..3744a67 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSCFlex.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/COMPJSCFlex.java
@@ -29,8 +29,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.zip.Deflater;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
@@ -64,6 +66,7 @@
 import org.apache.flex.compiler.targets.ITarget.TargetType;
 import org.apache.flex.compiler.targets.ITargetSettings;
 import org.apache.flex.compiler.units.ICompilationUnit;
+import org.apache.flex.compiler.units.ICompilationUnit.UnitType;
 import org.apache.flex.swc.io.SWCReader;
 
 /**
@@ -525,4 +528,39 @@
     {
         return TargetType.SWC;
     }
+
+    @Override
+    public List<String> getSourceList()
+    {
+        ArrayList<String> list = new ArrayList<String>();
+        LinkedList<ICompilerProblem> problemList = new LinkedList<ICompilerProblem>();
+        try
+        {
+            Collection<ICompilerProblem> errors = new ArrayList<ICompilerProblem>();
+            Collection<ICompilationUnit> roots = ((FlexJSSWCTarget)target).getReachableCompilationUnits(errors);
+            Collection<ICompilationUnit> units = project.getReachableCompilationUnitsInSWFOrder(roots);
+            for (ICompilationUnit unit : units)
+            {
+                UnitType ut = unit.getCompilationUnitType();
+                if (ut == UnitType.AS_UNIT || ut == UnitType.MXML_UNIT)
+                {
+                    list.add(unit.getAbsoluteFilename());
+                }
+            }
+        }
+        catch (InterruptedException e)
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        
+        return list;
+    }
+
+    @Override
+    public String getMainSource()
+    {
+        return null;
+    }
+
 }
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ExternCConfiguration.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ExternCConfiguration.java
index d3118e9..67bc814 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ExternCConfiguration.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/ExternCConfiguration.java
@@ -38,6 +38,7 @@
 import org.apache.flex.compiler.internal.config.annotations.Config;
 import org.apache.flex.compiler.internal.config.annotations.InfiniteArguments;
 import org.apache.flex.compiler.internal.config.annotations.Mapping;
+import org.apache.flex.compiler.utils.NodeJSUtils;
 import org.apache.flex.utils.FilenameNormalization;
 
 public class ExternCConfiguration extends Configuration
@@ -324,15 +325,7 @@
         for (String module : namedModules)
         {
             //convert to camel case
-            String camelCaseModule = module;
-            int moduleIndex = camelCaseModule.indexOf("-");
-            while (moduleIndex != -1 && moduleIndex < camelCaseModule.length() - 1)
-            {
-                camelCaseModule = camelCaseModule.substring(0, moduleIndex)
-                        + camelCaseModule.substring(moduleIndex + 1, moduleIndex + 2).toUpperCase()
-                        + camelCaseModule.substring(moduleIndex + 2);
-                moduleIndex = camelCaseModule.indexOf("-");
-            }
+            String camelCaseModule = NodeJSUtils.convertFromDashesToCamelCase(module);
             if(basePackageName.length() == 0)
             {
                 if (classReference.getBaseName().equals(camelCaseModule))
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java
index 795466e..1c72e74 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -41,6 +41,7 @@
 import org.apache.flex.compiler.clients.problems.WorkspaceProblemFormatter;
 import org.apache.flex.compiler.codegen.js.IJSPublisher;
 import org.apache.flex.compiler.codegen.js.IJSWriter;
+import org.apache.flex.compiler.common.VersionInfo;
 import org.apache.flex.compiler.config.Configuration;
 import org.apache.flex.compiler.config.ConfigurationBuffer;
 import org.apache.flex.compiler.config.Configurator;
@@ -148,8 +149,12 @@
         SWF("SWF"),
         JS_FLEX("JSFlex"),
         JS_FLEX_CORDOVA("JSFlexCordova"),
+        //JS without the FlexJS framework
         JS_NATIVE("JS"),
-        JS_NODE("JSNode");
+        //Node.js application
+        JS_NODE("JSNode"),
+        //Node.js module
+        JS_NODE_MODULE("JSNodeModule");
 
         private String text;
 
@@ -260,8 +265,8 @@
     protected ITargetSettings targetSettings;
     protected IJSApplication jsTarget;
     private IJSPublisher jsPublisher;
-    private MXMLC mxmlc;
-    private JSCompilerEntryPoint lastCompiler;
+    protected MXMLC mxmlc;
+    protected JSCompilerEntryPoint lastCompiler;
     public boolean noLink;
     public OutputStream err;
 	public Class<? extends Configuration> configurationClass = JSGoogConfiguration.class;
@@ -335,7 +340,7 @@
 	                    	result = mxmlc.mainCompileOnly(removeJSArgs(args), err);
 	                    else
 	                    	result = mxmlc.mainNoExit(removeJSArgs(args));
-	                    if (result != 0)
+	                    if (result != 0 && result != 2)
 	                    {
 	                    	problems.addAll(mxmlc.problems.getProblems());
 	                    	break targetloop;
@@ -345,7 +350,7 @@
 	                	MXMLJSCFlex flex = new MXMLJSCFlex();
 	                	lastCompiler = flex;
 	                    result = flex.mainNoExit(removeASArgs(args), problems.getProblems(), false);
-	                    if (result != 0)
+	                    if (result != 0 && result != 2)
 	                    {
 	                    	break targetloop;
 	                    }
@@ -354,25 +359,34 @@
 	                	MXMLJSCFlexCordova flexCordova = new MXMLJSCFlexCordova();
 	                	lastCompiler = flexCordova;
 	                    result = flexCordova.mainNoExit(removeASArgs(args), problems.getProblems(), false);
-	                    if (result != 0)
+	                    if (result != 0 && result != 2)
 	                    {
 	                    	break targetloop;
 	                    }
 	                    break;
 	                case JS_NODE:
-	                	MXMLJSCNode node = new MXMLJSCNode();
-	                	lastCompiler = node;
-	                    result = node.mainNoExit(removeASArgs(args), problems.getProblems(), false);
-	                    if (result != 0)
-	                    {
-	                    	break targetloop;
-	                    }
-	                    break;
+                        MXMLJSCNode node = new MXMLJSCNode();
+                        lastCompiler = node;
+                        result = node.mainNoExit(removeASArgs(args), problems.getProblems(), false);
+                        if (result != 0 && result != 2)
+                        {
+                            break targetloop;
+                        }
+                        break;
+                    case JS_NODE_MODULE:
+                        MXMLJSCNodeModule nodeModule = new MXMLJSCNodeModule();
+                        lastCompiler = nodeModule;
+                        result = nodeModule.mainNoExit(removeASArgs(args), problems.getProblems(), false);
+                        if (result != 0 && result != 2)
+                        {
+                            break targetloop;
+                        }
+                        break;
 	                case JS_NATIVE:
 	                	MXMLJSCNative jsc = new MXMLJSCNative();
 	                	lastCompiler = jsc;
 	                    result = jsc.mainNoExit(removeASArgs(args), problems.getProblems(), false);
-	                    if (result != 0)
+	                    if (result != 0 && result != 2)
 	                    {
 	                    	break targetloop;
 	                    }
@@ -830,7 +844,10 @@
             configBuffer = projectConfigurator.getConfigurationBuffer();
 
             if (configBuffer.getVar("version") != null) //$NON-NLS-1$
+            {
+                System.out.println(VersionInfo.buildMessage());
                 return false;
+            }
 
             if (problems.hasErrors())
                 return false;
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSCNode.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSCNode.java
index 49a4013..6ae1999 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSCNode.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSCNode.java
@@ -174,10 +174,14 @@
     protected ITargetSettings targetSettings;
     protected IJSApplication jsTarget;
     private IJSPublisher jsPublisher;
-    
+
     public MXMLJSCNode()
     {
-        IBackend backend = new NodeBackend();
+        this(new NodeBackend());
+    }
+    
+    protected MXMLJSCNode(IBackend backend)
+    {
         workspace = new Workspace();
         workspace.setASDocDelegate(new FlexJSASDocDelegate());
         project = new FlexJSProject(workspace, backend);
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSCNodeModule.java b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSCNodeModule.java
new file mode 100644
index 0000000..7b65fc1
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/clients/MXMLJSCNodeModule.java
@@ -0,0 +1,30 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.clients;
+
+import org.apache.flex.compiler.internal.driver.js.node.NodeModuleBackend;
+
+public class MXMLJSCNodeModule extends MXMLJSCNode
+{
+    public MXMLJSCNodeModule()
+    {
+        super(new NodeModuleBackend());
+    }
+}
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index ca47881..3ace9e5 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -77,6 +77,8 @@
     }
     private Stack<Context> stack = new Stack<Context>();
 
+    public boolean needLanguage = false;
+    
     public boolean isExterns = false;
 
     public boolean inE4xFilter = false;
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 2d7b257..d07cf4f 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -215,7 +215,7 @@
                     if (project instanceof FlexJSProject)
                     {
                         FlexJSProject flexJSProject = (FlexJSProject) project;
-                        boolean needLanguage = flexJSProject.needLanguage;
+                        boolean needLanguage = getModel().needLanguage;
                         if (needLanguage && !foundLanguage)
                         {
                             StringBuilder appendString = new StringBuilder();
@@ -941,6 +941,7 @@
         ICompilerProject project = getWalker().getProject();;
         if (project instanceof FlexJSProject)
         	((FlexJSProject)project).needLanguage = true;
+        getModel().needLanguage = true;
         write(JSFlexJSEmitterTokens.CLOSURE_FUNCTION_NAME);
         write(ASEmitterTokens.PAREN_OPEN);
     }
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
index c99d4d9..3260ef9 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
@@ -131,7 +131,7 @@
         ICompilerProject project = this.getProject();
         if (project instanceof FlexJSProject)
         	((FlexJSProject)project).needLanguage = true;
-        
+        getEmitter().getModel().needLanguage = true;
         if (node instanceof IBinaryOperatorNode)
         {
             IBinaryOperatorNode binaryOperatorNode = (IBinaryOperatorNode) node; 
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
index d125eeb..5a8a64e 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@ -128,6 +128,7 @@
                         ICompilerProject project = this.getProject();
                         if (project instanceof FlexJSProject)
                             ((FlexJSProject) project).needLanguage = true;
+                        getEmitter().getModel().needLanguage = true;
                         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                         write(ASEmitterTokens.MEMBER_ACCESS);
                         if (isInt)
@@ -190,6 +191,7 @@
                         ICompilerProject project = this.getProject();
                         if (project instanceof FlexJSProject)
                             ((FlexJSProject) project).needLanguage = true;
+                        getEmitter().getModel().needLanguage = true;
                         startMapping(node.getNameNode());
                         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                         write(ASEmitterTokens.MEMBER_ACCESS);
@@ -205,6 +207,7 @@
                             ICompilerProject project = this.getProject();
                             if (project instanceof FlexJSProject)
                                 ((FlexJSProject) project).needLanguage = true;
+                            getEmitter().getModel().needLanguage = true;
                             write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                             write(ASEmitterTokens.MEMBER_ACCESS);
                             write("sortOn");
@@ -228,6 +231,7 @@
 	                			{
 		                            if (project instanceof FlexJSProject)
 		                                ((FlexJSProject) project).needLanguage = true;
+		                            getEmitter().getModel().needLanguage = true;
 		                            write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
 		                            write(ASEmitterTokens.MEMBER_ACCESS);
 		                            write("sort");
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
index 0f1d0cd..5d2c413 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -51,6 +51,7 @@
 import org.apache.flex.compiler.tree.as.ITypeNode;
 import org.apache.flex.compiler.units.ICompilationUnit;
 import org.apache.flex.compiler.utils.NativeUtils;
+import org.apache.flex.compiler.utils.NodeJSUtils;
 
 public class PackageHeaderEmitter extends JSSubEmitter implements
         ISubEmitter<IPackageDefinition>
@@ -402,26 +403,28 @@
         if (externalRequiresList != null)
         {
             Collections.sort(externalRequiresList);
-            for (String imp : externalRequiresList)
+            for (String nodeJSModuleName : externalRequiresList)
             {
-                if (writtenRequires.indexOf(imp) == -1)
+                if (writtenRequires.indexOf(nodeJSModuleName) == -1)
                 {
+                    String moduleVariableName = NodeJSUtils.convertFromDashesToCamelCase(nodeJSModuleName);
                     /* var x = require('x');\n */
+                    /* var someModule = require('some-module');\n */
                     write(ASEmitterTokens.VAR);
                     write(ASEmitterTokens.SPACE);
-                    write(imp);
+                    write(moduleVariableName);
                     write(ASEmitterTokens.SPACE);
                     write(ASEmitterTokens.EQUAL);
                     write(ASEmitterTokens.SPACE);
                     write(NodeEmitterTokens.REQUIRE);
                     write(ASEmitterTokens.PAREN_OPEN);
                     write(ASEmitterTokens.SINGLE_QUOTE);
-                    write(imp);
+                    write(nodeJSModuleName);
                     write(ASEmitterTokens.SINGLE_QUOTE);
                     write(ASEmitterTokens.PAREN_CLOSE);
                     writeNewline(ASEmitterTokens.SEMICOLON);
 
-                    writtenRequires.add(imp);
+                    writtenRequires.add(nodeJSModuleName);
 
                     emitsExternalRequires = true;
                 }
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/node/NodePublisher.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/node/NodePublisher.java
index 4d0747c..4a74a65 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/node/NodePublisher.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/node/NodePublisher.java
@@ -29,6 +29,8 @@
 
 public class NodePublisher extends JSCPublisher
 {
+    public boolean exportModule = false;
+
     public NodePublisher(Configuration config, FlexJSProject project)
     {
         super(project, config);
@@ -63,9 +65,18 @@
     protected String getTemplateBody(String projectName)
     {
         StringBuilder bodyJS = new StringBuilder();
-        bodyJS.append("new ");
-        bodyJS.append(projectName);
-        bodyJS.append("();");
+        if (exportModule)
+        {
+            bodyJS.append("module.exports = ");
+            bodyJS.append(projectName);
+            bodyJS.append(";");
+        }
+        else
+        {
+            bodyJS.append("new ");
+            bodyJS.append(projectName);
+            bodyJS.append("();");
+        }
         return bodyJS.toString();
     }
 
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/node/NodeModuleBackend.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/node/NodeModuleBackend.java
new file mode 100644
index 0000000..8968894
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/driver/js/node/NodeModuleBackend.java
@@ -0,0 +1,47 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.driver.js.node;
+
+import java.util.List;
+
+import org.apache.flex.compiler.config.Configuration;
+import org.apache.flex.compiler.driver.IBackend;
+import org.apache.flex.compiler.internal.codegen.js.node.NodePublisher;
+import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSPublisher;
+import org.apache.flex.compiler.internal.driver.js.jsc.JSCBackend;
+import org.apache.flex.compiler.internal.projects.FlexJSProject;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+
+/**
+ * A concrete implementation of the {@link IBackend} API for Node.js modules.
+ *
+ * @author Josh Tynjala
+ */
+public class NodeModuleBackend extends JSCBackend
+{
+    @Override
+    public MXMLFlexJSPublisher createPublisher(FlexJSProject project,
+                                               List<ICompilerProblem> errors, Configuration config)
+    {
+        NodePublisher publisher = new NodePublisher(config, project);
+        publisher.exportModule = true;
+        return publisher;
+    }
+}
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
index a726d38..8dc88b0 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
@@ -392,8 +392,9 @@
     public List<String> getCompilerExternalLibraryPath(Configuration config)
     {
     	List<String> list = ((JSConfiguration)config).getCompilerJsExternalLibraryPath();
-        list.addAll(config.getCompilerExternalLibraryPath());
-    	return list;
+        if (list != null && list.size() > 0)
+        	return list;
+        return config.getCompilerExternalLibraryPath();
     }
 
     /**
@@ -402,8 +403,9 @@
     public List<String> getCompilerLibraryPath(Configuration config)
     {
     	List<String> list = ((JSConfiguration)config).getCompilerJsLibraryPath();
-        list.addAll(config.getCompilerLibraryPath());
-    	return list;
+        if (list != null && list.size() > 0)
+        	return list;
+        return config.getCompilerLibraryPath();
     }
     
     /**
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NodeJSUtils.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NodeJSUtils.java
new file mode 100644
index 0000000..608b3ac
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NodeJSUtils.java
@@ -0,0 +1,41 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.utils;
+
+public class NodeJSUtils
+{
+    /**
+     * Converts the name of a node module with dashes into a version in camel
+     * case so that it can be a valid identifier.
+     */
+    public static String convertFromDashesToCamelCase(String moduleNameWithDashes)
+    {
+        String camelCaseModule = moduleNameWithDashes;
+        int moduleIndex = camelCaseModule.indexOf("-");
+        while (moduleIndex != -1 && moduleIndex < camelCaseModule.length() - 1)
+        {
+            camelCaseModule = camelCaseModule.substring(0, moduleIndex)
+                    + camelCaseModule.substring(moduleIndex + 1, moduleIndex + 2).toUpperCase()
+                    + camelCaseModule.substring(moduleIndex + 2);
+            moduleIndex = camelCaseModule.indexOf("-");
+        }
+        return camelCaseModule;
+    }
+}
diff --git a/compiler-jx/src/main/resources/downloads.xml b/compiler-jx/src/main/resources/downloads.xml
index 97491f7..9885ede 100644
--- a/compiler-jx/src/main/resources/downloads.xml
+++ b/compiler-jx/src/main/resources/downloads.xml
@@ -119,21 +119,6 @@
       <param name="dest.filename" value="${guava.name}.jar"/>
     </antcall>
 
-    <!--  org.json -->
-    <property name="org.json.name" value="org.json"/>
-    <property name="org.json.version" value="20131017"/>
-    <!-- property name="org.json.version" value="20130213"/ -->
-    <antcall target="download-dependency">
-      <param name="name" value="${org.json.name}"/>
-      <param name="src.server" value="${maven.search.url}"/>
-      <param name="src.folder" value="org/codeartisans/org.json/${org.json.version}"/>
-      <param name="src.filename" value="org.json-${org.json.version}.jar"/>
-      <param name="src.checksum" value="f1aa9ffeda57b9117e79407acc860e74"/>
-      <!-- param name="src.checksum" value="e0593b60af743a63f9678399d275272a"/ --><!-- version 20130213 -->
-      <param name="dest.folder" value=""/>
-      <param name="dest.filename" value="${org.json.name}.jar"/>
-    </antcall>
-
     <!--  flex-tool-api -->
     <property name="flexToolApi.name" value="flex-tool-api"/>
     <property name="flexToolApi.version" value="1.0.0"/>
diff --git a/compiler/src/main/java/org/apache/flex/compiler/clients/MXMLC.java b/compiler/src/main/java/org/apache/flex/compiler/clients/MXMLC.java
index d77db73..473f48d 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/clients/MXMLC.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/clients/MXMLC.java
@@ -1141,6 +1141,7 @@
     
     public String getMainSource()
     {
+    	if (mainCU == null) return "";
         return mainCU.getAbsoluteFilename();
     }
     
diff --git a/compiler/src/main/java/org/apache/flex/compiler/common/VersionInfo.java b/compiler/src/main/java/org/apache/flex/compiler/common/VersionInfo.java
index 99a4194..8fadbd9 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/common/VersionInfo.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/common/VersionInfo.java
@@ -31,8 +31,8 @@
  */
 public class VersionInfo
 {
-    public static final String FLEX_MAJOR_VERSION = "4";
-    public static final String FLEX_MINOR_VERSION = "7";
+    public static final String FLEX_MAJOR_VERSION = "0";
+    public static final String FLEX_MINOR_VERSION = "8";
     public static final String FLEX_NANO_VERSION  = "0";
     
 	/**
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingDestinationMaker.java b/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingDestinationMaker.java
index 0e78d5d..89ad6a2 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingDestinationMaker.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/codegen/databinding/BindingDestinationMaker.java
@@ -128,15 +128,20 @@
         {
             IMXMLPropertySpecifierNode psn = (IMXMLPropertySpecifierNode)parent;
             IDefinition d = psn.getDefinition();
-            Binding b = host.getInstanceScope().getBinding(d);
-            INamespaceReference ns = psn.getDefinition().getNamespaceReference();
-            if (ns != NamespaceDefinition.getPublicNamespaceDefinition())
+            //it's possible for the definition to be null if we're dealing with
+            //a dynamic property on a class like Object -JT
+            if (d != null)
             {
-                InstructionList insns = new InstructionList();
-                insns.addInstruction(OP_getlocal0);
-                insns.addInstruction(OP_getlocal1);
-                insns.addInstruction(OP_setproperty, b.getName());
-                ret = new InstructionListNode(insns);    // Wrap the IL in a node and return it
+                Binding b = host.getInstanceScope().getBinding(d);
+                INamespaceReference ns = d.getNamespaceReference();
+                if (ns != NamespaceDefinition.getPublicNamespaceDefinition())
+                {
+                    InstructionList insns = new InstructionList();
+                    insns.addInstruction(OP_getlocal0);
+                    insns.addInstruction(OP_getlocal1);
+                    insns.addInstruction(OP_setproperty, b.getName());
+                    ret = new InstructionListNode(insns);    // Wrap the IL in a node and return it
+                }
             }
         }
         return ret;   
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java b/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java
index e2f244c..d34cdee 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java
@@ -36,6 +36,7 @@
 import org.apache.flex.compiler.css.ICSSPropertyValue;
 import org.apache.flex.compiler.css.ICSSRule;
 import org.apache.flex.compiler.css.ICSSSelector;
+import org.apache.flex.compiler.css.ICSSSelectorCondition;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.metadata.IMetaTag;
@@ -385,7 +386,11 @@
             for (final ICSSSelector selector : rule.getSelectorGroup())
             {
                 if (isWildcardSelector(selector))
-                    return true;
+                {
+                	String selName = getOptionalSelectorName(selector);
+                	if (selName == null) return true;
+                    return qnames.contains(selName);
+                }
                 final String qname = resolvedSelectors.get(selector);
                 if (qnames.contains(qname))
                     return true;
@@ -514,6 +519,35 @@
     }
 
     /**
+     * Check if the selector is a optional class selector.
+     * An optional class selector is a class selector
+     * with the name opt_qname_otherstuff.
+     * 
+     * The output will not contain the selector if the
+     * class identified by qname is not in the output.
+     * 
+     * @param selector CSS selector
+     * @return True if the selector is a "optional" selector.
+     */
+    public static String getOptionalSelectorName(ICSSSelector selector)
+    {
+    	ImmutableList<ICSSSelectorCondition> conditions = selector.getConditions();
+    	if (conditions.size() == 0)
+    		return null;
+        final String elementName = conditions.get(0).getValue();
+        if (elementName == null) return null;
+        if (elementName.startsWith("opt_"))
+        {
+        	int c = elementName.indexOf("_", 4);
+        	if (c >= 0)
+        	{
+        		return elementName.substring(4, c).replace("-", ".");
+        		
+        	}
+        }
+        return null;
+    }
+    /**
      * Build a map from QNames to class definitions.
      * 
      * @param classDefinitions Class definitions.
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/definitions/AccessorDefinition.java b/compiler/src/main/java/org/apache/flex/compiler/internal/definitions/AccessorDefinition.java
index aadd143..575580e 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/definitions/AccessorDefinition.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/definitions/AccessorDefinition.java
@@ -31,6 +31,7 @@
 import org.apache.flex.compiler.definitions.INamespaceDefinition;
 import org.apache.flex.compiler.definitions.IPackageDefinition;
 import org.apache.flex.compiler.definitions.ISetterDefinition;
+import org.apache.flex.compiler.problems.UnresolvedNamespaceProblem;
 import org.apache.flex.compiler.projects.ICompilerProject;
 import org.apache.flex.compiler.scopes.IDefinitionSet;
 import org.apache.flex.compiler.tree.as.IVariableNode;
@@ -163,6 +164,11 @@
                     {
                         INamespaceReference testDefRef = definition.getNamespaceReference();
                         INamespaceDefinition testNamespaceDef = testDefRef.resolveNamespaceReference(project);
+                        if (testNamespaceDef == null)
+                        {
+                        	project.getProblems().add(new UnresolvedNamespaceProblem(definition.getNode()));
+                        	return null;
+                        }
                         final boolean testBindable = ((NamespaceDefinition)testNamespaceDef).getAETNamespace().getName().equals(
                                 BindableHelper.bindableNamespaceDefinition.getAETNamespace().getName());
                         /* aharui: namespaces shouldn't have to match.  A subclass may only override
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/projects/FlexProject.java b/compiler/src/main/java/org/apache/flex/compiler/internal/projects/FlexProject.java
index b01eed5..94d1f30 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/projects/FlexProject.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/projects/FlexProject.java
@@ -2301,6 +2301,7 @@
                 }
             }
         }
+        if (func == null) return false;
 		IMetaTag[] metas = func.getAllMetaTags();
 		for (IMetaTag meta : metas)
 		{
@@ -2340,8 +2341,9 @@
     public List<String> getCompilerExternalLibraryPath(Configuration config)
     {
     	List<String> list = config.getCompilerSwfExternalLibraryPath();
-        list.addAll(config.getCompilerExternalLibraryPath());
-    	return list;
+        if (list != null && list.size() > 0)
+        	return list;
+        return config.getCompilerExternalLibraryPath();
     }
 
     /**
@@ -2350,8 +2352,9 @@
     public List<String> getCompilerLibraryPath(Configuration config)
     {
     	List<String> list = config.getCompilerSwfLibraryPath();
-        list.addAll(config.getCompilerLibraryPath());
-    	return list;
+        if (list != null && list.size() > 0)
+        	return list;
+        return config.getCompilerLibraryPath();
     }
 
     /**
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java b/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java
index 06f932a..144ba5f 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java
@@ -443,6 +443,9 @@
 	                                        {
 	                                        	String methodName = method.getMethodName();
 	                                        	if (methodName == null) continue;
+	                                        	// match getter with getter methodInfo
+	                                        	if (trait.isGetter() && method.getReturnType().getBaseName().equals(IASLanguageConstants.void_)) continue;
+	                                        	if (trait.isSetter() && (!method.getReturnType().getBaseName().equals(IASLanguageConstants.void_))) continue;
 	                                        	if (methodName.equals(trait.getName().getBaseName()))
 	                                        	{
 	                                        		String[] keys = meta.getKeys();
@@ -479,7 +482,6 @@
 	                                                				method.setReturnType(name);
 	                                                				foundName = true;
 	                                                				changedABC = true;
-	                                                				break metas;
 	                                        					}
 	                                        				}
 	                                        				if (!foundName)
@@ -494,7 +496,6 @@
 	                                        					namePool.add(name);
 	                                        					method.setReturnType(name);
 	                                        					changedABC = true;
-	                                            				break metas;
 	                                        				}
 	                                        			}
 	                                        			else if (keys[i].equals(IMetaAttributeConstants.NAME_SWFOVERRIDE_PARAMS))
@@ -556,9 +557,9 @@
 		                                        				}
 		                                        			}
 	                                    					method.setParamTypes(newList);
-	                                    					break metas;
 	                                        			}
 	                                        		}
+	                                        		break metas;
 	                                        	}
 	                                        }
 	                        			}
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_da.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_da.properties
index 210b0c7..a8a07c6 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_da.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_da.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=development
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Afspilleren reagerede ikke som forventet p\u00e5 kommandoen; kommandoen er afbrudt.
 notSuspendedException=Kommandoen kan ikke afgives mens afspilleren k\u00f8rer
 illegalStateException=Kommandoen fungerer ikke uden for en session.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_de.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_de.properties
index 95caf4a..4015eda 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_de.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_de.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=development
 about=Apache fdb (Flash Player Debugger) [Build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Der Player hat nicht wie erwartet auf den Befehl reagiert; der Befehl wird abgebrochen.
 notSuspendedException=Der Befehl kann nicht ausgestellt werden, w\u00e4hrend der Player ausgef\u00fchrt wird
 illegalStateException=Der Befehl ist ohne Sitzung nicht zul\u00e4ssig.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_en.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_en.properties
index 60da901..4635cd0 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_en.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_en.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=development
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Player did not respond to the command as expected; command aborted.
 notSuspendedException=Command cannot be issued while Player is running
 illegalStateException=Command not valid without a session.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_es.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_es.properties
index 284d3ca..9265038 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_es.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_es.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=desarrollo
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=El reproductor no respondi\u00f3 al comando como se esperaba; se cancel\u00f3 el comando.
 notSuspendedException=No puede emitirse el comando mientras el reproductor se est\u00e1 ejecutando.
 illegalStateException=El comando no es v\u00e1lido sin una sesi\u00f3n.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_fi.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_fi.properties
index b35aa24..83c685a 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_fi.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_fi.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=kehitys
 about=Apache fdb (Flash Player Debugger) [versio ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Soitin ei vastannut komentoon odotetulla tavalla. Komento keskeytettiin.
 notSuspendedException=Komentoa ei voi antaa, kun soitin on k\u00e4ynniss\u00e4
 illegalStateException=Komento ei kelpaa ilman istuntoa.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_fr.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_fr.properties
index 1fc316f..bfaedd2 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_fr.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_fr.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=d\u00e9veloppement
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Le lecteur n'a pas r\u00e9pondu \u00e0 la commande comme pr\u00e9vu ; commande annul\u00e9e.
 notSuspendedException=Impossible d'\u00e9mettre la commande lorsque le lecteur est en cours d'ex\u00e9cution
 illegalStateException=Commande incorrecte sans session.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_it.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_it.properties
index 5ad1431..1860937 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_it.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_it.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=sviluppo
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Player non ha risposto al comando come previsto. Comando terminato.
 notSuspendedException=Impossibile inviare il comando mentre Player \u00e8 in esecuzione
 illegalStateException=Comando non valido senza una sessione.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ja.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ja.properties
index 0c3f39e..45381f5 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ja.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ja.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=development
 about=Apache fdb (Flash Player Debugger) [\u30d3\u30eb\u30c9 ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Player \u304c\u30b3\u30de\u30f3\u30c9\u306b\u5bfe\u3057\u3066\u4e88\u671f\u3055\u308c\u305f\u5fdc\u7b54\u3092\u3057\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u30b3\u30de\u30f3\u30c9\u51e6\u7406\u306f\u4e2d\u6b62\u3055\u308c\u307e\u3057\u305f\u3002
 notSuspendedException=Player \u306e\u5b9f\u884c\u4e2d\u306b\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093
 illegalStateException=\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u78ba\u7acb\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30b3\u30de\u30f3\u30c9\u306f\u7121\u52b9\u3067\u3059\u3002
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ko.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ko.properties
index 380c0bb..eec05cf 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ko.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ko.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=\uac1c\ubc1c
 about=Apache fdb(Flash Player Debugger) [\ube4c\ub4dc ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=\ud50c\ub808\uc774\uc5b4\uac00 \uc608\uc0c1\ub300\ub85c \uba85\ub839\uc5d0 \uc751\ub2f5\ud558\uc9c0 \uc54a\uc544 \uba85\ub839\uc774 \uc911\ub2e8\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
 notSuspendedException=\ud50c\ub808\uc774\uc5b4 \uc2e4\ud589 \uc911\uc5d0 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc5c6\uc74c
 illegalStateException=\uc138\uc158\uc774 \uc5c6\uc73c\uba74 \uba85\ub839\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_nb.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_nb.properties
index 32726a3..6fe465a 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_nb.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_nb.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=utvikling
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Spilleren reagerte ikke som forventet p\u00e5 kommandoen. Kommando ble avbrutt.
 notSuspendedException=Kommandoen kan ikke gis mens spilleren kj\u00f8rer
 illegalStateException=Kommandoen er ikke gyldig uten en \u00f8kt.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_nl.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_nl.properties
index 204f541..936e473 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_nl.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_nl.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=ontwikkeling
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Player heeft op onverwachte wijze gereageerd op de opdracht; opdracht afgebroken.
 notSuspendedException=Kan opdracht niet uitvoeren terwijl Player wordt uitgevoerd
 illegalStateException=Opdracht niet geldig zonder sessie
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_pt.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_pt.properties
index 84c53f7..bf8cfad 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_pt.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_pt.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=desenvolvimento
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=O Player n\u00e3o respondeu ao comando como esperado; comando anulado.
 notSuspendedException=N\u00e3o \u00e9 poss\u00edvel emitir o comando enquanto o Player est\u00e1 em execu\u00e7\u00e3o
 illegalStateException=Comando inv\u00e1lido sem uma sess\u00e3o.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ru.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ru.properties
index 3fb7a50..1dfba74 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ru.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_ru.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430
 about=Apache fdb (\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a Flash Player) [\u0441\u0431\u043e\u0440\u043a\u0430 ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c; \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u043e.
 notSuspendedException=\u041a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f
 illegalStateException=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0439 \u0431\u0435\u0437 \u0441\u0435\u0430\u043d\u0441\u0430.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_sv.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_sv.properties
index 58d1880..e9f445b 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_sv.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_sv.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=utveckling
 about=Apache fdb (Flash Player Debugger) [build ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Spelaren svarade inte p\u00e5 kommandot som f\u00f6rv\u00e4ntat. Kommandot har avbrutits.
 notSuspendedException=Du kan inte ange kommandon n\u00e4r spelaren k\u00f6rs.
 illegalStateException=Kommandot \u00e4r inte giltigt utan session.
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_zh_CN.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_zh_CN.properties
index c70870a..37451db 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_zh_CN.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_zh_CN.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=\u5f00\u53d1
 about=Apache fdb\uff08Flash Player \u8c03\u8bd5\u5668\uff09[\u5185\u90e8\u7248\u672c ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Player \u672a\u6309\u9884\u671f\u65b9\u5f0f\u54cd\u5e94\u547d\u4ee4\uff1b\u547d\u4ee4\u5df2\u5f02\u5e38\u7ec8\u6b62\u3002
 notSuspendedException=Player \u5904\u4e8e\u8fd0\u884c\u72b6\u6001\u65f6\u65e0\u6cd5\u53d1\u51fa\u547d\u4ee4
 illegalStateException=\u5982\u679c\u6ca1\u6709\u4f1a\u8bdd\uff0c\u5219\u547d\u4ee4\u65e0\u6548\u3002
diff --git a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_zh_TW.properties b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_zh_TW.properties
index 54b5b2a..f5d34e4 100644
--- a/debugger/src/main/resources/flex/tools/debugger/cli/fdb_zh_TW.properties
+++ b/debugger/src/main/resources/flex/tools/debugger/cli/fdb_zh_TW.properties
@@ -28,7 +28,7 @@
 
 defaultBuildName=\u958b\u767c
 about=Apache fdb (Flash Player \u9664\u932f\u7a0b\u5f0f) [\u7d44\u5efa ${build}]
-copyright=Copyright 2016 The Apache Software Foundation.
+copyright=Copyright 2017 The Apache Software Foundation.
 noResponseException=Player \u672a\u5982\u9810\u671f\u56de\u61c9\u6307\u4ee4\uff1b\u6307\u4ee4\u5df2\u4e2d\u6b62\u3002
 notSuspendedException=Player \u6b63\u5728\u57f7\u884c\u6642\u7121\u6cd5\u767c\u51fa\u6307\u4ee4
 illegalStateException=\u5982\u679c\u6c92\u6709\u5de5\u4f5c\u968e\u6bb5\uff0c\u6307\u4ee4\u5c31\u7121\u6548\u3002
diff --git a/flex-compiler-oem/src/main/java/flex2/compiler/Source.java b/flex-compiler-oem/src/main/java/flex2/compiler/Source.java
index 91a1ce6..3869b40 100644
--- a/flex-compiler-oem/src/main/java/flex2/compiler/Source.java
+++ b/flex-compiler-oem/src/main/java/flex2/compiler/Source.java
@@ -19,6 +19,8 @@
 
 package flex2.compiler;
 
+import java.io.File;
+
 import flex2.compiler.io.VirtualFile;
 
 /**
@@ -118,6 +120,16 @@
         return file.getNameForReporting();
     }
     
+    public String getSourceFileName()
+    {
+    	String s = getName();
+    	if (relativePath.length() > 0)
+    		s += relativePath;
+    	s += File.separator;
+    	s += shortName;
+        return s;
+    }
+    
     public boolean exists()
     {
         return file.getLastModified() > 0;
diff --git a/flex-compiler-oem/src/main/java/flex2/compiler/common/Configuration.java b/flex-compiler-oem/src/main/java/flex2/compiler/common/Configuration.java
index bfb396a..d005472 100644
--- a/flex-compiler-oem/src/main/java/flex2/compiler/common/Configuration.java
+++ b/flex-compiler-oem/src/main/java/flex2/compiler/common/Configuration.java
@@ -2018,7 +2018,304 @@
 		return compilerConfiguration.getAdvancedTelemetry();
 	}
 
+    //
+    // 'closure-lib' option
+    //
+    
+    private String closureLibDirName = null;
+
+    public String getClosureLibDirName()
+    {
+        return closureLibDirName;
+    }
+    
+    public void cfgClosureLib( ConfigurationValue cv, String filename )
+    {
+       	this.closureLibDirName = getOutputPath(cv, filename);
+    }
  	
+    //
+    // 'sdk-js-lib' option
+    //
+    
+    private List<String> sdkJsLibraries = new LinkedList<String>();
+    
+    public List<String> getSDKJSLib()
+    {
+        return sdkJsLibraries;
+    }
+    
+    public void cfgSDKJSLib( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+            VirtualFile f = ConfigurationPathResolver.getVirtualFile( urls[i], configResolver, cfgval );
+            if (f != null)
+            	sdkJsLibraries.add( urls[i] );
+        }
+    }
+
+    //
+    // 'external-js-lib' option
+    //
+    
+    private List<String> externalJsLibraries = new LinkedList<String>();
+    
+    public List<String> getExternalJSLib()
+    {
+        return externalJsLibraries;
+    }
+    
+    public void cfgExternalJSLib( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+            VirtualFile f = ConfigurationPathResolver.getVirtualFile( urls[i], configResolver, cfgval );
+            if (f != null)
+            	externalJsLibraries.add( urls[i] );
+        }
+    }
+
+	//
+	// 'remove-circulars' option
+	//
+	
+	private boolean removeCirculars = false;
+	
+	public boolean getRemoveCirculars()
+	{
+		return removeCirculars;
+	}
+	
+	public void setRemoveCirculars(boolean value)
+	{
+		removeCirculars = value;
+	}
+	
+	public void cfgRemoveCirculars(ConfigurationValue cv, boolean value)
+	{
+		setRemoveCirculars(value);
+	}
+	
+	//
+	// 'skip-transpile' option
+	//
+	
+	private boolean skipTranspile = false;
+	
+	public boolean getSkipTranspile()
+	{
+		return skipTranspile;
+	}
+	
+	public void setSkipTranspile(boolean value)
+	{
+		skipTranspile = value;
+	}
+	
+	public void cfgSkipTranspile(ConfigurationValue cv, boolean value)
+	{
+		setSkipTranspile(value);
+	}
+	
+    //
+    // 'js-compiler-option' option
+    //
+    
+    private List<String> jsCompilerOption = new LinkedList<String>();
+    
+    public List<String> getJsCompilerOption()
+    {
+        return jsCompilerOption;
+    }
+    
+    public void cfgJsCompilerOption( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+        	jsCompilerOption.add( urls[i] );
+        }
+    }
+
+    //
+    // 'js-output-optimization' option
+    //
+    
+    private List<String> jsOutputOptimization = new LinkedList<String>();
+    
+    public List<String> getJsOutputOptimization()
+    {
+        return jsOutputOptimization;
+    }
+    
+    public void cfgJsOutputOptimization( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+        	jsOutputOptimization.add( urls[i] );
+        }
+    }
+    
+    //
+    // 'html-template' option
+    //
+    
+    private String htmlTemplateFileName = null;
+
+    public String getHtmlTemplateFileName()
+    {
+        return htmlTemplateFileName;
+    }
+    
+    public void cfgHtmlTemplate( ConfigurationValue cv, String filename )
+    {
+       	this.htmlTemplateFileName = getOutputPath(cv, filename);
+    }
+ 	
+
+    //
+    // 'html-output-filename' option
+    //
+    
+    private String htmlOutputFileName = null;
+
+    public String getHtmlOutputFilename()
+    {
+        return htmlOutputFileName;
+    }
+    
+    public void cfgHtmlOutputFilename( ConfigurationValue cv, String filename )
+    {
+       	this.htmlOutputFileName = getOutputPath(cv, filename);
+    }
+ 	
+    //
+    // 'compiler-targets' option
+    //
+    
+    private List<String> compilerTargets = new LinkedList<String>();
+    
+    public List<String> getCompilerTargets()
+    {
+        return compilerTargets;
+    }
+    
+    public void cfgCompilerTargets( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+        	compilerTargets.add( urls[i] );
+        }
+    }
+    
+	//
+	// 'source-map' option
+	//
+	
+	private boolean sourceMap = false;
+	
+	public boolean getSourceMap()
+	{
+		return sourceMap;
+	}
+	
+	public void setSourceMap(boolean value)
+	{
+		sourceMap = value;
+	}
+	
+	public void cfgSourceMap(ConfigurationValue cv, boolean value)
+	{
+		setSkipTranspile(value);
+	}
+	
+    //
+    // 'compiler.js-external-library-path' option
+    //
+    
+    private List<String> jsExternalLibrariesPath = new LinkedList<String>();
+    
+    public List<String> getJsExternalLibraryPath()
+    {
+        return jsExternalLibrariesPath;
+    }
+    
+    public void cfgJsExternalLibraryPath( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+            VirtualFile f = ConfigurationPathResolver.getVirtualFile( urls[i], configResolver, cfgval );
+            if (f != null)
+            	jsExternalLibrariesPath.add( urls[i] );
+        }
+    }
+
+
+    //
+    // 'compiler.swf-external-library-path' option
+    //
+    
+    private List<String> swfExternalLibrariesPath = new LinkedList<String>();
+    
+    public List<String> getSwfExternalLibraryPath()
+    {
+        return swfExternalLibrariesPath;
+    }
+    
+    public void cfgSwfExternalLibraryPath( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+            VirtualFile f = ConfigurationPathResolver.getVirtualFile( urls[i], configResolver, cfgval );
+            if (f != null)
+            	swfExternalLibrariesPath.add( urls[i] );
+        }
+    }
+
+    //
+    // 'compiler.js-library-path' option
+    //
+    
+    private List<String> jsLibrariesPath = new LinkedList<String>();
+    
+    public List<String> getJsLibraryPath()
+    {
+        return jsLibrariesPath;
+    }
+    
+    public void cfgJsLibraryPath( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+            VirtualFile f = ConfigurationPathResolver.getVirtualFile( urls[i], configResolver, cfgval );
+            if (f != null)
+            	jsLibrariesPath.add( urls[i] );
+        }
+    }
+
+
+    //
+    // 'compiler.swf-library-path' option
+    //
+    
+    private List<String> swfLibrariesPath = new LinkedList<String>();
+    
+    public List<String> getSwfLibraryPath()
+    {
+        return swfLibrariesPath;
+    }
+    
+    public void cfgSwfLibraryPath( ConfigurationValue cfgval, String[] urls ) throws ConfigurationException
+    {
+        for (int i = 0; i < urls.length; ++i)
+        {
+            VirtualFile f = ConfigurationPathResolver.getVirtualFile( urls[i], configResolver, cfgval );
+            if (f != null)
+            	swfLibrariesPath.add( urls[i] );
+        }
+    }
+
+
  	@Override
  	public Configuration clone()
  	    throws CloneNotSupportedException
diff --git a/flex-compiler-oem/src/main/java/flex2/tools/oem/Application.java b/flex-compiler-oem/src/main/java/flex2/tools/oem/Application.java
index 0d9a307..11b14aa 100644
--- a/flex-compiler-oem/src/main/java/flex2/tools/oem/Application.java
+++ b/flex-compiler-oem/src/main/java/flex2/tools/oem/Application.java
@@ -43,6 +43,7 @@
 import org.apache.flex.swf.types.RGB;
 
 import flash.swf.tags.SetBackgroundColor;
+import flex2.compiler.CompilerException;
 import flex2.compiler.Source;
 import flex2.compiler.SourceList;
 import flex2.compiler.io.FileUtil;
@@ -635,7 +636,7 @@
             mxmljsc.noLink = true;
             //int returnValue = mxmlc.mainCompileOnly(constructCommandLine2(tempOEMConfiguration.configuration), null);
             int returnValue = mxmljsc.mainNoExit(constructCommandLine(oemConfiguration), null, true);
-            if (returnValue == 0)
+            if (returnValue == 0 || returnValue == 2)
                 returnValue = OK;
             else
                 returnValue = FAIL;
@@ -673,8 +674,10 @@
         ApplicationCompilerConfiguration acc = ((ApplicationCompilerConfiguration)config.configuration);
         sources = new ArrayList<Source>();
         VirtualFile[] sourcePaths = acc.getCompilerConfiguration().getSourcePath();
+
         List<String> sourceFiles = mxmljsc.getSourceList();
         String mainFile = mxmljsc.getMainSource();
+        VirtualFile mainVirtualFile = null;
         for (String sourceFile : sourceFiles)
         {
             for (VirtualFile sourcePath : sourcePaths)
@@ -689,10 +692,17 @@
                     boolean isRoot = sourceFile.equals(mainFile);
                     Source source = new Source(sourcePath, relPath, shortName, null, false, isRoot);
                     sources.add(source);
-                    break;
+                    if (pathName.equals(mainFile))
+                    	mainVirtualFile = sourcePath;
                 }
             }
         }
+        try {
+			sourceList = new SourceList(new ArrayList<VirtualFile>(), sourcePaths, mainVirtualFile, new String[0]);
+		} catch (CompilerException e2) {
+			// TODO Auto-generated catch block
+			e2.printStackTrace();
+		}
         ProblemQuery pq = mxmljsc.getProblemQuery();
         List<ICompilerProblem> probs = pq.getProblems();
         for (ICompilerProblem prob : probs)
diff --git a/flex-compiler-oem/src/main/java/flex2/tools/oem/Library.java b/flex-compiler-oem/src/main/java/flex2/tools/oem/Library.java
index bdcb3be..e6f4eb8 100644
--- a/flex-compiler-oem/src/main/java/flex2/tools/oem/Library.java
+++ b/flex-compiler-oem/src/main/java/flex2/tools/oem/Library.java
@@ -37,13 +37,16 @@
 import java.lang.annotation.Annotation;
 import java.net.URI;
 
-import org.apache.flex.compiler.clients.COMPC;
+import org.apache.flex.compiler.clients.COMPJSC;
 import org.apache.flex.compiler.clients.problems.ProblemFormatter;
 import org.apache.flex.compiler.clients.problems.ProblemQuery;
 import org.apache.flex.compiler.problems.CompilerProblemSeverity;
 import org.apache.flex.compiler.problems.ICompilerProblem;
 import org.apache.flex.compiler.problems.annotations.DefaultSeverity;
 
+import flex2.compiler.CompilerException;
+import flex2.compiler.Source;
+import flex2.compiler.SourceList;
 import flex2.compiler.common.CompilerConfiguration;
 import flex2.compiler.config.ConfigurationException;
 import flex2.compiler.io.FileUtil;
@@ -55,6 +58,9 @@
 import flex2.compiler.util.MimeMappings;
 import flex2.compiler.util.PerformanceData;
 import flex2.compiler.util.ThreadLocalToolkit;
+import flex2.linker.SimpleMovie;
+import flex2.tools.oem.internal.ApplicationCompilerConfiguration;
+import flex2.tools.oem.internal.LibraryCompilerConfiguration;
 import flex2.tools.oem.internal.OEMConfiguration;
 import flex2.tools.oem.internal.OEMReport;
 import flex2.tools.oem.internal.OEMUtil;
@@ -249,6 +255,10 @@
     private CompilerControl cc;
     private ApplicationCache applicationCache;
     private LibraryCache libraryCache;
+    
+    private List<Source> compiledSources;
+    private SourceList sourceList;
+
 
     // clean() would null out the following variables
     //LibraryData data;
@@ -746,10 +756,10 @@
     public Report getReport()
     {
         //OEMUtil.setupLocalizationManager();
-        return new OEMReport(null,
+        return new OEMReport(compiledSources,
                              null,
                              null,
-                             null,
+                             sourceList,
                              configurationReport,
                              messages, files);
     }
@@ -904,14 +914,49 @@
               true /* cleanConfig */,
               false /* cleanMessages */,
               false /* cleanThreadLocals */);
-        COMPC compc = new COMPC();
-        int returnValue = compc.mainNoExit(constructCommandLine(oemConfiguration));
-        if (returnValue == 0)
+        COMPJSC compc = new COMPJSC();
+        int returnValue = compc.mainNoExit(constructCommandLine(oemConfiguration), null, true);
+        if (returnValue == 0 || returnValue == 2)
             returnValue = OK;
         else
             returnValue = FAIL;
 
-        convertMessages(compc.getProblems());
+        LibraryCompilerConfiguration acc = ((LibraryCompilerConfiguration)tempOEMConfiguration.configuration);
+        VirtualFile[] sourcePaths = acc.getCompilerConfiguration().getSourcePath();
+
+        compiledSources = new ArrayList<Source>();
+        List<String> sourceFiles = compc.getSourceList();
+        String mainFile = compc.getMainSource();
+        VirtualFile mainVirtualFile = null;
+        if (sourceFiles != null)
+        {
+	        for (String sourceFile : sourceFiles)
+	        {
+	            for (VirtualFile sourcePath : sourcePaths)
+	            {
+	                String pathName = sourcePath.getName();
+	                if (sourceFile.indexOf(pathName) == 0)
+	                {
+	                    String relPath = sourceFile.substring(pathName.length());
+	                    int lastSep = relPath.lastIndexOf(File.separator);
+	                    String shortName = relPath.substring(lastSep + 1);
+	                    relPath = relPath.substring(0, lastSep);
+	                    boolean isRoot = sourceFile.equals(mainFile);
+	                    Source source = new Source(sourcePath, relPath, shortName, null, false, isRoot);
+	                    compiledSources.add(source);
+	                    if (mainFile != null && pathName.equals(mainFile))
+	                    	mainVirtualFile = sourcePath;
+	                }
+	            }
+	        }
+	        try {
+				sourceList = new SourceList(new ArrayList<VirtualFile>(), sourcePaths, mainVirtualFile, new String[0]);
+			} catch (CompilerException e2) {
+				// TODO Auto-generated catch block
+				e2.printStackTrace();
+			}
+        }
+        convertMessages(compc.getProblemQuery());
         
         clean(returnValue != OK, false, false);
         return returnValue;
diff --git a/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMConfiguration.java b/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMConfiguration.java
index f141fd8..eef9c03 100644
--- a/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMConfiguration.java
+++ b/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMConfiguration.java
@@ -1163,6 +1163,21 @@
 	 * 
 	 * @param paths an array of <code>java.io.File</code> (<code>File.isDirectory()</code> must return <code>true</code>).
 	 */
+	public File[] getSourcePath()
+	{
+		if (args.containsKey(COMPILER_SOURCE_PATH))
+			return (File[]) args.get(COMPILER_SOURCE_PATH);
+		if (more.containsKey(COMPILER_SOURCE_PATH))
+			return (File[]) more.get(COMPILER_SOURCE_PATH);
+		return null;
+	}
+
+	/**
+	 * Sets a list of path elements that form the roots of ActionScript class hierarchies.
+	 * This is equivalent to using <code>mxmlc/compc --compiler.source-path</code>.
+	 * 
+	 * @param paths an array of <code>java.io.File</code> (<code>File.isDirectory()</code> must return <code>true</code>).
+	 */
 	public void setSourcePath(File[] paths)
 	{
 		args.put(COMPILER_SOURCE_PATH, paths);
diff --git a/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMReport.java b/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMReport.java
index 21b1d73..e628e08 100644
--- a/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMReport.java
+++ b/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMReport.java
@@ -530,7 +530,7 @@
 		// use this version for now
 		for (Source s : sources)
 		{
-			sourceNames.add(s.getName());
+			sourceNames.add(s.getSourceFileName());
 		}
 		/*
 		// AJH not sure why all this is needed
diff --git a/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMUtil.java b/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMUtil.java
index b6e1d5b..d791e10 100644
--- a/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMUtil.java
+++ b/flex-compiler-oem/src/main/java/flex2/tools/oem/internal/OEMUtil.java
@@ -243,6 +243,8 @@
     private static LibraryCompilerConfiguration processCOMPCCConfiguration(org.apache.flex.compiler.config.Configuration config)
     {
         LibraryCompilerConfiguration acc = new LibraryCompilerConfiguration();
+        ConfigurationPathResolver resolver = new ConfigurationPathResolver(); 
+	    acc.setConfigPathResolver(resolver);
         acc.setBackgroundColor(config.getDefaultBackgroundColor());
         acc.setDebug(config.debug());
         acc.setFrameRate(config.getDefaultFrameRate());
@@ -251,7 +253,45 @@
         acc.setSwfVersion(config.getSwfVersion());
         acc.setScriptRecursionLimit(config.getScriptRecursionLimit());
         acc.setScriptTimeLimit(config.getScriptTimeLimit());
+        CompilerConfiguration cc = acc.getCompilerConfiguration();
         
+        List<String> externalLibraries = config.getCompilerExternalLibraryPath();
+        String[] extlibs = new String[externalLibraries.size()];
+        externalLibraries.toArray(extlibs);
+        try
+        {
+            cc.cfgExternalLibraryPath(null, extlibs);
+        }
+        catch (ConfigurationException e)
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        List<String> libraries = config.getCompilerLibraryPath();
+        String[] libs = new String[libraries.size()];
+        libraries.toArray(libs);
+        try
+        {
+            cc.cfgLibraryPath(null, libs);
+        }
+        catch (ConfigurationException e)
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        List<String> sources = config.getCompilerSourcePath();
+        String[] srcs = new String[sources.size()];
+        sources.toArray(srcs);
+        try
+        {
+            cc.cfgSourcePath(null, srcs);
+        }
+        catch (ConfigurationException e)
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+	    
         return acc;
     }
 	
diff --git a/pom.xml b/pom.xml
index 3425c09..5837abe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -162,6 +162,12 @@
             <exclude>**/target/**</exclude>
             <!-- Stuff an Ant build might have left behind. -->
             <exclude>lib/**</exclude>
+            <!--
+                In case of an ANT based release the typedefs are included as a
+                subdirectory. We need to exclude this directory from the compiler checks
+                as the typedefs build will handle all content in that directory
+            -->
+            <exclude>flex-typedefs/**</exclude>
           </excludes>
         </configuration>
         <dependencies>
@@ -591,4 +597,4 @@
     </pluginRepository>
   </pluginRepositories>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/releasecandidate.xml b/releasecandidate.xml
index 7c2c43a..d9fafda 100644
--- a/releasecandidate.xml
+++ b/releasecandidate.xml
@@ -119,7 +119,7 @@
 		property="browser" value="${env.ProgramFiles}/Mozilla Firefox/firefox.exe" />
     <available file="${env.ProgramFiles(x86)}/Mozilla Firefox/firefox.exe"
 		type="file"
-		property="browser" value="${env.ProgramFiles}/Mozilla Firefox/firefox.exe" />
+		property="browser" value="${env.ProgramFiles(x86)}/Mozilla Firefox/firefox.exe" />
     <available file="/Applications/Firefox.app/Contents/MacOS/firefox"
 		type="file"
 		property="browser" value="/Applications/Firefox.app/Contents/MacOS/firefox" />
@@ -153,7 +153,7 @@
 		property="git" value="${env.ProgramFiles}/Git/bin/git.exe" />
     <available file="${env.ProgramFiles(x86)}/Git/bin/git.exe"
 		type="file"
-		property="git" value="${env.ProgramFiles}/Git/bin/git.exe" />
+		property="git" value="${env.ProgramFiles(x86)}/Git/bin/git.exe" />
     <available file="/usr/local/git/bin/git"
 		type="file"
 		property="git" value="/usr/local/git/bin/git" />
@@ -406,7 +406,7 @@
 \n\
 Please vote to approve this release:\n\
 +1 Approve the release\n\
--1 Veto the release (please provide specific comments to why)\n\
+-1 Disapprove the release (please provide specific comments to why)\n\
 \n\
 This vote will be open for 72 hours or until a result can be called.\n\
 \n\
@@ -435,7 +435,8 @@
 1) create an empty folder,\n\
 2) download into that folder this file:\n\
 https://dist.apache.org/repos/dist/dev/flex/falcon/${release.version}/rc${rc}/ApproveFalcon.xml\n\
-3) run the script: ant -e -f ApproveFalcon.xml -Drelease.version=${release.version} -Drc=${rc}\n\
+3) run the script:\n\
+   ant -e -f ApproveFalcon.xml -Drelease.version=${release.version} -Drc=${rc}\n\
 \n\
 You are not required to use this script, and more testing of the packages\n\
 and build results are always encouraged.\n\
@@ -474,7 +475,7 @@
 			<arg value="${dist.dev}/flex/falcon/${release.version}/rc${rc}" />
             <arg value="${dist.release}/flex/falcon/${release.version}" />
 		</exec>
-		<exec executable="${svn}" dir="${dist.release}/flex/falcon" failonerror="true" >
+		<exec executable="${svn}" dir="${dist.release}/.." failonerror="true" >
 			<arg value="commit" />
 			<arg value="--username" />
 			<arg value="${apache.username}" />