diff --git a/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java b/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java
index 6a0d931..1887498 100644
--- a/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java
+++ b/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java
@@ -329,7 +329,11 @@
 		}
 
 		boolean isAIROnly = isAIROnly(apiClassifierElement.element("prolog"));
-		boolean isVector = className.startsWith("Vector$");
+		if(isAIROnly && !configuration.getAir() && !fullyQualifiedName.equals("flash.display.NativeMenu") && !fullyQualifiedName.equals("flash.display.NativeMenuItem")) {
+			return;
+		}
+
+		boolean isVector = fullyQualifiedName.startsWith("__AS3__.vec.Vector$");
 
 		Set<String> importFullyQualifiedNames = new HashSet<String>();
 		collectImports(apiClassifierElement, packageName, importFullyQualifiedNames);
@@ -428,10 +432,10 @@
 		classBuilder.append("{");
 		classBuilder.append("\n");
 		if (apiConstructorElements.size() > 0) {
-			parseConstructor(apiConstructorElements, className, classBuilder);
+			parseConstructor(apiConstructorElements, fullyQualifiedName, classBuilder);
 		}
 		for (Element apiOperationElement : apiOperationElements) {
-			parseFunction(apiOperationElement, className, false, classBuilder);
+			parseFunction(apiOperationElement, fullyQualifiedName, false, classBuilder);
 		}
 		for (Element apiValueElement : apiValueElements) {
 			parseVariable(apiValueElement, false, classBuilder);
@@ -461,6 +465,9 @@
 		}
 
 		boolean isAIROnly = isAIROnly(apiClassifierElement.element("prolog"));
+		if(isAIROnly && !configuration.getAir()) {
+			return;
+		}
 
 		Set<String> importFullyQualifiedNames = new HashSet<String>();
 		collectImports(apiClassifierElement, packageName, importFullyQualifiedNames);
@@ -556,11 +563,14 @@
 			fullyQualifiedName = packageName + "." + parts[1];
 		}
 
+		boolean isAIROnly = isAIROnly(apiOperationElement.element("prolog"));
+		if(isAIROnly && !configuration.getAir()) {
+			return;
+		}
+
 		Set<String> importFullyQualifiedNames = new HashSet<String>();
 		collectImports(apiOperationElement, packageName, importFullyQualifiedNames);
 
-		boolean isAIROnly = isAIROnly(apiOperationElement.element("prolog"));
-
 		StringBuilder functionBuilder = new StringBuilder();
 		functionBuilder.append("// generated from: ");
 		functionBuilder.append(currentFile.getName());
@@ -602,11 +612,14 @@
 			return;
 		}
 
+		boolean isAIROnly = isAIROnly(apiValueElement.element("prolog"));
+		if(isAIROnly && !configuration.getAir()) {
+			return;
+		}
+
 		Set<String> importFullyQualifiedNames = new HashSet<String>();
 		collectImports(apiValueElement, packageName, importFullyQualifiedNames);
 
-		boolean isAIROnly = isAIROnly(apiValueElement.element("prolog"));
-
 		StringBuilder variableBuilder = new StringBuilder();
 		variableBuilder.append("// generated from: ");
 		variableBuilder.append(currentFile.getName());
@@ -629,6 +642,11 @@
 
 	private void parseVariable(Element apiValueElement, boolean forInterface, StringBuilder variableBuilder)
 			throws Exception {
+		boolean isAIROnly = isAIROnly(apiValueElement.element("prolog"));
+		if(isAIROnly && !configuration.getAir()) {
+			return;
+		}
+	
 		String variableName = apiValueElement.element("apiName").getTextTrim();
 
 		boolean isGetter = false;
@@ -772,6 +790,11 @@
 
 	private void parseFunction(Element apiOperationElement, String contextClassName, boolean forInterface,
 			StringBuilder functionBuilder) throws Exception {
+		boolean isAIROnly = isAIROnly(apiOperationElement.element("prolog"));
+		if(isAIROnly && !configuration.getAir()) {
+			return;
+		}
+
 		String functionName = apiOperationElement.element("apiName").getTextTrim();
 
 		boolean isStatic = false;
@@ -791,6 +814,9 @@
 		Element apiIsOverrideElement = apiOperationDefElement.element("apiIsOverride");
 		if (apiIsOverrideElement != null) {
 			isOverride = true;
+			if(!configuration.getAir() && "clone".equals(functionName) && "flash.ui.ContextMenuItem".equals(contextClassName)) {
+				isOverride = false;
+			}
 		}
 
 		Element apiReturnElement = apiOperationDefElement.element("apiReturn");
@@ -852,7 +878,7 @@
 
 	private void parseConstructor(List<Element> apiConstructorElements, String contextClassName,
 			StringBuilder functionBuilder) throws Exception {
-		String constructorName = contextClassName;
+		String constructorName = null;
 		String access = null;
 		List<Element> apiParamElements = null;
 
@@ -1044,7 +1070,7 @@
 			String[] parts = apiTypeValue.split("\\$");
 			String vectorItemType = parts[1];
 			vectorItemType = vectorItemType.replace(":", ".");
-			if (contextClassName != null && contextClassName.startsWith("Vector$") && vectorItemType.equals("T")) {
+			if (contextClassName != null && contextClassName.startsWith("__AS3__.vec.Vector$") && vectorItemType.equals("T")) {
 				return contextClassName;
 			}
 			return "Vector.<" + vectorItemType + ">";
@@ -1206,6 +1232,11 @@
 			}
 		}
 		if ("apiOperation".equals(elementName)) {
+			boolean isAIROnly = isAIROnly(element.element("prolog"));
+			if(isAIROnly && !configuration.getAir()) {
+				return;
+			}
+
 			String functionName = element.element("apiName").getTextTrim();
 
 			Element apiOperationDetailElement = element.element("apiOperationDetail");
@@ -1284,6 +1315,11 @@
 			}
 		}
 		if ("apiValue".equals(elementName)) {
+			boolean isAIROnly = isAIROnly(element.element("prolog"));
+			if(isAIROnly && !configuration.getAir()) {
+				return;
+			}
+
 			String variableName = element.element("apiName").getTextTrim();
 
 			Element apiValueDetailElement = element.element("apiValueDetail");
diff --git a/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PlayerglobalcConfiguration.java b/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PlayerglobalcConfiguration.java
index b08ea19..4df4cb9 100644
--- a/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PlayerglobalcConfiguration.java
+++ b/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PlayerglobalcConfiguration.java
@@ -68,4 +68,19 @@
 		assertThatAllPathsAreDirectories(Arrays.asList(filename), cfgval);
         this.asdocRoot = new File(FilenameNormalization.normalize(filename));
     }
+
+    private boolean air = false;
+
+    public boolean getAir()
+    {
+        return air;
+    }
+
+    @Config
+    @Mapping("air")
+    public void setAir(ConfigurationValue cv, boolean value)
+            throws ConfigurationException
+    {
+        air = value;
+    }
 }
