diff --git a/active-crust/fault/TX/Caballo.geojson b/active-crust/fault/TX/Caballo/features/Caballo.geojson
similarity index 53%
rename from active-crust/fault/TX/Caballo.geojson
rename to active-crust/fault/TX/Caballo/features/Caballo.geojson
index b188f7e380eb33e0f628d677702bcdbf654f37de..818392e4c9a53da4334c7de424cee71d816ba433 100644
--- a/active-crust/fault/TX/Caballo.geojson
+++ b/active-crust/fault/TX/Caballo/features/Caballo.geojson
@@ -19,24 +19,8 @@
     "lower-depth": 15.0,
     "dip": 50.0,
     "rake": -90.0,
+    "rate": 0.11,
     "rate-type": "VERTICAL_SLIP",
-    "length": 42.35434,
-    "rate-map": {
-      "BIRD": {
-        "rate": 0.053623111018328465,
-        "gr-a-value": 0.86471,
-        "single-rate": 5.44E-5
-      },
-      "GEO": {
-        "rate": 0.1375,
-        "gr-a-value": 0.666625,
-        "single-rate": 3.175E-5
-      },
-      "ZENG": {
-        "rate": 0.030641777724759123,
-        "gr-a-value": 0.62167,
-        "single-rate": 3.11E-5
-      }
-    }
+    "length": 42.35434
   }
 }
diff --git "a/active-crust/fault/TX/Caballo/geodetic/--\316\264--/rupture-set.json" "b/active-crust/fault/TX/Caballo/geodetic/--\316\264--/rupture-set.json"
new file mode 100644
index 0000000000000000000000000000000000000000..f0c7a9520bc0ac6f711d135115c0b302cae0b664
--- /dev/null
+++ "b/active-crust/fault/TX/Caballo/geodetic/--\316\264--/rupture-set.json"
@@ -0,0 +1,5 @@
+{
+  "name": "Caballo",
+  "id": 2603,
+  "mfd-tree": "caballo-geodetic"
+}
diff --git a/active-crust/fault/TX/Caballo/geodetic/source-tree.json b/active-crust/fault/TX/Caballo/geodetic/source-tree.json
new file mode 100644
index 0000000000000000000000000000000000000000..7e181294dcd6d58d7a3db21d95b32b5695c0738b
--- /dev/null
+++ b/active-crust/fault/TX/Caballo/geodetic/source-tree.json
@@ -0,0 +1,12 @@
+[
+  {
+    "id": "δ+15°",
+    "weight": 0.2
+  },  {
+    "id": "--δ--",
+    "weight": 0.6
+  },  {
+    "id": "δ-15°",
+    "weight": 0.2
+  }
+]
diff --git "a/active-crust/fault/TX/Caballo/geodetic/\316\264+15\302\260/rupture-set.json" "b/active-crust/fault/TX/Caballo/geodetic/\316\264+15\302\260/rupture-set.json"
new file mode 100644
index 0000000000000000000000000000000000000000..ff0525a94fdfd053727e67cef3bc8402a69a8e04
--- /dev/null
+++ "b/active-crust/fault/TX/Caballo/geodetic/\316\264+15\302\260/rupture-set.json"
@@ -0,0 +1,8 @@
+{
+  "name": "Caballo",
+  "id": 2603,
+  "mfd-tree": "caballo-geodetic",
+  "properties": {
+    "dip": 65.0
+  }
+}
diff --git "a/active-crust/fault/TX/Caballo/geodetic/\316\264-15\302\260/rupture-set.json" "b/active-crust/fault/TX/Caballo/geodetic/\316\264-15\302\260/rupture-set.json"
new file mode 100644
index 0000000000000000000000000000000000000000..a06ede3b24927e6e87d4153a3d94d02784e6d35f
--- /dev/null
+++ "b/active-crust/fault/TX/Caballo/geodetic/\316\264-15\302\260/rupture-set.json"
@@ -0,0 +1,8 @@
+{
+  "name": "Caballo",
+  "id": 2603,
+  "mfd-tree": "caballo-geodetic",
+  "properties": {
+    "dip": 35.0
+  }
+}
diff --git "a/active-crust/fault/TX/Caballo/geologic/scaled/--\316\264--/rupture-set.json" "b/active-crust/fault/TX/Caballo/geologic/scaled/--\316\264--/rupture-set.json"
new file mode 100644
index 0000000000000000000000000000000000000000..31927cf406284abdba4d41d7fd17e44a33f7a43c
--- /dev/null
+++ "b/active-crust/fault/TX/Caballo/geologic/scaled/--\316\264--/rupture-set.json"
@@ -0,0 +1,5 @@
+{
+  "name": "Caballo",
+  "id": 2603,
+  "mfd-tree": "caballo-geologic"
+}
diff --git a/active-crust/fault/TX/Caballo/geologic/scaled/source-tree.json b/active-crust/fault/TX/Caballo/geologic/scaled/source-tree.json
new file mode 100644
index 0000000000000000000000000000000000000000..7e181294dcd6d58d7a3db21d95b32b5695c0738b
--- /dev/null
+++ b/active-crust/fault/TX/Caballo/geologic/scaled/source-tree.json
@@ -0,0 +1,12 @@
+[
+  {
+    "id": "δ+15°",
+    "weight": 0.2
+  },  {
+    "id": "--δ--",
+    "weight": 0.6
+  },  {
+    "id": "δ-15°",
+    "weight": 0.2
+  }
+]
diff --git "a/active-crust/fault/TX/Caballo/geologic/scaled/\316\264+15\302\260/rupture-set.json" "b/active-crust/fault/TX/Caballo/geologic/scaled/\316\264+15\302\260/rupture-set.json"
new file mode 100644
index 0000000000000000000000000000000000000000..63a9fa3b66134e022de20d7c9cd3c90832b1ccb1
--- /dev/null
+++ "b/active-crust/fault/TX/Caballo/geologic/scaled/\316\264+15\302\260/rupture-set.json"
@@ -0,0 +1,8 @@
+{
+  "name": "Caballo",
+  "id": 2603,
+  "mfd-tree": "caballo-geologic",
+  "properties": {
+    "dip": 65.0
+  }
+}
diff --git "a/active-crust/fault/TX/Caballo/geologic/scaled/\316\264-15\302\260/rupture-set.json" "b/active-crust/fault/TX/Caballo/geologic/scaled/\316\264-15\302\260/rupture-set.json"
new file mode 100644
index 0000000000000000000000000000000000000000..cd437e6d2370eefdce44a6342df4c89732bbf85b
--- /dev/null
+++ "b/active-crust/fault/TX/Caballo/geologic/scaled/\316\264-15\302\260/rupture-set.json"
@@ -0,0 +1,8 @@
+{
+  "name": "Caballo",
+  "id": 2603,
+  "mfd-tree": "caballo-geologic",
+  "properties": {
+    "dip": 35.0
+  }
+}
diff --git a/active-crust/fault/TX/Caballo/geologic/source-group.json b/active-crust/fault/TX/Caballo/geologic/source-group.json
new file mode 100644
index 0000000000000000000000000000000000000000..58775eacf50f3769e6220d913c0e12f06e366923
--- /dev/null
+++ b/active-crust/fault/TX/Caballo/geologic/source-group.json
@@ -0,0 +1,6 @@
+[
+  {
+    "id": "scaled",
+    "scale": 1.25
+  }
+]
diff --git a/active-crust/fault/TX/Caballo/mfd-map.json b/active-crust/fault/TX/Caballo/mfd-map.json
new file mode 100644
index 0000000000000000000000000000000000000000..3c5615013501e08068d0d4cefac15540d3e3c624
--- /dev/null
+++ b/active-crust/fault/TX/Caballo/mfd-map.json
@@ -0,0 +1,36 @@
+{
+  "caballo-geodetic": [
+    {
+      "id": "BIRD : full-rupture",
+      "weight": 0.3335,
+      "value": { "type": "SINGLE", "m": 6.97, "rate": 5.44E-5 }
+    },
+    {
+      "id": "BIRD : partial-rupture",
+      "weight": 0.1665,
+      "value": { "type": "GR", "a": 0.86471, "b": 0.8, "mMin": 6.5, "mMax": 6.97, "Δm": 0.1175 }
+    },
+    {
+      "id": "ZENG : full-rupture",
+      "weight": 0.3335,
+      "value": { "type": "SINGLE", "m": 6.97, "rate": 3.11E-5 }
+    },
+    {
+      "id": "ZENG : partial-rupture",
+      "weight": 0.1665,
+      "value": { "type": "GR", "a": 0.62167, "b": 0.8, "mMin": 6.5, "mMax": 6.97, "Δm": 0.1175 }
+    }
+  ],
+  "caballo-geologic": [
+    {
+      "id": "GEO : full-rupture",
+      "weight": 0.667,
+      "value": { "type": "SINGLE", "m": 6.97, "rate": 2.54E-5 }
+    },
+    {
+      "id": "GEO : partial-rupture",
+      "weight": 0.333,
+      "value": { "type": "GR", "a": 0.5333, "b": 0.8, "mMin": 6.5, "mMax": 6.97, "Δm": 0.1175 }
+    }
+  ]
+}
diff --git a/active-crust/fault/TX/Caballo/source-tree.json b/active-crust/fault/TX/Caballo/source-tree.json
new file mode 100644
index 0000000000000000000000000000000000000000..92364795816d983be13e6cccef8a5bf9d459d197
--- /dev/null
+++ b/active-crust/fault/TX/Caballo/source-tree.json
@@ -0,0 +1,10 @@
+[
+  {
+    "id": "geodetic",
+    "weight": 0.2
+  },
+  {
+    "id": "geologic",
+    "weight": 0.8
+  }
+]
diff --git a/active-crust/fault/TX/Caballo/tree-info.json b/active-crust/fault/TX/Caballo/tree-info.json
new file mode 100644
index 0000000000000000000000000000000000000000..e8f8d87affb85dc336c8beaea1ddca29bc7d2fed
--- /dev/null
+++ b/active-crust/fault/TX/Caballo/tree-info.json
@@ -0,0 +1,3 @@
+{
+  "id": 2603
+}