diff --git a/fabric-resource-loader-v0/build.gradle b/fabric-resource-loader-v0/build.gradle
index 1739fa3cf..cf372f932 100644
--- a/fabric-resource-loader-v0/build.gradle
+++ b/fabric-resource-loader-v0/build.gradle
@@ -1,2 +1,7 @@
 archivesBaseName = "fabric-resource-loader-v0"
 version = getSubprojectVersion(project, "0.3.5")
+
+dependencies {
+	testmodCompile project(path: ':fabric-lifecycle-events-v1', configuration: 'dev')
+	testmodCompile project(path: ':fabric-api-base', configuration: 'dev')
+}
diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/ResourceManagerHelperImpl.java b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/ResourceManagerHelperImpl.java
index 6de10f4a3..e45168e92 100644
--- a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/ResourceManagerHelperImpl.java
+++ b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/ResourceManagerHelperImpl.java
@@ -51,7 +51,7 @@ public class ResourceManagerHelperImpl implements ResourceManagerHelper {
 	private final Set<Identifier> addedListenerIds = new HashSet<>();
 	private final Set<IdentifiableResourceReloadListener> addedListeners = new LinkedHashSet<>();
 
-	public static ResourceManagerHelper get(ResourceType type) {
+	public static ResourceManagerHelperImpl get(ResourceType type) {
 		return registryMap.computeIfAbsent(type, (t) -> new ResourceManagerHelperImpl());
 	}
 
@@ -114,7 +114,7 @@ public class ResourceManagerHelperImpl implements ResourceManagerHelper {
 	}
 
 	public static void sort(ResourceType type, List<ResourceReloadListener> listeners) {
-		ResourceManagerHelperImpl instance = registryMap.get(type);
+		ResourceManagerHelperImpl instance = get(type);
 
 		if (instance != null) {
 			instance.sort(listeners);
diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/KeyedResourceReloadListenerMixin.java b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/KeyedResourceReloadListenerMixin.java
index cd1d59def..d4b333082 100644
--- a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/KeyedResourceReloadListenerMixin.java
+++ b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/KeyedResourceReloadListenerMixin.java
@@ -25,7 +25,7 @@ import org.spongepowered.asm.mixin.Mixin;
 import net.minecraft.loot.LootManager;
 import net.minecraft.recipe.RecipeManager;
 import net.minecraft.server.ServerAdvancementLoader;
-import net.minecraft.server.function.CommandFunctionManager;
+import net.minecraft.server.function.FunctionLoader;
 import net.minecraft.tag.TagManagerLoader;
 import net.minecraft.util.Identifier;
 
@@ -34,7 +34,7 @@ import net.fabricmc.fabric.api.resource.ResourceReloadListenerKeys;
 
 @Mixin({
 		/* public */
-		RecipeManager.class, ServerAdvancementLoader.class, CommandFunctionManager.class, LootManager.class, TagManagerLoader.class
+		RecipeManager.class, ServerAdvancementLoader.class, FunctionLoader.class, LootManager.class, TagManagerLoader.class
 		/* private */
 })
 public abstract class KeyedResourceReloadListenerMixin implements IdentifiableResourceReloadListener {
@@ -51,7 +51,7 @@ public abstract class KeyedResourceReloadListenerMixin implements IdentifiableRe
 				this.fabric$id = ResourceReloadListenerKeys.RECIPES;
 			} else if (self instanceof ServerAdvancementLoader) {
 				this.fabric$id = ResourceReloadListenerKeys.ADVANCEMENTS;
-			} else if (self instanceof CommandFunctionManager) {
+			} else if (self instanceof FunctionLoader) {
 				this.fabric$id = ResourceReloadListenerKeys.FUNCTIONS;
 			} else if (self instanceof LootManager) {
 				this.fabric$id = ResourceReloadListenerKeys.LOOT_TABLES;
diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java
index 5225d8c2d..490eb4f7c 100644
--- a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java
+++ b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java
@@ -27,7 +27,7 @@ import net.minecraft.client.render.block.BlockRenderManager;
 import net.minecraft.client.render.item.ItemRenderer;
 import net.minecraft.client.render.model.BakedModelManager;
 import net.minecraft.client.resource.language.LanguageManager;
-import net.minecraft.client.sound.SoundLoader;
+import net.minecraft.client.sound.SoundManager;
 import net.minecraft.client.texture.TextureManager;
 import net.minecraft.util.Identifier;
 
@@ -36,7 +36,7 @@ import net.fabricmc.fabric.api.resource.ResourceReloadListenerKeys;
 
 @Mixin({
 		/* public */
-		SoundLoader.class, BakedModelManager.class, LanguageManager.class, TextureManager.class,
+		SoundManager.class, BakedModelManager.class, LanguageManager.class, TextureManager.class,
 		/* private */
 		WorldRenderer.class, BlockRenderManager.class, ItemRenderer.class
 })
@@ -50,7 +50,7 @@ public abstract class KeyedResourceReloadListenerClientMixin implements Identifi
 		if (this.fabric$id == null) {
 			Object self = this;
 
-			if (self instanceof SoundLoader) {
+			if (self instanceof SoundManager) {
 				this.fabric$id = ResourceReloadListenerKeys.SOUNDS;
 			} else if (self instanceof BakedModelManager) {
 				this.fabric$id = ResourceReloadListenerKeys.MODELS;
diff --git a/fabric-resource-loader-v0/src/testmod/java/net/fabricmc/fabric/test/resource/loader/ResourceReloadListenerTestMod.java b/fabric-resource-loader-v0/src/testmod/java/net/fabricmc/fabric/test/resource/loader/ResourceReloadListenerTestMod.java
new file mode 100644
index 000000000..007c75205
--- /dev/null
+++ b/fabric-resource-loader-v0/src/testmod/java/net/fabricmc/fabric/test/resource/loader/ResourceReloadListenerTestMod.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.test.resource.loader;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import net.minecraft.resource.ResourceManager;
+import net.minecraft.resource.ResourceType;
+import net.minecraft.util.Identifier;
+
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.ModInitializer;
+import net.fabricmc.loader.api.FabricLoader;
+import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
+import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
+import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
+
+public class ResourceReloadListenerTestMod implements ModInitializer {
+	public static final String MODID = "fabric-resource-loader-v0-testmod";
+
+	private static boolean clientResources = false;
+	private static boolean serverResources = false;
+
+	@Override
+	public void onInitialize() {
+		setupClientReloadListeners();
+		setupServerReloadListeners();
+
+		ServerTickEvents.START_WORLD_TICK.register(world -> {
+			if (!clientResources && FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
+				throw new AssertionError("Client reload listener was not called.");
+			}
+
+			if (!serverResources) {
+				throw new AssertionError("Server reload listener was not called.");
+			}
+		});
+	}
+
+	private void setupClientReloadListeners() {
+		ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
+			@Override
+			public Identifier getFabricId() {
+				return new Identifier(MODID, "client_second");
+			}
+
+			@Override
+			public void apply(ResourceManager manager) {
+				if (!clientResources) {
+					throw new AssertionError("Second reload listener was called before the first!");
+				}
+			}
+
+			@Override
+			public Collection<Identifier> getFabricDependencies() {
+				return Collections.singletonList(new Identifier(MODID, "client_first"));
+			}
+		});
+
+		ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
+			@Override
+			public Identifier getFabricId() {
+				return new Identifier(MODID, "client_first");
+			}
+
+			@Override
+			public void apply(ResourceManager manager) {
+				clientResources = true;
+			}
+		});
+	}
+
+	private void setupServerReloadListeners() {
+		ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
+			@Override
+			public Identifier getFabricId() {
+				return new Identifier(MODID, "server_second");
+			}
+
+			@Override
+			public void apply(ResourceManager manager) {
+				if (!serverResources) {
+					throw new AssertionError("Second reload listener was called before the first!");
+				}
+			}
+
+			@Override
+			public Collection<Identifier> getFabricDependencies() {
+				return Collections.singletonList(new Identifier(MODID, "server_first"));
+			}
+		});
+
+		ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
+			@Override
+			public Identifier getFabricId() {
+				return new Identifier(MODID, "server_first");
+			}
+
+			@Override
+			public void apply(ResourceManager manager) {
+				serverResources = true;
+			}
+		});
+	}
+}
diff --git a/fabric-resource-loader-v0/src/testmod/resources/fabric.mod.json b/fabric-resource-loader-v0/src/testmod/resources/fabric.mod.json
index 1e78ad555..29820bb43 100644
--- a/fabric-resource-loader-v0/src/testmod/resources/fabric.mod.json
+++ b/fabric-resource-loader-v0/src/testmod/resources/fabric.mod.json
@@ -10,7 +10,8 @@
   },
   "entrypoints": {
     "main": [
-      "net.fabricmc.fabric.test.resource.loader.BuiltinResourcePackTestMod"
+      "net.fabricmc.fabric.test.resource.loader.BuiltinResourcePackTestMod",
+      "net.fabricmc.fabric.test.resource.loader.ResourceReloadListenerTestMod"
     ]
   }
 }