diff --git a/p2p-rm/include/ftl/p2p-rm.hpp b/p2p-rm/include/ftl/p2p-rm.hpp
index 491309f13844e4520f90995ade5cbf999d3930b7..5e0e2ff85126ab2feb27ce10a4b9666e5de6957f 100644
--- a/p2p-rm/include/ftl/p2p-rm.hpp
+++ b/p2p-rm/include/ftl/p2p-rm.hpp
@@ -7,6 +7,8 @@ namespace ftl {
 namespace rm {
 
 	void reset();
+	void destroy() { reset(); }
+
 	ftl::rm::Blob *_lookupBlob(const char *uri);
 	ftl::rm::Blob *_createBlob(const char *uri, size_t size);
 	
diff --git a/p2p-rm/include/ftl/p2p-rm/blob.hpp b/p2p-rm/include/ftl/p2p-rm/blob.hpp
index 4fe012f59820309e23fb581fdbceed5d36855155..3b72fb1721dee6465206e9f57f47c4245c20f4e0 100644
--- a/p2p-rm/include/ftl/p2p-rm/blob.hpp
+++ b/p2p-rm/include/ftl/p2p-rm/blob.hpp
@@ -8,8 +8,19 @@
 namespace ftl {
 namespace rm {
 
+struct Header {
+	char magic[4];
+	uint32_t version;
+	size_t size;
+	uint32_t format;
+	uint32_t blobid;
+};
+
 /* NOT TO BE USED DIRECTLY */
 struct Blob {
+	Blob();
+	~Blob();
+
 	ftl::net::raw::Socket *socket_;
 	char *data_;
 	size_t size_;
diff --git a/p2p-rm/src/p2prm.cpp b/p2p-rm/src/p2prm.cpp
index 86c2b8a50286b52caa3506981f65411d6650d998..59edc3a8a9e26f323f8978147fee67e2b2ad24e0 100644
--- a/p2p-rm/src/p2prm.cpp
+++ b/p2p-rm/src/p2prm.cpp
@@ -6,7 +6,9 @@
 static std::map<std::string, ftl::rm::Blob*> blobs;
 
 void ftl::rm::reset() {
-	// TODO Loop delete
+	for (auto x : blobs) {
+		delete x;
+	}
 	blobs.clear();
 }
 
@@ -28,8 +30,14 @@ ftl::rm::Blob *ftl::rm::_createBlob(const char *uri, size_t size) {
 	if (blobs[u.getBaseURI()] != NULL) return NULL;
 	
 	ftl::rm::Blob *b = new ftl::rm::Blob;
-	b->data_ = new char[size];
+
+	char *raw = new char[size+sizeof(ftl::rm::Header)];
+
+	b->raw_ = raw;
+	b->header_ = (ftl::rm::Header*)raw;
+	b->data_ = raw+sizeof(ftl::rm::Header);
 	b->size_ = size;
+	b->rawsize = size++sizeof(ftl::rm::Header);
 	b->socket_ = NULL;
 	blobs[u.getBaseURI()] = b;
 	return b;