diff --git a/libweave/examples/ubuntu/event_http_server.cc b/libweave/examples/ubuntu/event_http_server.cc
index f2c136c..14a5723 100644
--- a/libweave/examples/ubuntu/event_http_server.cc
+++ b/libweave/examples/ubuntu/event_http_server.cc
@@ -63,11 +63,6 @@
       : task_runner_{task_runner} {
     req_.reset(req);
     uri_ = evhttp_request_get_evhttp_uri(req_.get());
-
-    std::vector<uint8_t> data(evbuffer_get_length(req_->input_buffer));
-    evbuffer_remove(req_->input_buffer, data.data(), data.size());
-
-    data_.reset(new MemoryReadStream{data, task_runner_});
   }
 
   ~RequestImpl() {}
@@ -82,7 +77,12 @@
       return {};
     return header;
   }
-  InputStream* GetDataStream() { return data_.get(); }
+  std::string GetData() {
+    std::string data;
+    data.resize(evbuffer_get_length(req_->input_buffer));
+    evbuffer_remove(req_->input_buffer, &data[0], data.size());
+    return data;
+  }
 
   void SendReply(int status_code,
                  const std::string& data,
diff --git a/libweave/include/weave/provider/http_server.h b/libweave/include/weave/provider/http_server.h
index ce0b684..44ff34e 100644
--- a/libweave/include/weave/provider/http_server.h
+++ b/libweave/include/weave/provider/http_server.h
@@ -22,7 +22,7 @@
 
     virtual std::string GetPath() const = 0;
     virtual std::string GetFirstHeader(const std::string& name) const = 0;
-    virtual InputStream* GetDataStream() = 0;
+    virtual std::string GetData() = 0;
 
     virtual void SendReply(int status_code,
                            const std::string& data,
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 31af8ae..b2a9882 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -124,30 +124,9 @@
       SplitAtFirst(request->GetFirstHeader(http::kContentType), ";", true)
           .first;
 
-  if (content_type != http::kJson)
-    return PrivetRequestHandlerWithData(request, {});
-
-  std::unique_ptr<MemoryStream> mem_stream{new MemoryStream{{}, task_runner_}};
-  auto copier = std::make_shared<StreamCopier>(request->GetDataStream(),
-                                               mem_stream.get());
-  auto on_success = [request, copier](const base::WeakPtr<Manager>& weak_ptr,
-                                      std::unique_ptr<MemoryStream> mem_stream,
-                                      size_t size) {
-    if (weak_ptr) {
-      std::string data{mem_stream->GetData().begin(),
-                       mem_stream->GetData().end()};
-      weak_ptr->PrivetRequestHandlerWithData(request, data);
-    }
-  };
-  auto on_error = [request](const base::WeakPtr<Manager>& weak_ptr,
-                            const Error* error) {
-    if (weak_ptr)
-      weak_ptr->PrivetRequestHandlerWithData(request, {});
-  };
-
-  copier->Copy(base::Bind(on_success, weak_ptr_factory_.GetWeakPtr(),
-                          base::Passed(&mem_stream)),
-               base::Bind(on_error, weak_ptr_factory_.GetWeakPtr()));
+  return PrivetRequestHandlerWithData(request, content_type == http::kJson
+                                                   ? request->GetData()
+                                                   : std::string{});
 }
 
 void Manager::PrivetRequestHandlerWithData(
