diff --git a/src/D3D12MemAlloc.cpp b/src/D3D12MemAlloc.cpp
index 2a0ccc4..9fc000a 100644
--- a/src/D3D12MemAlloc.cpp
+++ b/src/D3D12MemAlloc.cpp
@@ -4985,7 +4985,9 @@
 
     ID3D12Resource* res = NULL;
     HRESULT hr = m_Device->CreateCommittedResource(
-        &committedAllocParams.m_HeapProperties, committedAllocParams.m_HeapFlags, pResourceDesc, InitialResourceState,
+        &committedAllocParams.m_HeapProperties,
+        committedAllocParams.m_HeapFlags & ~RESOURCE_CLASS_HEAP_FLAGS, // D3D12 ERROR: ID3D12Device::CreateCommittedResource: When creating a committed resource, D3D12_HEAP_FLAGS must not have either D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES, D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES, nor D3D12_HEAP_FLAG_DENY_BUFFERS set. These flags will be set automatically to correspond with the committed resource type. [ STATE_CREATION ERROR #640: CREATERESOURCEANDHEAP_INVALIDHEAPMISCFLAGS]
+        pResourceDesc, InitialResourceState,
         pOptimizedClearValue, IID_PPV_ARGS(&res));
     if(SUCCEEDED(hr))
     {
@@ -5039,7 +5041,9 @@
 
     ID3D12Resource* res = NULL;
     HRESULT hr = m_Device4->CreateCommittedResource1(
-        &committedAllocParams.m_HeapProperties, committedAllocParams.m_HeapFlags, pResourceDesc, InitialResourceState,
+        &committedAllocParams.m_HeapProperties,
+        committedAllocParams.m_HeapFlags & ~RESOURCE_CLASS_HEAP_FLAGS, // D3D12 ERROR: ID3D12Device::CreateCommittedResource: When creating a committed resource, D3D12_HEAP_FLAGS must not have either D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES, D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES, nor D3D12_HEAP_FLAG_DENY_BUFFERS set. These flags will be set automatically to correspond with the committed resource type. [ STATE_CREATION ERROR #640: CREATERESOURCEANDHEAP_INVALIDHEAPMISCFLAGS]
+        pResourceDesc, InitialResourceState,
         pOptimizedClearValue, pProtectedSession, IID_PPV_ARGS(&res));
     if(SUCCEEDED(hr))
     {
@@ -5094,7 +5098,9 @@
 
     ID3D12Resource* res = NULL;
     HRESULT hr = m_Device8->CreateCommittedResource2(
-        &committedAllocParams.m_HeapProperties, committedAllocParams.m_HeapFlags, pResourceDesc, InitialResourceState,
+        &committedAllocParams.m_HeapProperties,
+        committedAllocParams.m_HeapFlags & ~RESOURCE_CLASS_HEAP_FLAGS, // D3D12 ERROR: ID3D12Device::CreateCommittedResource: When creating a committed resource, D3D12_HEAP_FLAGS must not have either D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES, D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES, nor D3D12_HEAP_FLAG_DENY_BUFFERS set. These flags will be set automatically to correspond with the committed resource type. [ STATE_CREATION ERROR #640: CREATERESOURCEANDHEAP_INVALIDHEAPMISCFLAGS]
+        pResourceDesc, InitialResourceState,
         pOptimizedClearValue, pProtectedSession, IID_PPV_ARGS(&res));
     if(SUCCEEDED(hr))
     {
@@ -5222,7 +5228,7 @@
 
         outCommittedAllocationParams.m_HeapProperties = pool->GetDesc().HeapProperties;
         outCommittedAllocationParams.m_HeapFlags = pool->GetDesc().HeapFlags;
-        //outCommittedAllocationParams.m_List = pool->GetCommittedAllocationList(); // TODO
+        outCommittedAllocationParams.m_List = pool->GetCommittedAllocationList();
     }
     else
     {
diff --git a/src/Tests.cpp b/src/Tests.cpp
index 3c3bed1..fbca62a 100644
--- a/src/Tests.cpp
+++ b/src/Tests.cpp
@@ -602,6 +602,7 @@
     CHECK_BOOL( poolStats.UnusedBytes == poolStats.BlockCount * poolDesc.BlockSize );
 
     // # SetName and GetName
+
     static const wchar_t* NAME = L"Custom pool name 1";
     pool->SetName(NAME);
     CHECK_BOOL( wcscmp(pool->GetName(), NAME) == 0 );
@@ -646,6 +647,7 @@
     CHECK_BOOL( globalStatsCurr.Total.UsedBytes == globalStatsBeg.Total.UsedBytes + poolStats.UsedBytes );
 
     // # NEVER_ALLOCATE and COMMITTED should fail
+    // (Committed allocations not allowed in this pool because BlockSize != 0.)
 
     for(uint32_t i = 0; i < 2; ++i)
     {
@@ -790,6 +792,62 @@
     CHECK_HR(hr);
 }
 
+static void TestStandardCustomCommittedPlaced(const TestContext& ctx)
+{
+    wprintf(L"Test standard, custom, committed, placed\n");
+
+    static const D3D12_HEAP_TYPE heapType = D3D12_HEAP_TYPE_DEFAULT;
+    static const UINT64 bufferSize = 1024;
+
+    D3D12MA::POOL_DESC poolDesc = {};
+    poolDesc.HeapProperties.Type = heapType;
+    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;
+
+    D3D12MA::Pool* poolPtr;
+    CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &poolPtr));
+    PoolUniquePtr pool{poolPtr};
+
+    std::vector<AllocationUniquePtr> allocations;
+    
+    D3D12_RESOURCE_DESC resDesc = {};
+    FillResourceDescForBuffer(resDesc, bufferSize);
+
+    for(uint32_t standardCustomI = 0; standardCustomI < 2; ++standardCustomI)
+    {
+        const bool useCustomPool = standardCustomI > 0;
+        for(uint32_t flagsI = 0; flagsI < 3; ++flagsI)
+        {
+            const bool useCommitted = flagsI > 0;
+            const bool neverAllocate = flagsI > 1;
+
+            D3D12MA::ALLOCATION_DESC allocDesc = {};
+            if(useCustomPool)
+            {
+                allocDesc.CustomPool = pool.get();
+                allocDesc.HeapType = (D3D12_HEAP_TYPE)0xCDCDCDCD; // Should be ignored.
+                allocDesc.ExtraHeapFlags = (D3D12_HEAP_FLAGS)0xCDCDCDCD; // Should be ignored.
+            }
+            else
+                allocDesc.HeapType = heapType;
+            if(useCommitted)
+                allocDesc.Flags |= D3D12MA::ALLOCATION_FLAG_COMMITTED;
+            if(neverAllocate)
+                allocDesc.Flags |= D3D12MA::ALLOCATION_FLAG_NEVER_ALLOCATE;
+
+            D3D12MA::Allocation* allocPtr = NULL;
+            HRESULT hr = ctx.allocator->CreateResource(&allocDesc, &resDesc,
+                D3D12_RESOURCE_STATE_COMMON,
+                NULL, // pOptimizedClearValue
+                &allocPtr, IID_NULL, NULL);
+            if(allocPtr)
+                allocations.push_back(AllocationUniquePtr{allocPtr});
+
+            bool expectSuccess = !neverAllocate; // NEVER_ALLOCATE should always fail with COMMITTED.
+            CHECK_BOOL(expectSuccess == SUCCEEDED(hr));
+        }
+    }
+}
+
 static void TestAliasingMemory(const TestContext& ctx)
 {
     wprintf(L"Test aliasing memory\n");
@@ -1490,6 +1548,7 @@
     TestOtherComInterface(ctx);
     TestCustomPools(ctx);
     TestCustomHeaps(ctx);
+    TestStandardCustomCommittedPlaced(ctx);
     TestAliasingMemory(ctx);
     TestMapping(ctx);
     TestStats(ctx);
