diff --git a/Assets/Scripts/Core/Objects/Collectibles/TestCollectible/TestCollectible.cs b/Assets/Scripts/Core/Objects/Collectibles/TestCollectible/TestCollectible.cs
index 86ae86d36bf426c8e165858d1878446f4694f850..2d334ba1432aef0e184ea33f101ffae9b963792f 100644
--- a/Assets/Scripts/Core/Objects/Collectibles/TestCollectible/TestCollectible.cs
+++ b/Assets/Scripts/Core/Objects/Collectibles/TestCollectible/TestCollectible.cs
@@ -2,7 +2,7 @@ using UnityEngine;
 
 public class TestCollectible : Collectible{
     // Static attributes
-    public static string ObjectIdPrefix = "Player";
+    public static string ObjectIdPrefix = "TestCollectible";
 
     // Constructor
     protected new void Start(){
diff --git a/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs b/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs
new file mode 100644
index 0000000000000000000000000000000000000000..712465eff00825ac9c5e807e34e58fea7c037c03
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs
@@ -0,0 +1,3 @@
+public class Projectile : AttackObject{
+    
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs.meta b/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e0f9b5c519a09787ff40d7a085b41a56fee71fe0
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/Projectile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 155e444c6e73b404981a30f674ebbe98
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Projectiles/TestProjectile.meta b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile.meta
new file mode 100644
index 0000000000000000000000000000000000000000..47ac0ae6555db0fdb921994e2b1876e758e6a130
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e0692a4893eed1143a9ffbe66c0d6767
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs
new file mode 100644
index 0000000000000000000000000000000000000000..590825f761503cac58a46cd3594d981be159e4e7
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs
@@ -0,0 +1,3 @@
+public class TestProjectile : Projectile{
+
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs.meta b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cbc956aacccbfd18204dfdb42d1829992b3c6be2
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Projectiles/TestProjectile/TestProjectile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 42130989abf222142803c893c15fda1d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
index 5b77ced02201a574821d0e8d252e6ab3a5949cfc..82afa3232dff40438312b0911ab638d0b228d922 100644
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
+++ b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackEntity.cs
@@ -1,7 +1,7 @@
 using System;
 using UnityEngine;
 
-public class AttackEntity : WorldObject, IAttack{
+public class AttackEntity : WorldEntity, IAttack{
     // Attributes
     [SerializeField] private float damage;
     [SerializeField] private float knockbackPower;
diff --git a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
index 940b3447aa0853f4c4c2ac90f00ded37807ee5d8..8c23b46ac6b552df5ecadecd87d6dc277d00504c 100644
--- a/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
+++ b/Assets/Scripts/Library/BaseClasses/EntityObject/AttackObject.cs
@@ -1,7 +1,8 @@
 using System;
 using UnityEngine;
 
-public class AttackObject : WorldObject, IAttack{
+// TODO: Review whether attack object should be classified as a world object
+public class AttackObject : MonoBehaviour, IAttack{
     // Attributes
     [SerializeField] private float damage;
     [SerializeField] private float knockbackPower;
diff --git a/Assets/Scripts/Library/Util/ObjectFactory.cs b/Assets/Scripts/Library/Util/ObjectFactory.cs
index bbe48929784f371aad5a38e5c2a4d9a05789b75d..3f5a7d748123a0a1e750b155825792fbf049fef2 100644
--- a/Assets/Scripts/Library/Util/ObjectFactory.cs
+++ b/Assets/Scripts/Library/Util/ObjectFactory.cs
@@ -49,7 +49,7 @@ public static class ObjectFactory{
         int renderingOrder = 0,
         string objectName = "Unnamed Object"
     ){
-        GameObject prefabObject = CreateObject(prefabPath, parent, position, scale, rotation, renderingOrder, objectName);
+        GameObject prefabObject = CreateObject(prefabPath, parent == null? ObjectManager.instance.transform : parent, position, scale, rotation, renderingOrder, objectName);
         if(!prefabObject.TryGetComponent<IAttack>(out var attackObject)) Debug.LogError("Loaded prefab is not an IAttack: " + prefabPath);
 
         attackObject.Damage = damage;
@@ -75,14 +75,13 @@ public static class ObjectFactory{
 
     public static Collectible CreateCollectibleObject(
         string prefabPath,
-        Transform parent = null,
         Vector3? position = null,
         Vector3? scale = null,
         Quaternion? rotation = null,
         int renderingOrder = 0,
         string objectName = "Unnamed Object"
     ){
-        GameObject prefabObject = CreateObject(prefabPath, parent == null? ObjectManager.instance.transform : parent, position, scale, rotation, renderingOrder, objectName);
+        GameObject prefabObject = CreateObject(prefabPath, ObjectManager.instance.transform, position, scale, rotation, renderingOrder, objectName);
         if(!prefabObject.TryGetComponent<Collectible>(out var collectible)) Debug.LogError("Loaded prefab is not a Collectible: " + prefabPath);
         prefabObject.layer = LayerMask.NameToLayer(GameEnvironmentConfig.LAYER_COLLECTIBLE);
 
@@ -91,14 +90,13 @@ public static class ObjectFactory{
 
     public static WorldEntity CreateEntity(
         string prefabPath,
-        Transform parent = null,
         Vector3? position = null,
         Vector3? scale = null,
         Quaternion? rotation = null,
         int renderingOrder = 0,
         string objectName = "Unnamed Object"
     ){
-        GameObject prefabObject = CreateObject(prefabPath, parent == null? EntityManager.instance.transform : parent, position, scale, rotation, renderingOrder, objectName);
+        GameObject prefabObject = CreateObject(prefabPath, EntityManager.instance.transform, position, scale, rotation, renderingOrder, objectName);
         if(!prefabObject.TryGetComponent<WorldEntity>(out var entity)) Debug.LogError("Loaded prefab is not an entity: " + prefabPath);
         return entity;
     }