diff --git a/Source/Common/Defs/DistanceExtension.cs b/Source/Common/Defs/DistanceExtension.cs
new file mode 100644
index 0000000..48d82e6
--- /dev/null
+++ b/Source/Common/Defs/DistanceExtension.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace RJW_Genes
+{
+
+ ///
+ /// Small Extension that covers distances for Genes.
+ /// This allows to set distance in the XMLs.
+ /// The distance is measured in tiles, so a distance of ~25 means 25 tiles away from the pawn in any direction.
+ ///
+ public class DistanceExtension : DefModExtension
+ {
+ public int Distance;
+ }
+}
diff --git a/Source/Common/Defs/ModExtensionHelper.cs b/Source/Common/Defs/ModExtensionHelper.cs
new file mode 100644
index 0000000..e8fc545
--- /dev/null
+++ b/Source/Common/Defs/ModExtensionHelper.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace RJW_Genes
+{
+ internal class ModExtensionHelper
+ {
+
+ public static int GetDistanceFromModExtension(GeneDef defOf, int fallback)
+ {
+ DistanceExtension distanceExt = defOf.GetModExtension();
+
+ int potentialDistance = distanceExt?.Distance ?? fallback;
+
+ if (potentialDistance > 0)
+ {
+ return potentialDistance;
+ } else {
+ ModLog.Warning($"Retrieved a bad distance ({potentialDistance}) reading the RJW_Genes.DistanceExtension for {defOf.defName}");
+ return 1;
+ }
+ }
+
+
+ public static int GetTickIntervalFromModExtension(GeneDef defOf, int fallback)
+ {
+ TickIntervalExtension tickExt = defOf.GetModExtension();
+
+ int potentialTickInterval = tickExt?.tickInterval ?? fallback;
+
+ if (potentialTickInterval > 0)
+ {
+ return potentialTickInterval;
+ }
+ else
+ {
+ ModLog.Warning($"Retrieved a bad distance ({potentialTickInterval}) reading the RJW_Genes.DistanceExtension for {defOf.defName}");
+ return 1;
+ }
+ }
+
+
+ }
+}
diff --git a/Source/Common/Defs/TickIntervalExtension.cs b/Source/Common/Defs/TickIntervalExtension.cs
new file mode 100644
index 0000000..3e8184c
--- /dev/null
+++ b/Source/Common/Defs/TickIntervalExtension.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Verse;
+
+namespace RJW_Genes
+{
+ ///
+ /// General DefModExtension to cover various genes that need to tick regularly.
+ /// Defining it like this allows to adjust things in XML.
+ ///
+ public class TickIntervalExtension : DefModExtension
+ {
+ public int tickInterval;
+ }
+}