 		 */
 		static public function is(leftOperand:Object, rightOperand:Object):Boolean
 		{
-			var checkInterfaces:Function, superClass:Object;
-
-			if (leftOperand == null)
+			var superClass:Object;
+
+			if (leftOperand == null || rightOperand == null)
 				return false;
 
-			if (leftOperand != null && rightOperand == null)
-			{
-				return false;
-			}
-
-			checkInterfaces = function(left:Object):Boolean {
-				var i:int, interfaces:Array;
-
-				interfaces = left.FLEXJS_CLASS_INFO.interfaces;
-				for (i = interfaces.length - 1; i > -1; i--) {
-					if (interfaces[i] === rightOperand) {
-						return true;
-					}
-
-					if (interfaces[i].prototype.FLEXJS_CLASS_INFO.interfaces) {
-						var isit:Boolean = checkInterfaces(new interfaces[i]());
-						if (isit) return true;
-					}
-				}
-
-				return false;
-			};
-
-			if ((rightOperand === String && typeof(leftOperand) === 'string') ||
-				(leftOperand instanceof (rightOperand)))
-			{
-				return true;
-			}
-
+            if (leftOperand instanceof rightOperand)
+                return true;
+            if (rightOperand === Object)
+                return true; // every value is an Object in ActionScript except null and undefined (caught above)
+            
 			if (typeof leftOperand === 'string')
-				return false; // right was not String otherwise exit above
+				return rightOperand === String;
 
 			if (typeof leftOperand === 'number')
 				return rightOperand === Number;
 
-			if (rightOperand === Array && Array.isArray(leftOperand))
-				return true;
+            if (typeof leftOperand === 'boolean')
+                return rightOperand === Boolean;
+            if (rightOperand === Array)
+                return Array.isArray(leftOperand);
 
 			if (leftOperand.FLEXJS_CLASS_INFO === undefined)
 				return false; // could be a function but not an instance
 
 			if (leftOperand.FLEXJS_CLASS_INFO.interfaces)
 			{
-				if (checkInterfaces(leftOperand))
+				if (checkInterfaces(leftOperand, rightOperand))
 				{
 					return true;
 				}

		}

		/**
		 * predecrement handles ++foo
		 *
		 * @param obj The object with the getter/setter.
		 * @param prop The name of a property.

				{
					if (superClass.FLEXJS_CLASS_INFO.interfaces)
					{
						if (checkInterfaces(superClass, rightOperand))
						{
							return true;
						}
