diff --git a/data/json/bionics.json b/data/json/bionics.json
index 9eab9d7aa4092..b14137c6b27e5 100644
--- a/data/json/bionics.json
+++ b/data/json/bionics.json
@@ -44,7 +44,7 @@
     "description": "The flesh on your arms has been surgically replaced by alloy plating.  Provides passive protection and can be used in conjunction with bionic martial arts.",
     "occupied_bodyparts": [ [ "ARM_L", 4 ], [ "ARM_R", 4 ] ],
     "bash_protec": [ [ "arm_l", 3 ], [ "arm_r", 3 ] ],
-    "cut_protec": [ [ "ARM_L", 3 ], [ "ARM_R", 3 ] ],
+    "cut_protec": [ [ "arm_l", 3 ], [ "arm_r", 3 ] ],
     "flags": [ "BIONIC_NPC_USABLE", "BIONIC_SHOCKPROOF" ]
   },
   {
@@ -55,7 +55,7 @@
     "occupied_bodyparts": [ [ "EYES", 1 ] ],
     "env_protec": [ [ "eyes", 7 ] ],
     "bash_protec": [ [ "eyes", 3 ] ],
-    "cut_protec": [ [ "EYES", 3 ] ],
+    "cut_protec": [ [ "eyes", 3 ] ],
     "flags": [ "BIONIC_NPC_USABLE", "BIONIC_SHOCKPROOF" ]
   },
   {
@@ -65,7 +65,7 @@
     "description": "The flesh on your head has been surgically replaced by alloy plating, protecting both your head and jaw regions.",
     "occupied_bodyparts": [ [ "HEAD", 5 ], [ "MOUTH", 1 ] ],
     "bash_protec": [ [ "head", 3 ] ],
-    "cut_protec": [ [ "HEAD", 3 ] ],
+    "cut_protec": [ [ "head", 3 ] ],
     "flags": [ "BIONIC_NPC_USABLE", "BIONIC_SHOCKPROOF" ]
   },
   {
@@ -75,7 +75,7 @@
     "description": "The flesh on your legs has been surgically replaced by alloy plating.  Provides passive protection and can be used in conjunction with bionic martial arts.",
     "occupied_bodyparts": [ [ "LEG_L", 6 ], [ "LEG_R", 6 ] ],
     "bash_protec": [ [ "leg_l", 3 ], [ "leg_r", 3 ] ],
-    "cut_protec": [ [ "LEG_L", 3 ], [ "LEG_R", 3 ] ],
+    "cut_protec": [ [ "leg_l", 3 ], [ "leg_r", 3 ] ],
     "flags": [ "BIONIC_NPC_USABLE", "BIONIC_SHOCKPROOF" ]
   },
   {
@@ -85,7 +85,7 @@
     "description": "The flesh on your torso has been surgically replaced by alloy plating, protecting it from physical trauma.",
     "occupied_bodyparts": [ [ "TORSO", 10 ] ],
     "bash_protec": [ [ "torso", 3 ] ],
-    "cut_protec": [ [ "TORSO", 3 ] ],
+    "cut_protec": [ [ "torso", 3 ] ],
     "flags": [ "BIONIC_NPC_USABLE", "BIONIC_SHOCKPROOF" ]
   },
   {
@@ -186,16 +186,16 @@
       [ "foot_r", 2 ]
     ],
     "cut_protec": [
-      [ "TORSO", 4 ],
-      [ "HEAD", 4 ],
-      [ "ARM_L", 4 ],
-      [ "ARM_R", 4 ],
-      [ "HAND_L", 4 ],
-      [ "HAND_R", 4 ],
-      [ "LEG_L", 4 ],
-      [ "LEG_R", 4 ],
-      [ "FOOT_L", 4 ],
-      [ "FOOT_R", 4 ]
+      [ "torso", 4 ],
+      [ "head", 4 ],
+      [ "arm_l", 4 ],
+      [ "arm_r", 4 ],
+      [ "hand_l", 4 ],
+      [ "hand_r", 4 ],
+      [ "leg_l", 4 ],
+      [ "leg_r", 4 ],
+      [ "foot_l", 4 ],
+      [ "foot_r", 4 ]
     ],
     "flags": [ "BIONIC_NPC_USABLE", "BIONIC_SHOCKPROOF" ]
   },
diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md
index ab9f6504f320d..bb5c9a7e53b0e 100644
--- a/doc/JSON_INFO.md
+++ b/doc/JSON_INFO.md
@@ -488,8 +488,8 @@ This section describes each json file and their contents. Each json has their ow
     "description": "Surgically implanted in your trachea is an advanced filtration system.  If toxins, or airborne diseases find their way into your windpipe, the filter will attempt to remove them.",
     "occupied_bodyparts": [ [ "TORSO", 4 ], [ "MOUTH", 2 ] ],
     "env_protec": [ [ "mouth", 7 ] ],
-    "bash_protec": [ [ "LEG_L", 3 ], [ "LEG_R", 3 ] ],
-    "cut_protec": [ [ "LEG_L", 3 ], [ "LEG_R", 3 ] ],
+    "bash_protec": [ [ "leg_l", 3 ], [ "leg_r", 3 ] ],
+    "cut_protec": [ [ "leg_l", 3 ], [ "leg_r", 3 ] ],
     "flags": [ "BIONIC_NPC_USABLE" ]
 }
 ```
diff --git a/src/bionics.cpp b/src/bionics.cpp
index dd1573fd2d0bc..fdfff6f6956cc 100644
--- a/src/bionics.cpp
+++ b/src/bionics.cpp
@@ -2607,7 +2607,7 @@ void load_bionic( const JsonObject &jsobj )
                                         ja.get_int( 1 ) );
     }
     for( JsonArray ja : jsobj.get_array( "cut_protec" ) ) {
-        new_bionic.cut_protec.emplace( get_body_part_token( ja.get_string( 0 ) ),
+        new_bionic.cut_protec.emplace( bodypart_str_id( ja.get_string( 0 ) ),
                                        ja.get_int( 1 ) );
     }
 
diff --git a/src/bionics.h b/src/bionics.h
index 62a7414bba7e2..6d2d5a1d8918f 100644
--- a/src/bionics.h
+++ b/src/bionics.h
@@ -107,7 +107,7 @@ struct bionic_data {
     /**Amount of bash protection offered by this bionic*/
     std::map<bodypart_str_id, size_t> bash_protec;
     /**Amount of cut protection offered by this bionic*/
-    std::map<body_part, size_t> cut_protec;
+    std::map<bodypart_str_id, size_t> cut_protec;
 
     /** bionic enchantments */
     std::vector<enchantment_id> enchantments;
diff --git a/src/character.cpp b/src/character.cpp
index c11104bca4cc4..4342c865112e8 100644
--- a/src/character.cpp
+++ b/src/character.cpp
@@ -7087,7 +7087,7 @@ int Character::get_armor_bash( bodypart_id bp ) const
 
 int Character::get_armor_cut( bodypart_id bp ) const
 {
-    return get_armor_cut_base( bp->token ) + armor_cut_bonus;
+    return get_armor_cut_base( bp ) + armor_cut_bonus;
 }
 
 int Character::get_armor_type( damage_type dt, body_part bp ) const
@@ -7145,22 +7145,22 @@ int Character::get_armor_bash_base( bodypart_id bp ) const
     return ret;
 }
 
-int Character::get_armor_cut_base( body_part bp ) const
+int Character::get_armor_cut_base( bodypart_id bp ) const
 {
     int ret = 0;
     for( auto &i : worn ) {
-        if( i.covers( bp ) ) {
+        if( i.covers( bp->token ) ) {
             ret += i.cut_resist();
         }
     }
     for( const bionic_id &bid : get_bionics() ) {
-        const auto cut_prot = bid->cut_protec.find( bp );
+        const auto cut_prot = bid->cut_protec.find( bp.id() );
         if( cut_prot != bid->cut_protec.end() ) {
             ret += cut_prot->second;
         }
     }
 
-    ret += mutation_armor( bp, DT_CUT );
+    ret += mutation_armor( bp->token, DT_CUT );
     return ret;
 }
 
@@ -8310,7 +8310,7 @@ float Character::bionic_armor_bonus( body_part bp, damage_type dt ) const
     float result = 0.0f;
     if( dt == DT_CUT || dt == DT_STAB ) {
         for( const bionic_id &bid : get_bionics() ) {
-            const auto cut_prot = bid->cut_protec.find( bp );
+            const auto cut_prot = bid->cut_protec.find( convert_bp( bp ) );
             if( cut_prot != bid->cut_protec.end() ) {
                 result += cut_prot->second;
             }
diff --git a/src/character.h b/src/character.h
index 5150c8beea12c..cc7b74a937759 100644
--- a/src/character.h
+++ b/src/character.h
@@ -1729,7 +1729,7 @@ class Character : public Creature, public visitable<Character>
         /** Returns bashing resistance from the creature and armor only */
         int get_armor_bash_base( bodypart_id bp ) const override;
         /** Returns cutting resistance from the creature and armor only */
-        int get_armor_cut_base( body_part bp ) const override;
+        int get_armor_cut_base( bodypart_id bp ) const override;
         /** Returns overall env_resist on a body_part */
         int get_env_resist( bodypart_id bp ) const override;
         /** Returns overall acid resistance for the body part */
diff --git a/src/creature.cpp b/src/creature.cpp
index f1525a398ca8c..4e1ae88311d5f 100644
--- a/src/creature.cpp
+++ b/src/creature.cpp
@@ -1369,7 +1369,7 @@ int Creature::get_armor_bash_base( bodypart_id ) const
 {
     return armor_bash_bonus;
 }
-int Creature::get_armor_cut_base( body_part ) const
+int Creature::get_armor_cut_base( bodypart_id ) const
 {
     return armor_cut_bonus;
 }
diff --git a/src/creature.h b/src/creature.h
index 27a45919b5897..ad5c01fbbea65 100644
--- a/src/creature.h
+++ b/src/creature.h
@@ -411,7 +411,7 @@ class Creature
         virtual int get_armor_bash( bodypart_id bp ) const;
         virtual int get_armor_cut( bodypart_id bp ) const;
         virtual int get_armor_bash_base( bodypart_id bp ) const;
-        virtual int get_armor_cut_base( body_part bp ) const;
+        virtual int get_armor_cut_base( bodypart_id bp ) const;
         virtual int get_armor_bash_bonus() const;
         virtual int get_armor_cut_bonus() const;
 
diff --git a/src/item.cpp b/src/item.cpp
index a24aa11b21a5c..aa27cb2d41914 100644
--- a/src/item.cpp
+++ b/src/item.cpp
@@ -3128,8 +3128,8 @@ void item::bionic_info( std::vector<iteminfo> &info, const iteminfo_query *parts
         info.push_back( iteminfo( "DESCRIPTION",
                                   _( "<bold>Cut Protection</bold>: " ),
                                   iteminfo::no_newline ) );
-        for( const std::pair< const body_part, size_t > &element : bid->cut_protec ) {
-            info.push_back( iteminfo( "CBM", body_part_name_as_heading( element.first, 1 ),
+        for( const std::pair< const bodypart_str_id, size_t > &element : bid->cut_protec ) {
+            info.push_back( iteminfo( "CBM", body_part_name_as_heading( element.first->token, 1 ),
                                       " <num> ", iteminfo::no_newline, element.second ) );
         }
     }