Index: binary-improvements/7dtd-server-fixes/src/LiveData/Animals.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/LiveData/Animals.cs	(revision 307)
+++ binary-improvements/7dtd-server-fixes/src/LiveData/Animals.cs	(revision 312)
@@ -4,45 +4,18 @@
 namespace AllocsFixes.LiveData
 {
-    public class Animals
+	public class Animals : EntityFilterList<EntityAnimal>
     {
-		public static void Get (List<EntityAnimal> _list) {
-			_list.Clear ();
-			try {
-				List<Entity> entities = GameManager.Instance.World.Entities.list;
-				for (int i = 0; i < entities.Count; i++) {
-					Entity entity = entities [i];
 
-					if (entity is EntityAnimal) {
-						EntityAnimal ea = (EntityAnimal)entity;
+		public static readonly Animals Instance = new Animals ();
 
-						if (ea.IsAlive ())
-							_list.Add (ea);
-					}
+		protected override EntityAnimal predicate (Entity _e) {
+			if (_e is EntityAnimal) {
+				EntityAnimal ea = (EntityAnimal)_e;
+
+				if (ea.IsAlive ()) {
+					return ea;
 				}
 			}
-			catch (Exception e) {
-				Log.Exception (e);
-			}
-		}
-
-		public static int GetCount () {
-			int count = 0;
-			try {
-				List<Entity> entities = GameManager.Instance.World.Entities.list;
-				for (int i = 0; i < entities.Count; i++) {
-					Entity entity = entities [i];
-
-					if (entity is EntityAnimal) {
-						EntityAnimal ea = (EntityAnimal)entity;
-
-						if (ea.IsAlive ())
-							count++;
-					}
-				}
-			}
-			catch (Exception e) {
-				Log.Exception (e);
-			}
-			return count;
+			return null;
 		}
 
Index: binary-improvements/7dtd-server-fixes/src/LiveData/EntityFilterList.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/LiveData/EntityFilterList.cs	(revision 312)
+++ binary-improvements/7dtd-server-fixes/src/LiveData/EntityFilterList.cs	(revision 312)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+
+namespace AllocsFixes.LiveData
+{
+	public abstract class EntityFilterList<T> where T: Entity
+    {
+		public void Get (List<T> _list) {
+			_list.Clear ();
+			try {
+				List<Entity> entities = GameManager.Instance.World.Entities.list;
+				for (int i = 0; i < entities.Count; i++) {
+					Entity entity = entities [i];
+
+					T element = predicate (entity);
+					if (element != null) {
+						_list.Add (element);
+					}
+				}
+			}
+			catch (Exception e) {
+				Log.Exception (e);
+			}
+		}
+
+		public int GetCount () {
+			int count = 0;
+			try {
+				List<Entity> entities = GameManager.Instance.World.Entities.list;
+				for (int i = 0; i < entities.Count; i++) {
+					Entity entity = entities [i];
+
+					if (predicate (entity) != null) {
+						count++;
+					}
+				}
+			}
+			catch (Exception e) {
+				Log.Exception (e);
+			}
+			return count;
+		}
+
+		protected abstract T predicate (Entity _e);
+
+    }
+}
+
Index: binary-improvements/7dtd-server-fixes/src/LiveData/Hostiles.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/LiveData/Hostiles.cs	(revision 307)
+++ binary-improvements/7dtd-server-fixes/src/LiveData/Hostiles.cs	(revision 312)
@@ -4,44 +4,18 @@
 namespace AllocsFixes.LiveData
 {
-	public class Hostiles
+	public class Hostiles : EntityFilterList<EntityEnemy>
 	{
-		public static void Get (List<EntityEnemy> _list) {
-			_list.Clear ();
-			try {
-				List<Entity> entities = GameManager.Instance.World.Entities.list;
-				for (int i = 0; i < entities.Count; i++) {
-					Entity entity = entities [i];
 
-					if (entity is EntityEnemy) {
-						if (entity.IsAlive ())
-							_list.Add (entity as EntityEnemy);
-					}
+		public static readonly Hostiles Instance = new Hostiles ();
+
+		override protected EntityEnemy predicate (Entity _e) {
+			if (_e is EntityEnemy) {
+				if (_e.IsAlive ()) {
+					return _e as EntityEnemy;
 				}
 			}
-			catch (Exception e) {
-				Log.Exception (e);
-			}
+			return null;
 		}
 
-		public static int GetCount () {
-			int count = 0;
-			try {
-				List<Entity> entities = GameManager.Instance.World.Entities.list;
-				for (int i = 0; i < entities.Count; i++) {
-					Entity entity = entities [i];
-
-					if (entity.entityType == EntityType.Zombie) {
-						EntityEnemy ee = (EntityEnemy)entity;
-
-						if (ee.IsAlive ())
-							count++;
-					}
-				}
-			}
-			catch (Exception e) {
-				Log.Exception (e);
-			}
-			return count;
-		}
 	}
 }
