diff --git a/dragons/main.lua b/dragons/main.lua
index ee5a699bd162463498dafc445165b582a4f00288..19a24002c2f999bea3d57c375aff815468c133ed 100644
--- a/dragons/main.lua
+++ b/dragons/main.lua
@@ -2,66 +2,10 @@
 
 dmobs.dragon = {}
 
-dmobs.dragon.step_custom = function(self, dtime)
-	if self.driver then
-		lib_mount.drive(self, dtime, "walk", "stand", true)
-		if self.state == "attack" then
-			self.state = nil
-		end
-		return false
-	end
-	return true
-end
+dofile(minetest.get_modpath("dmobs").."/dragons/piloting.lua")
 
 local tamed_dragons = {}
 
-dmobs.dragon.ride = function(self, clicker)
-	if self.tamed and self.owner == clicker:get_player_name() then
-		local inv = clicker:get_inventory()
-		
-		if self.driver and clicker == self.driver then
-			object_detach(self, clicker, {x=1, y=0, z=1})
-			
-			if inv:room_for_item("main", "mobs:saddle") then
-					inv:add_item("main", "mobs:saddle")
-			else
-					minetest.add_item(clicker.getpos(), "mobs:saddle")
-			end
-			
-		elseif not self.driver then
-			if clicker:get_wielded_item():get_name() == "mobs:saddle" then
-				object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
-				inv:remove_item("main", "mobs:saddle")
-			end
-		end
-	end
-end
-
-
-dmobs.dragon.on_rc = function(self, clicker)
-	if not clicker or not clicker:is_player() then
-		return
-	end
-	if mobs:feed_tame(self, clicker, 1, false, false) then
-		return
-	end
-	dmobs.dragon.ride(self, clicker)
-end
-
-dmobs.dragon.do_custom = function(self, dtime)
-	if self.driver then
-		object_fly(self, dtime, 10, true, "dmobs:fire_plyr", "walk", "stand")
-		
-		if self.state == "attack" then
-			self.state = "idle"
-		end
-		
-		return false
-	end
-	return true
-end
-
-
 --items and tools
 
 minetest.register_craftitem("dmobs:dragon_gem_lightning", {
diff --git a/dragons/piloting.lua b/dragons/piloting.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d2b6da7ba65c5448810ea05160b2dc4c12ed94da
--- /dev/null
+++ b/dragons/piloting.lua
@@ -0,0 +1,61 @@
+
+if not dmobs.dragon then
+	dmobs.dragon = {}
+end
+
+dmobs.dragon.step_custom = function(self, dtime)
+	if self.driver then
+		object_fly(self, dtime, 10, true, "dmobs:fire_plyr", "walk", "stand")
+		if self.state == "attack" then
+			self.state = nil
+		end
+		return false
+	end
+	return true
+end
+
+dmobs.dragon.ride = function(self, clicker)
+	if self.tamed and self.owner == clicker:get_player_name() then
+		local inv = clicker:get_inventory()
+		
+		if self.driver and clicker == self.driver then
+			object_detach(self, clicker, {x=1, y=0, z=1})
+			
+			if inv:room_for_item("main", "mobs:saddle") then
+					inv:add_item("main", "mobs:saddle")
+			else
+					minetest.add_item(clicker.getpos(), "mobs:saddle")
+			end
+			
+		elseif not self.driver then
+			if clicker:get_wielded_item():get_name() == "mobs:saddle" then
+				object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
+				inv:remove_item("main", "mobs:saddle")
+			end
+		end
+	end
+end
+
+
+dmobs.dragon.on_rc = function(self, clicker)
+	if not clicker or not clicker:is_player() then
+		return
+	end
+	if mobs:feed_tame(self, clicker, 1, false, false) then
+		return
+	end
+	dmobs.dragon.ride(self, clicker)
+end
+
+dmobs.dragon.do_custom = function(self, dtime)
+	if self.driver then
+		object_fly(self, dtime, 10, true, "dmobs:fire_plyr", "walk", "stand")
+		
+		if self.state == "attack" then
+			self.state = "idle"
+		end
+		
+		return false
+	end
+	return true
+end