--- a/main/branches/4.1/trunk/extensions/platform/windows/ole/orexxole.c
+++ b/main/branches/4.1/trunk/extensions/platform/windows/ole/orexxole.c
@@ -1296,20 +1296,29 @@
         hr = pDispatchEx->GetMemberProperties(id, which, &props);
         if ( FAILED(hr) )
         {
-            // This should not be possible.
-            goto done_out;
-        }
-
-        if ( props & fdexPropCanGet )       flags |= DISPATCH_PROPERTYGET;
-        if ( props & fdexPropCanPut )       flags |= DISPATCH_PROPERTYPUT;
-        if ( props & fdexPropCanPutRef )    flags |= DISPATCH_PROPERTYPUTREF;
-        if ( props & fdexPropCanCall )      flags |= DISPATCH_METHOD;
-        if ( props & fdexPropCannotGet )    flags &= ~DISPATCH_PROPERTYGET;
-        if ( props & fdexPropCannotPut )    flags &= ~DISPATCH_PROPERTYPUT;
-        if ( props & fdexPropCannotPutRef ) flags &= ~DISPATCH_PROPERTYPUTREF;
-        if ( props & fdexPropCannotCall )   flags &= ~DISPATCH_METHOD;
-
-        // If flags are 0, something is wrong ... but we just ignore this for now.
+            // This should not be possible, unless it is IE, which advertises
+            // things it doesn't support.
+            if ( hr != E_NOTIMPL )
+            {
+                goto done_out;
+            }
+        }
+
+        if ( props != 0 )
+        {
+            if ( props & fdexPropCanGet )       flags |= DISPATCH_PROPERTYGET;
+            if ( props & fdexPropCanPut )       flags |= DISPATCH_PROPERTYPUT;
+            if ( props & fdexPropCanPutRef )    flags |= DISPATCH_PROPERTYPUTREF;
+            if ( props & fdexPropCanCall )      flags |= DISPATCH_METHOD;
+            if ( props & fdexPropCannotGet )    flags &= ~DISPATCH_PROPERTYGET;
+            if ( props & fdexPropCannotPut )    flags &= ~DISPATCH_PROPERTYPUT;
+            if ( props & fdexPropCannotPutRef ) flags &= ~DISPATCH_PROPERTYPUTREF;
+            if ( props & fdexPropCannotCall )   flags &= ~DISPATCH_METHOD;
+        }
+
+        // If flags are 0, something is wrong ... but with IE at least,
+        // GetMemberProperties() *never* works.  In this case we try to fall
+        // back to using the type info.
         if ( flags == 0 && pTypeInfo )
         {
             POLEFUNCINFO tempFuncInfo = NULL;