diff --git a/include/vkcv/BufferManager.hpp b/include/vkcv/BufferManager.hpp
index eb8cb178d1b844fff57892c7312ed71d325900cc..abda720f98f649d64b17a15848ae99320e11ae3e 100644
--- a/include/vkcv/BufferManager.hpp
+++ b/include/vkcv/BufferManager.hpp
@@ -6,6 +6,7 @@
 namespace vkcv
 {
 	enum class BufferType {
+		INDEX,
 		VERTEX,
 		UNIFORM,
 		STORAGE,
@@ -61,6 +62,26 @@ namespace vkcv
 		 */
 		uint64_t createBuffer(BufferType type, size_t size, BufferMemoryType memoryType);
 		
+		/**
+		 * Returns the Vulkan buffer handle of a buffer
+		 * represented by a given buffer handle id.
+		 *
+		 * @param id Buffer handle id
+		 * @return Vulkan buffer handle
+		 */
+		[[nodiscard]]
+		vk::Buffer getBuffer(uint64_t id) const;
+		
+		/**
+		 * Returns the Vulkan device memory handle of a buffer
+		 * represented by a given buffer handle id.
+		 *
+		 * @param id Buffer handle id
+		 * @return Vulkan device memory handle
+		 */
+		[[nodiscard]]
+		vk::DeviceMemory getDeviceMemory(uint64_t id) const;
+		
 		/**
 		 * Fills a buffer represented by a given buffer
 		 * handle id with custom data.
diff --git a/src/vkcv/BufferManager.cpp b/src/vkcv/BufferManager.cpp
index cb2425a51ee177d062120b0eb61ae089f6f1692f..cb7c7356aef589ee8aef03b904d48021bdb75057 100644
--- a/src/vkcv/BufferManager.cpp
+++ b/src/vkcv/BufferManager.cpp
@@ -178,6 +178,26 @@ namespace vkcv {
 		);
 	}
 	
+	vk::Buffer BufferManager::getBuffer(uint64_t id) const {
+		if (id >= m_buffers.size()) {
+			return nullptr;
+		}
+		
+		auto& buffer = m_buffers[id];
+		
+		return buffer.m_handle;
+	}
+	
+	vk::DeviceMemory BufferManager::getDeviceMemory(uint64_t id) const {
+		if (id >= m_buffers.size()) {
+			return nullptr;
+		}
+		
+		auto& buffer = m_buffers[id];
+		
+		return buffer.m_memory;
+	}
+	
 	void BufferManager::fillBuffer(uint64_t id, void *data, size_t size, size_t offset) {
 		if (size == 0) {
 			size = SIZE_MAX;