diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 6750e741d..663b54bd1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -113,7 +113,6 @@ set (ERESSEA_SRC
   renumber.c
   report.c
   reports.c
-  skill.c
   spells.c
   spy.c
   steal.c
@@ -238,7 +237,6 @@ set(TESTS_SRC
   renumber.test.c
   report.test.c
   reports.test.c
-  skill.test.c
   spells.test.c
   spy.test.c
   study.test.c
diff --git a/src/alchemy.c b/src/alchemy.c
index bc66cb931..f385aca81 100644
--- a/src/alchemy.c
+++ b/src/alchemy.c
@@ -2,21 +2,21 @@
 #include <kernel/config.h>
 #include "alchemy.h"
 #include "guard.h"
-#include "skill.h"
 #include "study.h"
 
-#include <kernel/item.h>
-#include <kernel/faction.h>
-#include <kernel/messages.h>
+#include <kernel/attrib.h>
 #include <kernel/build.h>
+#include <kernel/faction.h>
+#include <kernel/gamedata.h>
+#include <kernel/item.h>
+#include <kernel/messages.h>
 #include <kernel/region.h>
 #include <kernel/pool.h>
 #include <kernel/race.h>
-#include <kernel/unit.h>
+#include "kernel/skill.h"
+#include "kernel/unit.h"
 
 /* util includes */
-#include <kernel/attrib.h>
-#include <kernel/gamedata.h>
 #include <util/base36.h>
 #include <util/log.h>
 #include <util/macros.h>
diff --git a/src/automate.h b/src/automate.h
index a59e7516e..a7dc3ebfd 100644
--- a/src/automate.h
+++ b/src/automate.h
@@ -3,10 +3,9 @@
 #ifndef H_GC_AUTOMATE
 #define H_GC_AUTOMATE
 
-#include "skill.h"
-
 struct region;
 struct unit;
+enum skill_t;
 
 typedef struct scholar {
     struct unit *u;
@@ -19,7 +18,8 @@ typedef struct scholar {
 
 void do_autostudy(struct region *r);
 
-int autostudy_init(scholar scholars[], int max_scholars, struct unit **units, skill_t *o_skill);
+int autostudy_init(scholar scholars[], int max_scholars,
+        struct unit **units, enum skill_t *o_skill);
 void autostudy_run(scholar scholars[], int nscholars);
 
 #endif
diff --git a/src/battle.c b/src/battle.c
index 236f2703e..8427a18b2 100644
--- a/src/battle.c
+++ b/src/battle.c
@@ -10,7 +10,6 @@
 #include "laws.h"
 #include "monsters.h"
 #include "move.h"
-#include "skill.h"
 #include "study.h"
 #include "spy.h"
 
@@ -33,6 +32,7 @@
 #include "kernel/race.h"
 #include "kernel/region.h"
 #include "kernel/ship.h"
+#include "kernel/skill.h"
 #include "kernel/terrain.h"
 #include "kernel/unit.h"
 #include "kernel/spell.h"
diff --git a/src/battle.test.c b/src/battle.test.c
index 9a4514ec1..d7af79fc8 100644
--- a/src/battle.test.c
+++ b/src/battle.test.c
@@ -8,7 +8,6 @@
 
 #include "guard.h"
 #include "reports.h"
-#include "skill.h"
 
 #include <kernel/config.h>
 #include <kernel/building.h>
@@ -19,7 +18,8 @@
 #include <kernel/race.h>
 #include <kernel/region.h>
 #include <kernel/ship.h>
-#include <kernel/unit.h>
+#include "kernel/skill.h"
+#include "kernel/unit.h"
 
 #include <spells/buildingcurse.h>
 
diff --git a/src/bind_unit.c b/src/bind_unit.c
index 7a23f7051..856674681 100644
--- a/src/bind_unit.c
+++ b/src/bind_unit.c
@@ -8,18 +8,15 @@
 #include "reports.h"
 #include "guard.h"
 #include "magic.h"
-#include "skill.h"
 
-/*  util includes */
-#include <kernel/attrib.h>
-#include <util/base36.h>
-#include <kernel/event.h>
-#include <util/log.h>
-#include <util/macros.h>
-#include "util/strings.h"
-#include "util/variant.h"
+/*  attributes includes */
+#include <attributes/racename.h>
+#include <attributes/key.h>
 
 /*  kernel includes */
+#include <kernel/attrib.h>
+#include "kernel/skill.h"
+#include <kernel/event.h>
 #include "kernel/skills.h"
 #include "kernel/types.h"
 #include <kernel/building.h>
@@ -38,9 +35,12 @@
 #include <kernel/spell.h>
 #include <kernel/unit.h>
 
-/*  attributes includes */
-#include <attributes/racename.h>
-#include <attributes/key.h>
+/*  util includes */
+#include <util/base36.h>
+#include <util/log.h>
+#include <util/macros.h>
+#include "util/strings.h"
+#include "util/variant.h"
 
 #include <selist.h>
 
diff --git a/src/bindings.c b/src/bindings.c
index fdb2cd153..ddae2f8f4 100755
--- a/src/bindings.c
+++ b/src/bindings.c
@@ -12,7 +12,6 @@
 #include "laws.h"
 #include "magic.h"
 #include "reports.h"
-#include "skill.h"
 #include "study.h"
 #include "summary.h"
 #include "teleport.h"
@@ -30,6 +29,7 @@
 #include "kernel/region.h"
 #include "kernel/save.h"
 #include "kernel/ship.h"
+#include "kernel/skill.h"
 #include "kernel/spell.h"
 #include "kernel/types.h"
 #include "kernel/item.h"
diff --git a/src/items.c b/src/items.c
index 27185c0b4..41c913f1f 100644
--- a/src/items.c
+++ b/src/items.c
@@ -4,7 +4,6 @@
 #include "items.h"
 
 #include "alchemy.h"
-#include "skill.h"
 #include "direction.h"
 #include "study.h"
 #include "economy.h"
@@ -25,6 +24,7 @@
 #include <kernel/region.h>
 #include <kernel/ship.h>
 #include <kernel/spell.h>
+#include <kernel/skill.h>
 #include <kernel/skills.h>
 #include <kernel/unit.h>
 
diff --git a/src/jsonconf.c b/src/jsonconf.c
index b54f6b670..51a825a60 100644
--- a/src/jsonconf.c
+++ b/src/jsonconf.c
@@ -4,6 +4,7 @@
 #include "jsonconf.h"
 
 /* kernel includes */
+#include "kernel/attrib.h"
 #include "kernel/building.h"
 #include "kernel/calendar.h"
 #include "kernel/config.h"
@@ -15,11 +16,11 @@
 #include "kernel/resources.h"
 #include "kernel/ship.h"
 #include "kernel/terrain.h"
+#include "kernel/skill.h"
 #include "kernel/spell.h"
 #include "kernel/spellbook.h"
 
 /* util includes */
-#include "kernel/attrib.h"
 #include "util/aliases.h"
 #include "util/crmessage.h"
 #include "util/functions.h"
@@ -36,7 +37,6 @@
 #include "direction.h"
 #include "move.h"
 #include "prefix.h"
-#include "skill.h"
 #include "exparse.h"
 
 /* external libraries */
diff --git a/src/kernel/CMakeLists.txt b/src/kernel/CMakeLists.txt
index 1ea71506f..9e0ad416d 100644
--- a/src/kernel/CMakeLists.txt
+++ b/src/kernel/CMakeLists.txt
@@ -37,6 +37,7 @@ region.test.c
 # resources.test.c
 save.test.c
 ship.test.c
+skill.test.c
 skills.test.c
 spellbook.test.c
 spell.test.c
@@ -74,6 +75,7 @@ region.c
 resources.c
 save.c
 ship.c
+skill.c
 skills.c
 spellbook.c
 spell.c
diff --git a/src/skill.c b/src/kernel/skill.c
similarity index 100%
rename from src/skill.c
rename to src/kernel/skill.c
diff --git a/src/skill.h b/src/kernel/skill.h
similarity index 100%
rename from src/skill.h
rename to src/kernel/skill.h
diff --git a/src/skill.test.c b/src/kernel/skill.test.c
similarity index 100%
rename from src/skill.test.c
rename to src/kernel/skill.test.c
diff --git a/src/kernel/skills.h b/src/kernel/skills.h
index 21b926159..467f4d828 100644
--- a/src/kernel/skills.h
+++ b/src/kernel/skills.h
@@ -1,7 +1,7 @@
 #ifndef H_KRNL_SKILL
 #define H_KRNL_SKILL
 
-#include <skill.h>
+#include "skill.h"
 
 struct race;
 struct unit;
@@ -14,16 +14,16 @@ extern "C" {
 #endif
 
     typedef struct skill {
-        int id : 8;
+        enum skill_t id : 8;
         int level : 8;
         int weeks : 8;
         int old : 8;
     } skill;
 
     typedef int(*skillmod_fun) (const struct unit *, const struct region *,
-        skill_t, int);
+            enum skill_t, int);
     typedef struct skillmod_data {
-        skill_t skill;
+        enum skill_t skill;
         skillmod_fun special;
         double multiplier;
         int number;
@@ -32,14 +32,16 @@ extern "C" {
 
     extern struct attrib_type at_skillmod;
 
-    int skillmod(const struct unit *u, const struct region *r, skill_t sk, int value);
-    struct attrib *make_skillmod(skill_t sk, skillmod_fun special, double multiplier, int bonus);
+    int skillmod(const struct unit *u, const struct region *r,
+            enum skill_t sk, int value);
+    struct attrib *make_skillmod(enum skill_t sk, skillmod_fun special,
+            double multiplier, int bonus);
 
     int level_days(int level);
     int level(int days);
 
 #define skill_level(level) (level)
-    void increase_skill(struct unit * u, skill_t sk, int weeks);
+    void increase_skill(struct unit * u, enum skill_t sk, int weeks);
     void reduce_skill(struct unit *u, skill * sv, int weeks);
     int skill_weeks(int level);
     int skill_compare(const skill * sk, const skill * sc);
diff --git a/src/kernel/unit.h b/src/kernel/unit.h
index 3961e870f..0b47ca4e7 100644
--- a/src/kernel/unit.h
+++ b/src/kernel/unit.h
@@ -16,6 +16,7 @@ extern "C" {
     struct sc_mage;
     struct gamedata;
     struct item_type;
+    enum skill_t;
 
 #define MAXUNITS 1048573       /* should be prime for hashing. 524287 was >90% full */
 
@@ -125,21 +126,21 @@ extern "C" {
         int alias);
 
     const char *u_description(const unit * u, const struct locale *lang);
-    struct skill *add_skill(struct unit *u, skill_t id);
-    void remove_skill(struct unit *u, skill_t sk);
-    struct skill *unit_skill(const struct unit *u, skill_t id);
-    bool has_skill(const unit * u, skill_t sk);
-    int effskill(const struct unit *u, skill_t sk, const struct region *r);
+    struct skill *add_skill(struct unit *u, enum skill_t id);
+    void remove_skill(struct unit *u, enum skill_t sk);
+    struct skill *unit_skill(const struct unit *u, enum skill_t id);
+    bool has_skill(const unit * u, enum skill_t sk);
+    int effskill(const struct unit *u, enum skill_t sk, const struct region *r);
 
-    void set_level(struct unit *u, skill_t id, int level);
-    int get_level(const struct unit *u, skill_t id);
+    void set_level(struct unit *u, enum skill_t id, int level);
+    int get_level(const struct unit *u, enum skill_t id);
     void transfermen(struct unit *src, struct unit *dst, int n);
     void clone_men(const struct unit *src, struct unit *dst, int n); /* like transfer, but do not subtract from src */
 
     int eff_skill(const struct unit *u, const struct skill *sv, const struct region *r);
-    int effskill_study(const struct unit *u, skill_t sk);
+    int effskill_study(const struct unit *u, enum skill_t sk);
 
-    int get_modifier(const struct unit *u, skill_t sk, int level,
+    int get_modifier(const struct unit *u, enum skill_t sk, int level,
         const struct region *r, bool noitem);
     int remove_unit(struct unit **ulist, struct unit *u);
     void leave_region(struct unit* u);
@@ -237,7 +238,7 @@ extern "C" {
     bool has_horses(const struct unit *u);
     int maintenance_cost(const struct unit *u);
     bool has_limited_skills(const struct unit *u);
-    bool is_limited_skill(skill_t sk);
+    bool is_limited_skill(enum skill_t sk);
 
 #ifdef __cplusplus
 }
diff --git a/src/magic.c b/src/magic.c
index 989956a4d..682cf4dce 100644
--- a/src/magic.c
+++ b/src/magic.c
@@ -6,7 +6,6 @@
 #include "contact.h"
 #include "helpers.h"
 #include "laws.h"
-#include "skill.h"
 #include "spells.h"
 #include "study.h"
 
@@ -41,6 +40,7 @@
 #include <kernel/race.h>
 #include <kernel/region.h>
 #include <kernel/ship.h>
+#include "kernel/skill.h"
 #include <kernel/spell.h>
 #include <kernel/spellbook.h>
 #include <kernel/terrain.h>
diff --git a/src/monsters.test.c b/src/monsters.test.c
index e80e15faa..caae8192e 100644
--- a/src/monsters.test.c
+++ b/src/monsters.test.c
@@ -1,6 +1,12 @@
 #include <platform.h>
 #include <stdlib.h>
 
+#include "monsters.h"
+#include "guard.h"
+#include "reports.h"
+#include "study.h"
+
+#include <kernel/attrib.h>
 #include <kernel/config.h>
 #include <kernel/faction.h>
 #include <kernel/item.h>
@@ -9,16 +15,10 @@
 #include <kernel/region.h>
 #include <kernel/region.h>
 #include <kernel/ship.h>
-#include <kernel/terrain.h>
-#include <kernel/unit.h>
+#include "kernel/skill.h"
+#include "kernel/terrain.h"
+#include "kernel/unit.h"
 
-#include "monsters.h"
-#include "guard.h"
-#include "reports.h"
-#include "skill.h"
-#include "study.h"
-
-#include <kernel/attrib.h>
 #include <util/language.h>
 #include <util/message.h>
 #include <util/nrmessage.h>
diff --git a/src/move.c b/src/move.c
index 0273071d2..f5b1b54b5 100644
--- a/src/move.c
+++ b/src/move.c
@@ -2,6 +2,22 @@
 #include <platform.h>
 #endif
 
+#include "alchemy.h"
+#include "contact.h"
+#include "direction.h"
+#include "guard.h"
+#include "laws.h"
+#include "lighthouse.h"
+#include "monsters.h"
+#include "move.h"
+#include "piracy.h"
+#include "reports.h"
+#include "study.h"
+#include "spy.h"
+#include "teleport.h"
+#include "travelthru.h"
+#include "vortex.h"
+
 /* kernel includes */
 #include "kernel/ally.h"
 #include "kernel/attrib.h"
@@ -21,24 +37,11 @@
 #include "kernel/region.h"
 #include "kernel/render.h"
 #include "kernel/ship.h"
+#include "kernel/skill.h"
 #include "kernel/terrain.h"
 #include "kernel/terrainid.h"
 #include "kernel/unit.h"
 
-#include "alchemy.h"
-#include "contact.h"
-#include "guard.h"
-#include "laws.h"
-#include "lighthouse.h"
-#include "monsters.h"
-#include "move.h"
-#include "piracy.h"
-#include "reports.h"
-#include "study.h"
-#include "spy.h"
-#include "travelthru.h"
-#include "vortex.h"
-
 #include <spells/flyingship.h>
 #include <spells/unitcurse.h>
 #include <spells/regioncurse.h>
@@ -50,10 +53,6 @@
 #include <attributes/stealth.h>
 #include <attributes/targetregion.h>
 
-#include "teleport.h"
-#include "direction.h"
-#include "skill.h"
-
 /* util includes */
 #include <util/base36.h>
 #include <util/language.h>
diff --git a/src/steal.c b/src/steal.c
index 1213ab43e..a3c8c0cad 100644
--- a/src/steal.c
+++ b/src/steal.c
@@ -5,7 +5,6 @@
 #include "economy.h"
 
 #include "laws.h"
-#include "skill.h"
 #include "study.h"
 
 #include <util/message.h>
@@ -19,6 +18,7 @@
 #include <kernel/pool.h>
 #include <kernel/race.h>
 #include <kernel/region.h>
+#include "kernel/skill.h"
 #include <kernel/terrain.h>
 #include <kernel/unit.h>
 
diff --git a/src/study.h b/src/study.h
index dcdc354ca..dba201bc8 100644
--- a/src/study.h
+++ b/src/study.h
@@ -1,8 +1,8 @@
 #ifndef H_KRNL_STUDY
 #define H_KRNL_STUDY
 
-#include "skill.h"
 #include <kernel/types.h>
+#include <stdbool.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -10,6 +10,7 @@ extern "C" {
 
     struct unit;
     struct selist;
+    enum skill_t;
 
 #define STUDYDAYS 30
 #define TEACHNUMBER 10
@@ -27,18 +28,21 @@ extern "C" {
     int study_cmd(struct unit *u, struct order *ord);
 
     magic_t getmagicskill(const struct locale *lang);
-    skill_t getskill(const struct locale *lang);
+    enum skill_t getskill(const struct locale *lang);
     bool is_migrant(struct unit *u);
-    int study_cost(struct unit *u, skill_t sk);
-    bool check_student(const struct unit *u, struct order *ord, skill_t sk);
+    int study_cost(struct unit *u, enum skill_t sk);
+    bool check_student(const struct unit *u, struct order *ord,
+            enum skill_t sk);
 
-    typedef void(*learn_fun)(struct unit *u, skill_t sk, int days);
+    typedef void(*learn_fun)(struct unit *u, enum skill_t sk, int days);
 
-    int learn_skill(struct unit *u, skill_t sk, int days, int studycost);
-    void change_skill_days(struct unit *u, skill_t sk, int days);
+    int learn_skill(struct unit *u, enum skill_t sk, int days,
+            int studycost);
+    void change_skill_days(struct unit *u, enum skill_t sk, int days);
 
-    void produceexp(struct unit *u, skill_t sk, int n);
-    void produceexp_ex(struct unit *u, skill_t sk, int n, learn_fun learn);
+    void produceexp(struct unit *u, enum skill_t sk, int n);
+    void produceexp_ex(struct unit *u, enum skill_t sk, int n,
+            learn_fun learn);
 
     void demon_skillchange(struct unit *u);
 
diff --git a/src/teleport.c b/src/teleport.c
index 486b7bd34..6241ad354 100644
--- a/src/teleport.c
+++ b/src/teleport.c
@@ -6,6 +6,7 @@
 #include "kernel/unit.h"
 #include "kernel/region.h"
 #include "kernel/race.h"
+#include "kernel/skill.h"
 #include "kernel/terrain.h"
 #include "kernel/faction.h"
 #include "kernel/plane.h"
@@ -15,7 +16,6 @@
 #include "util/stats.h"
 #include "util/rng.h"
 
-#include "skill.h"
 #include "monsters.h"
 
 /* libc includes */