diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleBuilder.kt b/common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleBuilder.kt
index e2e22e086332448a2599b847dc86d08f160f06d3..d80b820d4fc946343545f011f785b0e31d8f5c93 100644
--- a/common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleBuilder.kt
+++ b/common/src/main/kotlin/com/cobblemon/mod/common/battles/BattleBuilder.kt
@@ -100,6 +100,10 @@ object BattleBuilder {
                 )
             }
 
+            if (actor.pokemonList.any { it.entity?.isBusy == true }) {
+                errors.participantErrors[actor] += BattleStartError.targetIsBusy(player.displayName ?: player.name)
+            }
+
             if (BattleRegistry.getBattleByParticipatingPlayer(player) != null) {
                 errors.participantErrors[actor] += BattleStartError.alreadyInBattle(player)
             }
@@ -178,6 +182,10 @@ object BattleBuilder {
                 )
             }
 
+            if (actor.pokemonList.any { it.entity?.isBusy == true }) {
+                errors.participantErrors[actor] += BattleStartError.targetIsBusy(player.displayName ?: player.name)
+            }
+
             if (BattleRegistry.getBattleByParticipatingPlayer(player) != null) {
                 errors.participantErrors[actor] += BattleStartError.alreadyInBattle(player)
             }
@@ -248,7 +256,7 @@ object BattleBuilder {
         val wildActor = PokemonBattleActor(pokemonEntity.pokemon.uuid, BattlePokemon(pokemonEntity.pokemon), fleeDistance)
         val errors = ErroredBattleStart()
 
-        if(playerTeam.isNotEmpty() && playerTeam[0].health <= 0){
+        if (playerTeam.isNotEmpty() && playerTeam[0].health <= 0){
             errors.participantErrors[playerActor] += BattleStartError.insufficientPokemon(
                actorEntity = player,
                 requiredCount = battleFormat.battleType.slotsPerActor,
@@ -264,6 +272,10 @@ object BattleBuilder {
             )
         }
 
+        if (playerActor.pokemonList.any { it.entity?.isBusy == true }) {
+            errors.participantErrors[playerActor] += BattleStartError.targetIsBusy(player.displayName ?: player.name)
+        }
+
         if (BattleRegistry.getBattleByParticipatingPlayer(player) != null) {
             errors.participantErrors[playerActor] += BattleStartError.alreadyInBattle(playerActor)
         }
@@ -348,6 +360,10 @@ object BattleBuilder {
             )
         }
 
+        if (playerActor.pokemonList.any { it.entity?.isBusy == true }) {
+            errors.participantErrors[playerActor] += BattleStartError.targetIsBusy(player.displayName ?: player.name)
+        }
+
         playerActor.battleTheme = npcEntity.getBattleTheme()
 
         return if (errors.isEmpty) {
@@ -394,7 +410,7 @@ interface BattleStartError {
         fun alreadyInBattle(pokemonEntity: PokemonEntity) = AlreadyInBattleError(pokemonEntity.uuid, pokemonEntity.effectiveName())
         fun alreadyInBattle(actor: BattleActor) = AlreadyInBattleError(actor.uuid, actor.getName())
         fun noParty(npcEntity: NPCEntity) = NoPartyError(npcEntity)
-        fun targetIsBusy(targetName: MutableComponent) = BusyError(targetName)
+        fun targetIsBusy(targetName: Component) = BusyError(targetName)
         fun insufficientPokemon(
             actorEntity: Entity,
             requiredCount: Int,
@@ -474,7 +490,7 @@ class AlreadyInBattleError(
     }
 }
 class BusyError(
-    val targetName: MutableComponent
+    val targetName: Component
 ): BattleStartError {
     override fun getMessageFor(entity: Entity) = battleLang("errors.busy", targetName)
 }
diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockActiveAnimation.kt b/common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockActiveAnimation.kt
index 09d332be6bb5b10882d963b7deb5634323e51225..906ce3aaf1d2c5074bebcd0a7c87824429c203cd 100644
--- a/common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockActiveAnimation.kt
+++ b/common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/bedrock/animation/BedrockActiveAnimation.kt
@@ -35,6 +35,11 @@ open class BedrockActiveAnimation(
         it.afterAction = action
     }
 
+    override fun start(state: PosableState) {
+        super.start(state)
+        startedSeconds = state.animationSeconds
+    }
+
     override fun run(
         context: RenderContext,
         model: PosableModel,
@@ -46,10 +51,6 @@ open class BedrockActiveAnimation(
         headPitch: Float,
         intensity: Float
     ): Boolean {
-        if (startedSeconds == -1F) {
-            startedSeconds = state.animationSeconds
-        }
-
         return animation.run(context, model, state, state.animationSeconds - startedSeconds, limbSwing, limbSwingAmount, ageInTicks, intensity).also {
             if (!it) {
                 afterAction(context, state)
@@ -58,9 +59,6 @@ open class BedrockActiveAnimation(
     }
 
     override fun applyEffects(entity: Entity?, state: PosableState, previousSeconds: Float, newSeconds: Float) {
-        if (startedSeconds == -1F) {
-            startedSeconds = state.animationSeconds
-        }
         val previousSecondsOffset = previousSeconds - startedSeconds
         val currentSecondsOffset = newSeconds - startedSeconds
         animation.applyEffects(entity, state, previousSecondsOffset, currentSecondsOffset)
diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/datafixer/fix/FeatureFix.kt b/common/src/main/kotlin/com/cobblemon/mod/common/datafixer/fix/FeatureFix.kt
index 4ff51d6ac4e8c821065516da350078d019d2ef23..25ec9e7ee59ee2e7df7bed087b2af75513a13f6e 100644
--- a/common/src/main/kotlin/com/cobblemon/mod/common/datafixer/fix/FeatureFix.kt
+++ b/common/src/main/kotlin/com/cobblemon/mod/common/datafixer/fix/FeatureFix.kt
@@ -33,6 +33,9 @@ class FeatureFix(output: Schema) : PokemonFix(output) {
         if (dynamic.value is CompoundTag) {
             var rootTag = dynamic.value as CompoundTag
             var species = PokemonSpecies.getByIdentifier(rootTag.getString(DataKeys.POKEMON_SPECIES_IDENTIFIER).asResource())
+            if (species == null) {
+                return dynamic
+            }
             SpeciesFeatures.getFeaturesFor(species!!).forEach {
                 val feature = it(rootTag) ?: return@forEach
                 var tag = CompoundTag()
diff --git a/common/src/main/resources/data/cobblemon/dex_entries/pokemon/kanto/cubone.json b/common/src/main/resources/data/cobblemon/dex_entries/pokemon/kanto/cubone.json
index d4d4beeee839058c931e90d20e436337cd077142..50bb8ede78607c8179aaf1773d764b3eff7a52f8 100644
--- a/common/src/main/resources/data/cobblemon/dex_entries/pokemon/kanto/cubone.json
+++ b/common/src/main/resources/data/cobblemon/dex_entries/pokemon/kanto/cubone.json
@@ -11,5 +11,14 @@
       ]
     }
   ],
-  "variations": []
+  "variations": [
+    {
+      "displayName": "cobblemon.pokedex.variation.region_bias",
+      "icon": "cobblemon:textures/gui/pokedex/variation/globe.png",
+      "aspects": [
+        "region-bias-none",
+        "region-bias-alola"
+      ]
+    }
+  ]
 }
\ No newline at end of file