diff --git a/src/filters/base.hpp b/src/filters/base.hpp
index 09a7d1a3a473572006b50e86d07bd093c328b6c0..e5b519f7dde1f19347fdab46425ed89bee2cf3e2 100644
--- a/src/filters/base.hpp
+++ b/src/filters/base.hpp
@@ -30,7 +30,7 @@ namespace Filters {
 	};
 
 	struct ChainedFilters : public BaseFilter {
-		explicit ChainedFilters(const std::list<Filters::BaseFilter*>& chainedFilters)
+		explicit ChainedFilters(std::list<Filters::BaseFilter*>&& chainedFilters)
 			: chainedFilters(chainedFilters) {}
 
 		// Usually the encrypt/encode/obfs function.
@@ -49,7 +49,7 @@ namespace Filters {
 			return binaryDatagram;
 		}
 
-		const std::list<Filters::BaseFilter*>& chainedFilters;
+		std::list<Filters::BaseFilter*> chainedFilters;
 	};
 
 	struct ReversedFilter : public BaseFilter {
diff --git a/src/forwarder.hpp b/src/forwarder.hpp
index 584784bebe6a2b58b50460cd09fc40d73ff687d8..6791fca542c52c64cde6c51d83a1905f5bd9791e 100644
--- a/src/forwarder.hpp
+++ b/src/forwarder.hpp
@@ -55,7 +55,7 @@ public:
         std::list<Filters::BaseFilter*> chainedFilters;
         for (auto &&filterConfig : filterConfigs)
             chainedFilters.push_back(CreateFilterFromConfig(filterConfig));
-        ptrFilter = new Filters::ChainedFilters(chainedFilters);
+        ptrFilter = new Filters::ChainedFilters(std::move(chainedFilters));
     }
 
     ~Forwarder() {