diff --git a/components/net/cpp/include/ftl/net/dispatcher.hpp b/components/net/cpp/include/ftl/net/dispatcher.hpp
index 1666184c04c8b6d80d83e96df7011174843b0313..ea136483f7982756cf3c5fb9888afea9180f54a4 100644
--- a/components/net/cpp/include/ftl/net/dispatcher.hpp
+++ b/components/net/cpp/include/ftl/net/dispatcher.hpp
@@ -60,13 +60,16 @@ namespace net {
 
 class Dispatcher {
 	public:
-	explicit Dispatcher(Dispatcher *parent=nullptr) : parent_(parent) {}
-	
+	explicit Dispatcher(Dispatcher *parent=nullptr) : parent_(parent) {
+		// FIXME threading and funcs_; hack use large size
+		funcs_.reserve(1024);
+	}
+
 	//void dispatch(Peer &, const std::string &msg);
 	void dispatch(Peer &, const msgpack::object &msg);
 
 	// Without peer object =====================================================
-	
+
 	template <typename F>
 	void bind(std::string const &name, F func,
 		                  ftl::internal::tags::void_result const &,
@@ -221,11 +224,11 @@ class Dispatcher {
 			funcs_.erase(i);
 		}
 	}
-	
+
 	std::vector<std::string> getBindings() const;
 
 	bool isBound(const std::string &name) const;
-	
+
 	using adaptor_type = std::function<std::unique_ptr<msgpack::object_handle>(
         ftl::net::Peer &, msgpack::object const &)>;
 
@@ -234,16 +237,16 @@ class Dispatcher {
 
     //! \brief This is the type of notification messages.
     using notification_t = std::tuple<int8_t, std::string, msgpack::object>;
-    
+
     using response_t =
         std::tuple<uint32_t, uint32_t, std::string, msgpack::object>;
-	
+
 	private:
 	Dispatcher *parent_;
 	std::unordered_map<std::string, adaptor_type> funcs_;
-	
+
 	std::optional<adaptor_type> _locateHandler(const std::string &name) const;
-	
+
 	static void enforce_arg_count(std::string const &func, std::size_t found,
                                   std::size_t expected);