diff --git a/aegisub/src/ass_export_filter.cpp b/aegisub/src/ass_export_filter.cpp
index 1d8a9e520eb39cce21a567bb66ceae0701dea8f5..11f09c44f04ba832d554edcfb936efa4351e5a79 100644
--- a/aegisub/src/ass_export_filter.cpp
+++ b/aegisub/src/ass_export_filter.cpp
@@ -50,7 +50,7 @@ AssExportFilter::AssExportFilter(std::string const& name, std::string const& des
 {
 }
 
-void AssExportFilterChain::Register(std::unique_ptr<AssExportFilter>&& filter) {
+void AssExportFilterChain::Register(std::unique_ptr<AssExportFilter> filter) {
 	int filter_copy = 1;
 	std::string name = filter->name;
 	// Find a unique name
diff --git a/aegisub/src/ass_export_filter.h b/aegisub/src/ass_export_filter.h
index 7aad99e1565436fbe2aa1e83eeeaa933b93c5b90..12daa3cf1afab56f2de452e8ec55200264d65831 100644
--- a/aegisub/src/ass_export_filter.h
+++ b/aegisub/src/ass_export_filter.h
@@ -87,7 +87,7 @@ typedef boost::intrusive::make_list<AssExportFilter, boost::intrusive::constant_
 class AssExportFilterChain {
 public:
 	/// Register an export filter
-	static void Register(std::unique_ptr<AssExportFilter>&& filter);
+	static void Register(std::unique_ptr<AssExportFilter> filter);
 	/// Unregister and delete all export filters
 	static void Clear();
 	/// Get a filter by name or nullptr if it doesn't exist
diff --git a/aegisub/src/ass_style_storage.cpp b/aegisub/src/ass_style_storage.cpp
index e4b5192bf4e765c83bea71a9194f8bddb3eadb9f..857bbca8d05d8d13d3696aac729f440f9fb46c3e 100644
--- a/aegisub/src/ass_style_storage.cpp
+++ b/aegisub/src/ass_style_storage.cpp
@@ -48,7 +48,7 @@
 
 AssStyleStorage::~AssStyleStorage() { }
 void AssStyleStorage::clear() { style.clear(); }
-void AssStyleStorage::push_back( std::unique_ptr<AssStyle>&& new_style ) { style.emplace_back(std::move(new_style)); }
+void AssStyleStorage::push_back(std::unique_ptr<AssStyle> new_style) { style.emplace_back(std::move(new_style)); }
 
 void AssStyleStorage::Save() const {
 	if (file.empty()) return;
diff --git a/aegisub/src/ass_style_storage.h b/aegisub/src/ass_style_storage.h
index 1d378825acefc10727b48c6de387298dc76c32ff..e1099c18393866083e93bf97a03ac199f6b177e2 100644
--- a/aegisub/src/ass_style_storage.h
+++ b/aegisub/src/ass_style_storage.h
@@ -54,7 +54,7 @@ public:
 	iterator end() { return style.end(); }
 	const_iterator begin() const { return style.begin(); }
 	const_iterator end() const { return style.end(); }
-	void push_back(std::unique_ptr<AssStyle>&& new_style);
+	void push_back(std::unique_ptr<AssStyle> new_style);
 	AssStyle *back() { return style.back().get(); }
 	AssStyle *operator[](size_t idx) const { return style[idx].get(); }
 	size_t size() const { return style.size(); }
diff --git a/aegisub/src/audio_provider_convert.cpp b/aegisub/src/audio_provider_convert.cpp
index df9912da8445d91ad7f6377f106aebd1dcaa7379..05e109c673913cd6384ead00419e89cdc50f11f9 100644
--- a/aegisub/src/audio_provider_convert.cpp
+++ b/aegisub/src/audio_provider_convert.cpp
@@ -36,7 +36,7 @@ class AudioProviderConverter : public AudioProvider {
 protected:
 	std::unique_ptr<AudioProvider> source;
 public:
-	AudioProviderConverter(std::unique_ptr<AudioProvider>&& src)
+	AudioProviderConverter(std::unique_ptr<AudioProvider> src)
 	: source(std::move(src))
 	{
 		channels = source->GetChannels();
@@ -54,7 +54,7 @@ template<class Target>
 class BitdepthConvertAudioProvider : public AudioProviderConverter {
 	int src_bytes_per_sample;
 public:
-	BitdepthConvertAudioProvider(std::unique_ptr<AudioProvider>&& src) : AudioProviderConverter(std::move(src)) {
+	BitdepthConvertAudioProvider(std::unique_ptr<AudioProvider> src) : AudioProviderConverter(std::move(src)) {
 		if (bytes_per_sample > 8)
 			throw agi::AudioProviderOpenError("Audio format converter: audio with bitdepths greater than 64 bits/sample is currently unsupported", 0);
 
@@ -94,7 +94,7 @@ public:
 template<class Source, class Target>
 class FloatConvertAudioProvider : public AudioProviderConverter {
 public:
-	FloatConvertAudioProvider(std::unique_ptr<AudioProvider>&& src) : AudioProviderConverter(std::move(src)) {
+	FloatConvertAudioProvider(std::unique_ptr<AudioProvider> src) : AudioProviderConverter(std::move(src)) {
 		bytes_per_sample = sizeof(Target);
 		float_samples = false;
 	}
@@ -126,7 +126,7 @@ public:
 class DownmixAudioProvider : public AudioProviderConverter {
 	int src_channels;
 public:
-	DownmixAudioProvider(std::unique_ptr<AudioProvider>&& src) : AudioProviderConverter(std::move(src)) {
+	DownmixAudioProvider(std::unique_ptr<AudioProvider> src) : AudioProviderConverter(std::move(src)) {
 		if (bytes_per_sample != 2)
 			throw agi::InternalError("DownmixAudioProvider requires 16-bit input", 0);
 		if (channels == 1)
@@ -156,7 +156,7 @@ public:
 /// Requires 16-bit mono input
 class SampleDoublingAudioProvider : public AudioProviderConverter {
 public:
-	SampleDoublingAudioProvider(std::unique_ptr<AudioProvider>&& src) : AudioProviderConverter(std::move(src)) {
+	SampleDoublingAudioProvider(std::unique_ptr<AudioProvider> src) : AudioProviderConverter(std::move(src)) {
 		if (source->GetBytesPerSample() != 2)
 			throw agi::InternalError("UpsampleAudioProvider requires 16-bit input", 0);
 		if (source->GetChannels() != 1)
@@ -192,7 +192,7 @@ public:
 	}
 };
 
-std::unique_ptr<AudioProvider> CreateConvertAudioProvider(std::unique_ptr<AudioProvider>&& provider) {
+std::unique_ptr<AudioProvider> CreateConvertAudioProvider(std::unique_ptr<AudioProvider> provider) {
 	// Ensure 16-bit audio with proper endianness
 	if (provider->AreSamplesFloat()) {
 		LOG_D("audio_provider") << "Converting float to S16";
@@ -218,5 +218,5 @@ std::unique_ptr<AudioProvider> CreateConvertAudioProvider(std::unique_ptr<AudioP
 		provider = agi::util::make_unique<SampleDoublingAudioProvider>(std::move(provider));
 	}
 
-	return std::move(provider);
+	return provider;
 }
diff --git a/aegisub/src/audio_provider_convert.h b/aegisub/src/audio_provider_convert.h
index e989bf01136fca81e7c987616d62239cd3ecfd96..a66dc6f5ace8466a5a7a3f156b8d68afee118fc4 100644
--- a/aegisub/src/audio_provider_convert.h
+++ b/aegisub/src/audio_provider_convert.h
@@ -24,4 +24,4 @@
 class AudioProvider;
 
 /// Get an audio provider which supplies audio in a format supported by Aegisub's players
-std::unique_ptr<AudioProvider> CreateConvertAudioProvider(std::unique_ptr<AudioProvider>&& source_provider);
+std::unique_ptr<AudioProvider> CreateConvertAudioProvider(std::unique_ptr<AudioProvider> source_provider);
diff --git a/aegisub/src/audio_provider_hd.cpp b/aegisub/src/audio_provider_hd.cpp
index 59face1d187eb718a103cc87fe59b7d7d58c1263..2b0b8967de98b585ba7dd6bb0b35dc86a86ab0c1 100644
--- a/aegisub/src/audio_provider_hd.cpp
+++ b/aegisub/src/audio_provider_hd.cpp
@@ -89,7 +89,7 @@ public:
 
 }
 
-HDAudioProvider::HDAudioProvider(std::unique_ptr<AudioProvider>&& src, agi::BackgroundRunner *br) {
+HDAudioProvider::HDAudioProvider(std::unique_ptr<AudioProvider> src, agi::BackgroundRunner *br) {
 	bytes_per_sample = src->GetBytesPerSample();
 	num_samples      = src->GetNumSamples();
 	channels         = src->GetChannels();
diff --git a/aegisub/src/audio_provider_hd.h b/aegisub/src/audio_provider_hd.h
index def927119f41d4abf2b12b07e2fdb71b461b3865..c59ed739bdb40ec7816688a0b0eb47322113fdbe 100644
--- a/aegisub/src/audio_provider_hd.h
+++ b/aegisub/src/audio_provider_hd.h
@@ -54,6 +54,6 @@ class HDAudioProvider : public AudioProvider {
 	void FillBuffer(void *buf, int64_t start, int64_t count) const;
 
 public:
-	HDAudioProvider(std::unique_ptr<AudioProvider>&& source, agi::BackgroundRunner *br);
+	HDAudioProvider(std::unique_ptr<AudioProvider> source, agi::BackgroundRunner *br);
 	~HDAudioProvider();
 };
diff --git a/aegisub/src/audio_provider_lock.cpp b/aegisub/src/audio_provider_lock.cpp
index 8b9a0065200b90f9123e8d5d72d5f303739b1c13..5ca6b8b939428dd229281f23b6eefb3dd1e55bf7 100644
--- a/aegisub/src/audio_provider_lock.cpp
+++ b/aegisub/src/audio_provider_lock.cpp
@@ -20,7 +20,7 @@
 
 #include "audio_provider_lock.h"
 
-LockAudioProvider::LockAudioProvider(std::unique_ptr<AudioProvider>&& src)
+LockAudioProvider::LockAudioProvider(std::unique_ptr<AudioProvider> src)
 : source(std::move(src))
 {
 	channels = source->GetChannels();
diff --git a/aegisub/src/audio_provider_lock.h b/aegisub/src/audio_provider_lock.h
index a591671e5e08886f2a1dc2f497728cc7ae874791..c6653b7754b7c12d71f2ad96824b77e7af9a195f 100644
--- a/aegisub/src/audio_provider_lock.h
+++ b/aegisub/src/audio_provider_lock.h
@@ -27,5 +27,5 @@ class LockAudioProvider : public AudioProvider {
 
 	void FillBuffer(void *buf, int64_t start, int64_t count) const;
 public:
-	LockAudioProvider(std::unique_ptr<AudioProvider>&& source);
+	LockAudioProvider(std::unique_ptr<AudioProvider> source);
 };
diff --git a/aegisub/src/audio_provider_ram.cpp b/aegisub/src/audio_provider_ram.cpp
index 888b20096ad6683ecf9bdfb4f33261ec048987de..9fd8dcffbdaeb1e6437ee8604a1d2a5fa1190585 100644
--- a/aegisub/src/audio_provider_ram.cpp
+++ b/aegisub/src/audio_provider_ram.cpp
@@ -46,7 +46,7 @@
 #define CacheBits 22
 #define CacheBlockSize (1 << CacheBits)
 
-RAMAudioProvider::RAMAudioProvider(std::unique_ptr<AudioProvider>&& src, agi::BackgroundRunner *br) {
+RAMAudioProvider::RAMAudioProvider(std::unique_ptr<AudioProvider> src, agi::BackgroundRunner *br) {
 	try {
 		blockcache.resize((src->GetNumSamples() * src->GetBytesPerSample() + CacheBlockSize - 1) >> CacheBits);
 	}
diff --git a/aegisub/src/audio_provider_ram.h b/aegisub/src/audio_provider_ram.h
index ad0e232f947e87a166696dd5007c0b7d5ac54628..e307ce7e889364068c23b9e25197a1f32877e5e2 100644
--- a/aegisub/src/audio_provider_ram.h
+++ b/aegisub/src/audio_provider_ram.h
@@ -53,5 +53,5 @@ class RAMAudioProvider : public AudioProvider {
 	void FillBuffer(void *buf, int64_t start, int64_t count) const;
 
 public:
-	RAMAudioProvider(std::unique_ptr<AudioProvider>&& source, agi::BackgroundRunner *br);
+	RAMAudioProvider(std::unique_ptr<AudioProvider> source, agi::BackgroundRunner *br);
 };
diff --git a/aegisub/src/auto4_base.cpp b/aegisub/src/auto4_base.cpp
index d9a672ad2956c2c139fd4c216cc1bb78c22a545d..1af73472d341d157c3225e27b27637de3e470601 100644
--- a/aegisub/src/auto4_base.cpp
+++ b/aegisub/src/auto4_base.cpp
@@ -291,7 +291,7 @@ namespace Automation4 {
 	{
 	}
 
-	void ScriptManager::Add(std::unique_ptr<Script>&& script)
+	void ScriptManager::Add(std::unique_ptr<Script> script)
 	{
 		if (find(scripts.begin(), scripts.end(), script) == scripts.end())
 			scripts.emplace_back(std::move(script));
@@ -460,7 +460,7 @@ namespace Automation4 {
 	{
 	}
 
-	void ScriptFactory::Register(std::unique_ptr<ScriptFactory>&& factory)
+	void ScriptFactory::Register(std::unique_ptr<ScriptFactory> factory)
 	{
 		if (find(Factories().begin(), Factories().end(), factory) != Factories().end())
 			throw agi::InternalError("Automation 4: Attempt to register the same script factory multiple times. This should never happen.", 0);
diff --git a/aegisub/src/auto4_base.h b/aegisub/src/auto4_base.h
index e1389212b250900009daeb846877fe697060944c..731c6a7015d99437d64f40e7956da077d7080a59 100644
--- a/aegisub/src/auto4_base.h
+++ b/aegisub/src/auto4_base.h
@@ -197,7 +197,7 @@ namespace Automation4 {
 		/// Deletes all scripts managed
 		virtual ~ScriptManager();
 		/// Add a script to the manager.
-		void Add(std::unique_ptr<Script>&& script);
+		void Add(std::unique_ptr<Script> script);
 		/// Remove a script from the manager, and delete the Script object.
 		void Remove(Script *script);
 		/// Deletes all scripts managed
@@ -265,7 +265,7 @@ namespace Automation4 {
 		const std::string& GetFilenamePattern() const { return filename_pattern; }
 
 		/// Register an automation engine.
-		static void Register(std::unique_ptr<ScriptFactory>&& factory);
+		static void Register(std::unique_ptr<ScriptFactory> factory);
 
 		/// Get the full wildcard string for all loaded engines
 		static std::string GetWildcardStr();
diff --git a/aegisub/src/command/command.cpp b/aegisub/src/command/command.cpp
index 01810eb7506ade2ef0417945cbbc00e91d53651d..ea575f5d94d61feec007f9e7820394083e829d0d 100644
--- a/aegisub/src/command/command.cpp
+++ b/aegisub/src/command/command.cpp
@@ -36,7 +36,7 @@ namespace cmd {
 		return it;
 	}
 
-	void reg(std::unique_ptr<Command>&& cmd) {
+	void reg(std::unique_ptr<Command> cmd) {
 		cmd_map[cmd->name()] = std::move(cmd);
 	}
 
diff --git a/aegisub/src/command/command.h b/aegisub/src/command/command.h
index 5edb480c72614af8ef6cc47159ddea06ab371c99..a67cade0cc76289465c3805c8bac5dd44357dc9a 100644
--- a/aegisub/src/command/command.h
+++ b/aegisub/src/command/command.h
@@ -138,7 +138,7 @@ namespace cmd {
 
 	/// Register a command.
 	/// @param cmd Command object to register.
-	void reg(std::unique_ptr<Command>&& cmd);
+	void reg(std::unique_ptr<Command> cmd);
 
 	/// Unregister a command.
 	/// @param cmd Command name to unregister. The associated command object is deleted.
diff --git a/aegisub/src/preferences.cpp b/aegisub/src/preferences.cpp
index 9885624525cea1be2584da2dbd8febb259832b81..d20a76c79ba343ef55c7767af2ac6ea5ac54bab9 100644
--- a/aegisub/src/preferences.cpp
+++ b/aegisub/src/preferences.cpp
@@ -590,7 +590,7 @@ Advanced_Video::Advanced_Video(wxTreebook *book, Preferences *parent): OptionPag
 	SetSizerAndFit(sizer);
 }
 
-void Preferences::SetOption(std::unique_ptr<agi::OptionValue>&& new_value) {
+void Preferences::SetOption(std::unique_ptr<agi::OptionValue> new_value) {
 	pending_changes[new_value->GetName()] = std::move(new_value);
 	if (IsEnabled())
 		applyButton->Enable(true);
diff --git a/aegisub/src/preferences.h b/aegisub/src/preferences.h
index effa82e58a59792af2a36212fcba74de9c0000de..0bf1754edf968df9905730eeaef7d6c29c622f42 100644
--- a/aegisub/src/preferences.h
+++ b/aegisub/src/preferences.h
@@ -56,7 +56,7 @@ public:
 
 	/// Add an option to be set when the OK or Apply button is clicked
 	/// @param new_value Clone of the option with the new value to copy over
-	void SetOption(std::unique_ptr<agi::OptionValue>&& new_value);
+	void SetOption(std::unique_ptr<agi::OptionValue> new_value);
 
 	/// All a function to call when the OK or Apply button is clicked
 	/// @param callback Function to call
diff --git a/aegisub/src/video_display.cpp b/aegisub/src/video_display.cpp
index 6b17f363881f8800e734255e6631be53ec79ac16..40bbd4e980540c7c04a362fc04abf714a599babd 100644
--- a/aegisub/src/video_display.cpp
+++ b/aegisub/src/video_display.cpp
@@ -407,7 +407,7 @@ void VideoDisplay::SetZoomFromBoxText(wxCommandEvent &) {
 		SetZoom(value / 100.);
 }
 
-void VideoDisplay::SetTool(std::unique_ptr<VisualToolBase>&& new_tool) {
+void VideoDisplay::SetTool(std::unique_ptr<VisualToolBase> new_tool) {
 	toolBar->ClearTools();
 	toolBar->Realize();
 	toolBar->Show(false);
diff --git a/aegisub/src/video_display.h b/aegisub/src/video_display.h
index a7f9ae03cd50cc9dcaf36dd98f790dab500cd096..96c9636d3f74d5a0950ae042f72bb96634766ca6 100644
--- a/aegisub/src/video_display.h
+++ b/aegisub/src/video_display.h
@@ -160,7 +160,7 @@ public:
 	/// Get the last seen position of the mouse in script coordinates
 	Vector2D GetMousePosition() const;
 
-	void SetTool(std::unique_ptr<VisualToolBase>&& new_tool);
+	void SetTool(std::unique_ptr<VisualToolBase> new_tool);
 
 	bool ToolIsType(std::type_info const& type) const;