diff --git a/c/sedona-proj/src/st_transform.rs b/c/sedona-proj/src/st_transform.rs
index cefcce84d..51a268245 100644
--- a/c/sedona-proj/src/st_transform.rs
+++ b/c/sedona-proj/src/st_transform.rs
@@ -26,6 +26,7 @@ use sedona_geometry::transform::{transform, CachingCrsEngine, CrsEngine, CrsTran
use sedona_geometry::wkb_factory::WKB_MIN_PROBABLE_BYTES;
use sedona_schema::crs::deserialize_crs;
use sedona_schema::datatypes::{Edges, SedonaType};
+use sedona_schema::matchers::ArgMatcher;
use std::cell::OnceCell;
use std::rc::Rc;
use std::sync::{Arc, RwLock};
@@ -135,7 +136,9 @@ fn define_arg_indexes(arg_types: &[SedonaType], indexes: &mut TransformArgIndexe
indexes.first_crs = 1;
for (i, arg_type) in arg_types.iter().enumerate().skip(2) {
- if *arg_type == SedonaType::Arrow(DataType::Utf8) {
+ if ArgMatcher::is_numeric().match_type(arg_type)
+ || ArgMatcher::is_string().match_type(arg_type)
+ {
indexes.second_crs = Some(i);
} else if *arg_type == SedonaType::Arrow(DataType::Boolean) {
indexes.lenient = Some(i);
@@ -154,17 +157,41 @@ impl SedonaScalarKernel for STTransform {
arg_types: &[SedonaType],
scalar_args: &[Option<&ScalarValue>],
) -> Result