diff --git a/src/d_dehacked.cpp b/src/d_dehacked.cpp
index ddabdb7721..d92aef424c 100644
--- a/src/d_dehacked.cpp
+++ b/src/d_dehacked.cpp
@@ -2492,11 +2492,11 @@ bool D_LoadDehLump(int lumpnum)
 
 bool D_LoadDehFile(const char *patchfile)
 {
-	FileReader fr;
+	FileRdr fr;
 
-	if (fr.Open(patchfile))
+	if (fr.OpenFile(patchfile))
 	{
-		PatchSize = fr.GetLength();
+		PatchSize = (int)fr.GetLength();
 
 		PatchName = copystring(patchfile);
 		PatchFile = new char[PatchSize + 1];
diff --git a/src/g_game.cpp b/src/g_game.cpp
index 2ca349631e..836805677f 100644
--- a/src/g_game.cpp
+++ b/src/g_game.cpp
@@ -2801,8 +2801,8 @@ void G_DoPlayDemo (void)
 	{
 		FixPathSeperator (defdemoname);
 		DefaultExtension (defdemoname, ".lmp");
-		FileReader fr;
-		if (!fr.Open(defdemoname))
+		FileRdr fr;
+		if (!fr.OpenFile(defdemoname))
 		{
 			I_Error("Unable to open demo '%s'", defdemoname.GetChars());
 		}
diff --git a/src/m_misc.cpp b/src/m_misc.cpp
index 481f956b51..4f13802ce0 100644
--- a/src/m_misc.cpp
+++ b/src/m_misc.cpp
@@ -121,15 +121,15 @@ void M_FindResponseFile (void)
 			if (added_stuff < limit)
 			{
 				// READ THE RESPONSE FILE INTO MEMORY
-				FileReader fr;
-				if (!fr.Open(Args->GetArg(i) + 1))
+				FileRdr fr;
+				if (!fr.OpenFile(Args->GetArg(i) + 1))
 				{ // [RH] Make this a warning, not an error.
 					Printf ("No such response file (%s)!\n", Args->GetArg(i) + 1);
 				}
 				else
 				{
 					Printf ("Found response file %s!\n", Args->GetArg(i) + 1);
-					size = fr.GetLength();
+					size = (int)fr.GetLength();
 					file = new char[size+1];
 					fr.Read (file, size);
 					file[size] = 0;
diff --git a/src/sc_man.cpp b/src/sc_man.cpp
index b78b7a305e..2056ca60b0 100644
--- a/src/sc_man.cpp
+++ b/src/sc_man.cpp
@@ -248,8 +248,8 @@ bool FScanner::OpenFile (const char *name)
 {
 	Close ();
 
-	FileReader fr;
-	if (!fr.Open(name)) return false;
+	FileRdr fr;
+	if (!fr.OpenFile(name)) return false;
 	auto filesize = fr.GetLength();
 	auto filebuf = new uint8_t[filesize];
 	if (fr.Read(filebuf, filesize) != filesize)
diff --git a/src/sound/i_soundfont.cpp b/src/sound/i_soundfont.cpp
index 38b1f70b77..e807261107 100644
--- a/src/sound/i_soundfont.cpp
+++ b/src/sound/i_soundfont.cpp
@@ -291,8 +291,8 @@ void FSoundFontManager::ProcessOneFile(const FString &fn)
 		if (!sfi.mName.CompareNoCase(fb)) return;
 	}
 	
-	FileReader fr;
-	if (fr.Open(fn))
+	FileRdr fr;
+	if (fr.OpenFile(fn))
 	{
 		// Try to identify. We only accept .sf2 and .zip by content. All other archives are intentionally ignored.
 		char head[16] = { 0};
@@ -433,8 +433,8 @@ FSoundFontReader *FSoundFontManager::OpenSoundFont(const char *name, int allowed
 	// Next check if the file is a .sf file
 	if (allowed & SF_SF2)
 	{
-		FileReader fr;
-		if (fr.Open(name))
+		FileRdr fr;
+		if (fr.OpenFile(name))
 		{
 			char head[16] = { 0};
 			fr.Read(head, 16);
@@ -447,8 +447,8 @@ FSoundFontReader *FSoundFontManager::OpenSoundFont(const char *name, int allowed
 	}
 	if (allowed & SF_GUS)
 	{
-		FileReader fr;
-		if (fr.Open(name))
+		FileRdr fr;
+		if (fr.OpenFile(name))
 		{
 			char head[16] = { 0 };
 			fr.Read(head, 2);
diff --git a/src/sound/mpg123_decoder.cpp b/src/sound/mpg123_decoder.cpp
index db3489aa06..0a2f9fa2e8 100644
--- a/src/sound/mpg123_decoder.cpp
+++ b/src/sound/mpg123_decoder.cpp
@@ -145,7 +145,8 @@ bool MPG123Decoder::open(FileRdr &reader)
         MPG123 = 0;
     }
 
-    return false;
+	reader = std::move(Reader);	// need to give it back.
+	return false;
 }
 
 void MPG123Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type)
diff --git a/src/sound/sndfile_decoder.cpp b/src/sound/sndfile_decoder.cpp
index 07c7c81c31..ef24748aa5 100644
--- a/src/sound/sndfile_decoder.cpp
+++ b/src/sound/sndfile_decoder.cpp
@@ -127,7 +127,8 @@ bool SndFileDecoder::open(FileRdr &reader)
 		sf_close(SndFile);
 		SndFile = 0;
 	}
-    return false;
+	reader = std::move(Reader);	// need to give it back.
+	return false;
 }
 
 void SndFileDecoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type)
diff --git a/src/sound/timiditypp/instrum.cpp b/src/sound/timiditypp/instrum.cpp
index 86053e5186..ddd0d8fab2 100644
--- a/src/sound/timiditypp/instrum.cpp
+++ b/src/sound/timiditypp/instrum.cpp
@@ -75,6 +75,8 @@ Instruments::~Instruments()
 
 	free_tone_bank();
 	free_instrument_map();
+
+	if (sfreader != nullptr) delete sfreader;
 }
 
 void Instruments::free_instrument(Instrument *ip)
diff --git a/src/textures/buildtexture.cpp b/src/textures/buildtexture.cpp
index d23e5e6f2f..78d606a7ef 100644
--- a/src/textures/buildtexture.cpp
+++ b/src/textures/buildtexture.cpp
@@ -306,14 +306,14 @@ int FTextureManager::CountBuildTiles ()
 			FString artpath = rffpath;
 			artpath += artfile;
 
-			FileReader fr;
+			FileRdr fr;
 
-			if (!fr.Open(artpath))
+			if (!fr.OpenFile(artpath))
 			{
 				break;
 			}
 
-			long len = fr.GetLength();
+			auto len = fr.GetLength();
 			uint8_t *art = new uint8_t[len];
 			if (fr.Read (art, len) != len || (numtiles = CountTiles(art)) == 0)
 			{