diff --git a/README.md b/README.md
index 7f2c6a0..8d1edf6 100644
--- a/README.md
+++ b/README.md
@@ -56,4 +56,56 @@ placeholderapi-placeholders:
 
 > allowflight=true
 
-___
\ No newline at end of file
+___
+#### TownyAdvanced
+#### `towny:in-town`
+Returns true if player's location within a Town
+
+e.g.
+
+> towny:in-town=false
+
+#### `towny:town`
+Returns name of the town (if any) at a player's current location
+
+e.g.
+
+> towny:town=
+>
+> towny:town=Atlantis
+
+**config:**
+```yaml
+towny-town: true
+```
+
+#### `towny:in-nation`
+Returns true if player's location within a Nation
+
+e.g.
+
+> towny:in-nation=true
+
+#### `towny:town`
+Returns name of the nation (if any) at a player's current location
+
+e.g.
+
+> towny:nation=Rome
+
+**config:**
+```yaml
+towny-nation: true
+```
+
+#### `towny:in-wilds`
+Returns true if player's location in the wilderness
+
+e.g.
+
+> towny:in-wilds=false
+
+**config:**
+```yaml
+towny-wilds: true
+```
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 2b810f6..780d0d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,6 +108,12 @@
             2.9.2
             provided
         
+        
+            com.github.TownyAdvanced
+            Towny
+            0.96.2.0
+            provided
+        
     
 
     
@@ -115,6 +121,10 @@
             luck-repo
             https://repo.lucko.me/
         
+        
+            jitpack.io
+            https://jitpack.io
+        
     
 
 
\ No newline at end of file
diff --git a/src/main/java/me/lucko/extracontexts/ExtraContextsPlugin.java b/src/main/java/me/lucko/extracontexts/ExtraContextsPlugin.java
index fd905df..3d55f93 100644
--- a/src/main/java/me/lucko/extracontexts/ExtraContextsPlugin.java
+++ b/src/main/java/me/lucko/extracontexts/ExtraContextsPlugin.java
@@ -5,6 +5,9 @@
 import me.lucko.extracontexts.calculators.HasPlayedBeforeCalculator;
 import me.lucko.extracontexts.calculators.PlaceholderApiCalculator;
 import me.lucko.extracontexts.calculators.TeamCalculator;
+import me.lucko.extracontexts.calculators.TownyNationCalculator;
+import me.lucko.extracontexts.calculators.TownyTownCalculator;
+import me.lucko.extracontexts.calculators.TownyWildsCalculator;
 import me.lucko.extracontexts.calculators.WhitelistedCalculator;
 import me.lucko.extracontexts.calculators.WorldGuardFlagCalculator;
 import me.lucko.extracontexts.calculators.WorldGuardRegionCalculator;
@@ -55,6 +58,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
     }
 
     private void setup() {
+        register("towny-town", "Towny", TownyTownCalculator::new);
+        register("towny-nation", "Towny", TownyNationCalculator::new);
+        register("towny-wilds", "Towny", TownyWildsCalculator::new);
         register("worldguard-region", "WorldGuard", WorldGuardRegionCalculator::new);
         register("worldguard-flag", "WorldGuard", WorldGuardFlagCalculator::new);
         register("gamemode", null, GamemodeCalculator::new);
diff --git a/src/main/java/me/lucko/extracontexts/calculators/TownyNationCalculator.java b/src/main/java/me/lucko/extracontexts/calculators/TownyNationCalculator.java
new file mode 100644
index 0000000..4440463
--- /dev/null
+++ b/src/main/java/me/lucko/extracontexts/calculators/TownyNationCalculator.java
@@ -0,0 +1,57 @@
+package me.lucko.extracontexts.calculators;
+
+import com.palmergames.bukkit.towny.TownyAPI;
+import com.palmergames.bukkit.towny.exceptions.NotRegisteredException;
+import com.palmergames.bukkit.towny.object.Town;
+import com.palmergames.bukkit.towny.object.TownBlock;
+import net.luckperms.api.context.ContextCalculator;
+import net.luckperms.api.context.ContextConsumer;
+import net.luckperms.api.context.ContextSet;
+import net.luckperms.api.context.ImmutableContextSet;
+import org.bukkit.entity.Player;
+
+public class TownyNationCalculator implements ContextCalculator {
+    private static final String IN_NATION_KEY = "towny:in-nation";
+    private static final String NATION_KEY = "towny:nation";
+
+    private final TownyAPI towny = TownyAPI.getInstance();
+
+    @Override
+    public void calculate(Player player, ContextConsumer contextConsumer) {
+        final TownBlock townBlock = towny.getTownBlock(player.getLocation());
+        if (townBlock == null) {
+            contextConsumer.accept(IN_NATION_KEY, "false");
+        } else {
+            if (townBlock.hasTown()) {
+                try {
+                    final Town town = townBlock.getTown();
+                    if (town.hasNation()) {
+                        contextConsumer.accept(IN_NATION_KEY, "true");
+                        try {
+                            contextConsumer.accept(NATION_KEY, town.getNation().getName());
+                        } catch (NotRegisteredException e) {
+                            e.printStackTrace();
+                        }
+                    } else {
+                        contextConsumer.accept(IN_NATION_KEY, "false");
+                    }
+                } catch (NotRegisteredException e) {
+                    e.printStackTrace();
+                }
+            } else {
+                contextConsumer.accept(IN_NATION_KEY, "false");
+            }
+        }
+    }
+
+    @Override
+    public ContextSet estimatePotentialContexts() {
+        final ImmutableContextSet.Builder builder = ImmutableContextSet.builder();
+        for (String nationKey : towny.getDataSource().getNationsKeys()) {
+            builder.add(NATION_KEY, nationKey);
+        }
+        builder.add(IN_NATION_KEY, "true");
+        builder.add(IN_NATION_KEY, "false");
+        return builder.build();
+    }
+}
diff --git a/src/main/java/me/lucko/extracontexts/calculators/TownyTownCalculator.java b/src/main/java/me/lucko/extracontexts/calculators/TownyTownCalculator.java
new file mode 100644
index 0000000..2321e59
--- /dev/null
+++ b/src/main/java/me/lucko/extracontexts/calculators/TownyTownCalculator.java
@@ -0,0 +1,47 @@
+package me.lucko.extracontexts.calculators;
+
+import com.palmergames.bukkit.towny.TownyAPI;
+import com.palmergames.bukkit.towny.exceptions.NotRegisteredException;
+import com.palmergames.bukkit.towny.object.TownBlock;
+import net.luckperms.api.context.ContextCalculator;
+import net.luckperms.api.context.ContextConsumer;
+import net.luckperms.api.context.ContextSet;
+import net.luckperms.api.context.ImmutableContextSet;
+import org.bukkit.entity.Player;
+
+public class TownyTownCalculator implements ContextCalculator {
+    private static final String IN_TOWN_KEY = "towny:in-town";
+    private static final String TOWN_KEY = "towny:town";
+
+    private final TownyAPI towny = TownyAPI.getInstance();
+
+    @Override
+    public void calculate(Player player, ContextConsumer contextConsumer) {
+        final TownBlock townBlock = towny.getTownBlock(player.getLocation());
+        if (townBlock == null) {
+            contextConsumer.accept(IN_TOWN_KEY, "false");
+        } else {
+            if (townBlock.hasTown()) {
+                contextConsumer.accept(IN_TOWN_KEY, "true");
+                try {
+                    contextConsumer.accept(TOWN_KEY, townBlock.getTown().getName());
+                } catch (NotRegisteredException e) {
+                    e.printStackTrace();
+                }
+            } else {
+                contextConsumer.accept(IN_TOWN_KEY, "false");
+            }
+        }
+    }
+
+    @Override
+    public ContextSet estimatePotentialContexts() {
+        final ImmutableContextSet.Builder builder = ImmutableContextSet.builder();
+        for (String townKey : towny.getDataSource().getTownsKeys()) {
+            builder.add(TOWN_KEY, townKey);
+        }
+        builder.add(IN_TOWN_KEY, "true");
+        builder.add(IN_TOWN_KEY, "false");
+        return builder.build();
+    }
+}
diff --git a/src/main/java/me/lucko/extracontexts/calculators/TownyWildsCalculator.java b/src/main/java/me/lucko/extracontexts/calculators/TownyWildsCalculator.java
new file mode 100644
index 0000000..6d5d58c
--- /dev/null
+++ b/src/main/java/me/lucko/extracontexts/calculators/TownyWildsCalculator.java
@@ -0,0 +1,27 @@
+package me.lucko.extracontexts.calculators;
+
+import com.palmergames.bukkit.towny.TownyAPI;
+import net.luckperms.api.context.ContextCalculator;
+import net.luckperms.api.context.ContextConsumer;
+import net.luckperms.api.context.ContextSet;
+import net.luckperms.api.context.ImmutableContextSet;
+import org.bukkit.entity.Player;
+
+public class TownyWildsCalculator implements ContextCalculator {
+    private static final String IN_WILDS_KEY = "towny:in-wilds";
+
+    private final TownyAPI towny = TownyAPI.getInstance();
+
+    @Override
+    public void calculate(Player player, ContextConsumer contextConsumer) {
+        contextConsumer.accept(IN_WILDS_KEY, towny.isWilderness(player.getLocation()) ? "true" : "false");
+    }
+
+    @Override
+    public ContextSet estimatePotentialContexts() {
+        final ImmutableContextSet.Builder builder = ImmutableContextSet.builder();
+        builder.add(IN_WILDS_KEY, "true");
+        builder.add(IN_WILDS_KEY, "false");
+        return builder.build();
+    }
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index e937259..c5113bd 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -52,3 +52,20 @@ has-played-before: false
 placeholderapi: false
 placeholderapi-placeholders:
   allowflight: "%player_allow_flight%"
+
+### Addition: Towny Contexts
+# Provides the 'towny:town' and 'towny:in-town' contexts.
+# Returns the name of the Town the player is currently in.
+#
+# e.g. towny:in-town=true and towny:town=townName
+towny-town: false
+# Provides the 'towny:town' and 'towny:in-nation' contexts.
+# Returns the name of the Nation the player is currently in.
+#
+# e.g. towny:in-nation=true and towny:nation=nationName
+towny-nation: false
+# Provides the 'towny:in-wilds' context.
+# Returns if the player is currently in the wilderness.
+#
+# e.g. towny:in-wilds=true
+towny-wilds: false
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index f7a56a5..9414c0b 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -3,7 +3,7 @@ version: ${project.version}
 author: Luck
 main: me.lucko.extracontexts.ExtraContextsPlugin
 depend: [LuckPerms]
-softdepend: [WorldGuard, PlaceholderAPI]
+softdepend: [WorldGuard, PlaceholderAPI, Towny]
 api-version: 1.13
 
 commands: