diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,11 @@
 
 ## WIP
 
+## [0.5.1] - 2021-07-24
+- Fix bug where `createInstanceFromRequirements` and
+  `createDebugInstanceFromRequirements` would fail for missing layers in
+  optional requirements.
+
 ## [0.5.0.2] - 2021-06-22
 - Relax bounds on `vulkan`
 
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: vulkan-utils
-version: "0.5.0.2"
+version: "0.5.1"
 synopsis: Utils for the vulkan package
 category: Graphics
 maintainer: Joe Hermaszewski <live.long.and.prosper@monoid.al>
diff --git a/src/Vulkan/Utils/Requirements.hs b/src/Vulkan/Utils/Requirements.hs
--- a/src/Vulkan/Utils/Requirements.hs
+++ b/src/Vulkan/Utils/Requirements.hs
@@ -27,7 +27,7 @@
 import           Data.Functor.Product           ( Product(..) )
 import qualified Data.HashMap.Strict           as Map
 import           Data.Kind                      ( Type )
-import           Data.List                      ( intercalate )
+import           Data.List                      ( intercalate, intersect )
 import           Data.List.Extra                ( nubOrd )
 import           Data.Proxy
 import           Data.Semigroup                 ( Endo(..) )
@@ -85,6 +85,7 @@
   foundVersion    <- enumerateInstanceVersion
   (_, layerProps) <- enumerateInstanceLayerProperties
   lookupExtension <- getLookupExtension
+    layerProps
     Nothing
     [ instanceExtensionLayerName
     | RequireInstanceExtension { instanceExtensionLayerName } <- allAsList
@@ -206,7 +207,9 @@
       --
       feats           <- getPhysicalDeviceFeaturesMaybe @fs phys
       props           <- getPhysicalDevicePropertiesMaybe @ps phys
+      (_, layerProps) <- enumerateDeviceLayerProperties phys
       lookupExtension <- getLookupExtension
+        layerProps
         (Just phys)
         [ deviceExtensionLayerName
         | RequireDeviceExtension { deviceExtensionLayerName } <- allAsList
@@ -486,29 +489,33 @@
 -- Helpers for 'Device' and 'Instance' extensions
 ----------------------------------------------------------------
 
--- | Make a lookup function for extensions in layers
+-- | Make a lookup function for extensions in layers. Ignores layers not
+-- present in the instance/device
 getLookupExtension
   :: MonadIO m
-  => Maybe PhysicalDevice
+  => Vector LayerProperties
+  -> Maybe PhysicalDevice
   -- ^ Pass 'Nothing' for 'Instance' extensions, pass a PhysicalDevice for
-  -- device extensions.
+  -- 'Device' extensions.
   -> ["layerName" ::: Maybe ByteString]
   -> m
        (  ("layerName" ::: Maybe ByteString)
        -> ByteString
        -> Maybe ExtensionProperties
        )
-getLookupExtension mbPhys extensionLayers = do
+getLookupExtension layerProps mbPhys extensionLayers = do
   let enumerate = maybe enumerateInstanceExtensionProperties
                         enumerateDeviceExtensionProperties
                         mbPhys
-  extensions <- for (nubOrd extensionLayers) $ \layer -> do
+      availableLayers = Nothing : ((Just . layerName) <$> V.toList layerProps)
+      searchedLayers = availableLayers `intersect` extensionLayers
+  extensions <- for searchedLayers $ \layer -> do
     (_, props) <- enumerate layer
     pure (layer, props)
   let extensionMap = Map.fromListWith (<>) extensions
-  pure $ \layer name ->
-    let es = Map.lookupDefault mempty layer extensionMap
-    in  find ((== name) . extensionName) es
+  pure $ \layer name -> do
+    es <- Map.lookup layer extensionMap
+    find ((== name) . extensionName) es
 
 ----------------------------------------------------------------
 -- Helpers for extracting the type of chain used by a set of requirements
diff --git a/vulkan-utils.cabal b/vulkan-utils.cabal
--- a/vulkan-utils.cabal
+++ b/vulkan-utils.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           vulkan-utils
-version:        0.5.0.2
+version:        0.5.1
 synopsis:       Utils for the vulkan package
 category:       Graphics
 homepage:       https://github.com/expipiplus1/vulkan#readme
