diff --git a/include/Makefile.in b/include/Makefile.in
index c1efee700fa..6c16e01a271 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -746,6 +746,7 @@ SOURCES = \
 	wincrypt.h \
 	windef.h \
 	windns.h \
+	windows.foundation.collections.idl \
 	windows.foundation.idl \
 	windows.h \
 	windows.media.speechsynthesis.idl \
diff --git a/include/windows.foundation.collections.idl b/include/windows.foundation.collections.idl
new file mode 100644
index 00000000000..9f7a59ab907
--- /dev/null
+++ b/include/windows.foundation.collections.idl
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2021 Rémi Bernon for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifdef __WIDL__
+#pragma winrt ns_prefix
+#endif
+
+import "inspectable.idl";
+/* import "asyncinfo.idl"; */
+import "windowscontracts.idl";
+/* import "eventtoken.idl"; */
+
+namespace Windows {
+    namespace Foundation {
+#ifdef __WIDL__
+        [
+            contract(Windows.Foundation.FoundationContract, 1.0),
+            uuid(9de1c535-6ae1-11e0-84e1-18a905bcc53f)
+        ]
+        delegate HRESULT EventHandler<T>([in] IInspectable *sender, [in] T args);
+
+        namespace Collections
+        {
+            [
+                contract(Windows.Foundation.FoundationContract, 1.0),
+                uuid(6a79e863-4300-459a-9966-cbb660963ee1)
+            ]
+            interface IIterator<T> : IInspectable
+            {
+                [propget] HRESULT Current([out, retval] T *value);
+                [propget] HRESULT HasCurrent([out, retval] BOOL *value);
+                HRESULT MoveNext([out, retval] BOOL *value);
+                HRESULT GetMany([in] UINT32 count, [out] T *items, [out, retval] UINT32 *value);
+            }
+
+            [
+                contract(Windows.Foundation.FoundationContract, 1.0),
+                uuid(faa585ea-6214-4217-afda-7f46de5869b3)
+            ]
+            interface IIterable<T> : IInspectable
+            {
+                HRESULT First([out, retval] Windows.Foundation.Collections.IIterator<T> **value);
+            }
+
+            [
+                contract(Windows.Foundation.FoundationContract, 1.0),
+                uuid(bbe1fa4c-b0e3-4583-baef-1f1b2e483e56)
+            ]
+            interface IVectorView<T> : IInspectable
+            {
+                HRESULT GetAt([in] ULONG index, [out, retval] T *value);
+                [propget] HRESULT Size([out, retval] ULONG *value);
+                HRESULT IndexOf([in, optional] T element, [out] ULONG *index, [out, retval] BOOLEAN *value);
+                HRESULT GetMany([in] ULONG start_index, [out] T *items, [out, retval] ULONG *value);
+            }
+        }
+#endif
+    }
+}
diff --git a/include/windows.foundation.idl b/include/windows.foundation.idl
index bb0fafcab77..3c60278cf05 100644
--- a/include/windows.foundation.idl
+++ b/include/windows.foundation.idl
@@ -25,6 +25,7 @@ import "inspectable.idl";
 import "windowscontracts.idl";
 /* import "eventtoken.idl"; */
 /* import "ivectorchangedeventargs.idl"; */
+import "windows.foundation.collections.idl";
 
 namespace Windows {
     namespace Foundation {
@@ -111,49 +112,5 @@ namespace Windows {
         {
             HRESULT ToString([out, retval] HSTRING *value);
         }
-
-#ifdef __WIDL__
-        [
-            contract(Windows.Foundation.FoundationContract, 1.0),
-            uuid(9de1c535-6ae1-11e0-84e1-18a905bcc53f)
-        ]
-        delegate HRESULT EventHandler<T>([in] IInspectable *sender, [in] T args);
-
-        namespace Collections
-        {
-            [
-                contract(Windows.Foundation.FoundationContract, 1.0),
-                uuid(6a79e863-4300-459a-9966-cbb660963ee1)
-            ]
-            interface IIterator<T> : IInspectable
-            {
-                [propget] HRESULT Current([out, retval] T *value);
-                [propget] HRESULT HasCurrent([out, retval] BOOL *value);
-                HRESULT MoveNext([out, retval] BOOL *value);
-                HRESULT GetMany([in] UINT32 count, [out] T *items, [out, retval] UINT32 *value);
-            }
-
-            [
-                contract(Windows.Foundation.FoundationContract, 1.0),
-                uuid(faa585ea-6214-4217-afda-7f46de5869b3)
-            ]
-            interface IIterable<T> : IInspectable
-            {
-                HRESULT First([out, retval] Windows.Foundation.Collections.IIterator<T> **value);
-            }
-
-            [
-                contract(Windows.Foundation.FoundationContract, 1.0),
-                uuid(bbe1fa4c-b0e3-4583-baef-1f1b2e483e56)
-            ]
-            interface IVectorView<T> : IInspectable
-            {
-                HRESULT GetAt([in] ULONG index, [out, retval] T *value);
-                [propget] HRESULT Size([out, retval] ULONG *value);
-                HRESULT IndexOf([in, optional] T element, [out] ULONG *index, [out, retval] BOOLEAN *value);
-                HRESULT GetMany([in] ULONG start_index, [out] T *items, [out, retval] ULONG *value);
-            }
-        }
-#endif
     }
 }

