diff --git a/examples/texturesparseresidency/texturesparseresidency.cpp b/examples/texturesparseresidency/texturesparseresidency.cpp
index 39206df8e737f9c884e20946a950bb88c231736c..c652461ec4671709e323304bc9af8bd5c68f3a20 100644
--- a/examples/texturesparseresidency/texturesparseresidency.cpp
+++ b/examples/texturesparseresidency/texturesparseresidency.cpp
@@ -137,6 +137,10 @@ void VirtualTexture::destroy()
 	{
 		vkFreeMemory(device, bind.memory, nullptr);
 	}
+	// Clean up mip tail
+	if (mipTailimageMemoryBind.memory != VK_NULL_HANDLE) {
+		vkFreeMemory(device, mipTailimageMemoryBind.memory, nullptr);
+	}
 }
 
 /*
@@ -791,18 +795,21 @@ void VulkanExample::fillRandomPages()
 
 void VulkanExample::fillMipTail()
 {
+	// Clean up previous mip tail memory allocation
+	if (texture.mipTailimageMemoryBind.memory != VK_NULL_HANDLE) {
+		vkFreeMemory(device, texture.mipTailimageMemoryBind.memory, nullptr);
+	}
+
 	//@todo: WIP
 	VkDeviceSize imageMipTailSize = texture.sparseImageMemoryRequirements.imageMipTailSize;
 	VkDeviceSize imageMipTailOffset = texture.sparseImageMemoryRequirements.imageMipTailOffset;
 	// Stride between memory bindings for each mip level if not single mip tail (VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT not set)
 	VkDeviceSize imageMipTailStride = texture.sparseImageMemoryRequirements.imageMipTailStride;
 
-	VkSparseImageMemoryBind mipTailimageMemoryBind{};
-
 	VkMemoryAllocateInfo allocInfo = vks::initializers::memoryAllocateInfo();
 	allocInfo.allocationSize = imageMipTailSize;
 	allocInfo.memoryTypeIndex = texture.memoryTypeIndex;
-	VK_CHECK_RESULT(vkAllocateMemory(device, &allocInfo, nullptr, &mipTailimageMemoryBind.memory));
+	VK_CHECK_RESULT(vkAllocateMemory(device, &allocInfo, nullptr, &texture.mipTailimageMemoryBind.memory));
 
 	uint32_t mipLevel = texture.sparseImageMemoryRequirements.imageMipTailFirstLod;
 	uint32_t width = std::max(texture.width >> texture.sparseImageMemoryRequirements.imageMipTailFirstLod, 1u);
diff --git a/examples/texturesparseresidency/texturesparseresidency.h b/examples/texturesparseresidency/texturesparseresidency.h
index 3b9101b328552b754027fde585b6fb988f6d1ad7..386edfd8d1ab32dbdc112a05ef156970005c1c57 100644
--- a/examples/texturesparseresidency/texturesparseresidency.h
+++ b/examples/texturesparseresidency/texturesparseresidency.h
@@ -42,13 +42,15 @@ struct VirtualTexture
 	VkBindSparseInfo bindSparseInfo;									// Sparse queue binding information
 	std::vector<VirtualTexturePage> pages;								// Contains all virtual pages of the texture
 	std::vector<VkSparseImageMemoryBind> sparseImageMemoryBinds;		// Sparse image memory bindings of all memory-backed virtual tables
-	std::vector<VkSparseMemoryBind>	opaqueMemoryBinds;					// Sparse ópaque memory bindings for the mip tail (if present)
+	std::vector<VkSparseMemoryBind>	opaqueMemoryBinds;					// Sparse opaque memory bindings for the mip tail (if present)
 	VkSparseImageMemoryBindInfo imageMemoryBindInfo;					// Sparse image memory bind info
 	VkSparseImageOpaqueMemoryBindInfo opaqueMemoryBindInfo;				// Sparse image opaque memory bind info (mip tail)
 	uint32_t mipTailStart;												// First mip level in mip tail
 	VkSparseImageMemoryRequirements sparseImageMemoryRequirements;		// @todo: Comment
 	uint32_t memoryTypeIndex;											// @todo: Comment
 
+	VkSparseImageMemoryBind mipTailimageMemoryBind{};
+
 	// @todo: comment
 	struct MipTailInfo {
 		bool singleMipTail;