diff --git a/src/main/java/com/yahoo/sketches/hive/kll/GetCdfFromSketchUDF.java b/src/main/java/com/yahoo/sketches/hive/kll/GetCdfUDF.java
similarity index 97%
rename from src/main/java/com/yahoo/sketches/hive/kll/GetCdfFromSketchUDF.java
rename to src/main/java/com/yahoo/sketches/hive/kll/GetCdfUDF.java
index d846069..d0f25d5 100644
--- a/src/main/java/com/yahoo/sketches/hive/kll/GetCdfFromSketchUDF.java
+++ b/src/main/java/com/yahoo/sketches/hive/kll/GetCdfUDF.java
@@ -25,7 +25,7 @@
   + " to the ranks of the corresponding split points (fraction of input stream values that are less"
   + " than a split point). The last value is always 1."
   + " CDF can also be viewed as a cumulative version of PMF.")
-public class GetCdfFromSketchUDF extends UDF {
+public class GetCdfUDF extends UDF {
 
   /**
    * Returns a list of ranks (CDF) from a given sketch
diff --git a/src/main/java/com/yahoo/sketches/hive/kll/GetNFromSketchUDF.java b/src/main/java/com/yahoo/sketches/hive/kll/GetNUDF.java
similarity index 95%
rename from src/main/java/com/yahoo/sketches/hive/kll/GetNFromSketchUDF.java
rename to src/main/java/com/yahoo/sketches/hive/kll/GetNUDF.java
index e708d58..dbab18b 100644
--- a/src/main/java/com/yahoo/sketches/hive/kll/GetNFromSketchUDF.java
+++ b/src/main/java/com/yahoo/sketches/hive/kll/GetNUDF.java
@@ -14,7 +14,7 @@
 
 @Description(name = "GetN", value = "_FUNC_(sketch)",
 extended = " Returns the total number of observed input values (stream length) from a given KllFloatsSketch.")
-public class GetNFromSketchUDF extends UDF {
+public class GetNUDF extends UDF {
 
   /**
    * Returns N from a given sketch
diff --git a/src/main/java/com/yahoo/sketches/hive/kll/GetPmfFromSketchUDF.java b/src/main/java/com/yahoo/sketches/hive/kll/GetPmfUDF.java
similarity index 97%
rename from src/main/java/com/yahoo/sketches/hive/kll/GetPmfFromSketchUDF.java
rename to src/main/java/com/yahoo/sketches/hive/kll/GetPmfUDF.java
index e3fb773..13d2b19 100644
--- a/src/main/java/com/yahoo/sketches/hive/kll/GetPmfFromSketchUDF.java
+++ b/src/main/java/com/yahoo/sketches/hive/kll/GetPmfUDF.java
@@ -25,7 +25,7 @@
   + " to the fraction of the values that fell into one of those intervals."
   + " The definition of an interval is inclusive of the left split point and exclusive"
   + " of the right split point")
-public class GetPmfFromSketchUDF extends UDF {
+public class GetPmfUDF extends UDF {
 
   /**
    * Returns a list of fractions (PMF) from a given sketch
diff --git a/src/main/java/com/yahoo/sketches/hive/kll/GetQuantileFromSketchUDF.java b/src/main/java/com/yahoo/sketches/hive/kll/GetQuantileUDF.java
similarity index 95%
rename from src/main/java/com/yahoo/sketches/hive/kll/GetQuantileFromSketchUDF.java
rename to src/main/java/com/yahoo/sketches/hive/kll/GetQuantileUDF.java
index e05a7a1..b0d1509 100644
--- a/src/main/java/com/yahoo/sketches/hive/kll/GetQuantileFromSketchUDF.java
+++ b/src/main/java/com/yahoo/sketches/hive/kll/GetQuantileUDF.java
@@ -19,7 +19,7 @@
 + " For example, a fraction of 0.5 corresponds to 50th percentile, which is"
 + " the median value of the distribution (the number separating the higher half"
 + " of the probability distribution from the lower half).")
-public class GetQuantileFromSketchUDF extends UDF {
+public class GetQuantileUDF extends UDF {
 
   /**
    * Returns a quantile value from a given sketch
diff --git a/src/main/java/com/yahoo/sketches/hive/kll/GetQuantilesFromSketchUDF.java b/src/main/java/com/yahoo/sketches/hive/kll/GetQuantilesUDF.java
similarity index 96%
rename from src/main/java/com/yahoo/sketches/hive/kll/GetQuantilesFromSketchUDF.java
rename to src/main/java/com/yahoo/sketches/hive/kll/GetQuantilesUDF.java
index 5bc117c..1fee786 100644
--- a/src/main/java/com/yahoo/sketches/hive/kll/GetQuantilesFromSketchUDF.java
+++ b/src/main/java/com/yahoo/sketches/hive/kll/GetQuantilesUDF.java
@@ -22,7 +22,7 @@
   + " For example, a fraction of 0.5 corresponds to 50th percentile,"
   + " which is the median value of the distribution (the number separating the higher"
   + " half of the probability distribution from the lower half).")
-public class GetQuantilesFromSketchUDF extends UDF {
+public class GetQuantilesUDF extends UDF {
 
   /**
    * Returns a list of quantile values from a given sketch
diff --git a/src/main/java/com/yahoo/sketches/hive/kll/GetRankFromSketchUDF.java b/src/main/java/com/yahoo/sketches/hive/kll/GetRankUDF.java
similarity index 95%
rename from src/main/java/com/yahoo/sketches/hive/kll/GetRankFromSketchUDF.java
rename to src/main/java/com/yahoo/sketches/hive/kll/GetRankUDF.java
index 17d997e..40652b7 100644
--- a/src/main/java/com/yahoo/sketches/hive/kll/GetRankFromSketchUDF.java
+++ b/src/main/java/com/yahoo/sketches/hive/kll/GetRankUDF.java
@@ -16,7 +16,7 @@
 extended = " Returns a normalized rank of a given value from a given KllFloatsSketch."
 + " The returned rank is an approximation to the fraction of values of the distribution"
 + " that are less than the given value (mass of the distribution below the given value).")
-public class GetRankFromSketchUDF extends UDF {
+public class GetRankUDF extends UDF {
 
   /**
    * Returns a normalized rank of a given value from a given sketch
diff --git a/src/test/java/com/yahoo/sketches/hive/kll/GetCdfFromSketchUDFTest.java b/src/test/java/com/yahoo/sketches/hive/kll/GetCdfUDFTest.java
similarity index 74%
rename from src/test/java/com/yahoo/sketches/hive/kll/GetCdfFromSketchUDFTest.java
rename to src/test/java/com/yahoo/sketches/hive/kll/GetCdfUDFTest.java
index 5d125f6..762a74a 100644
--- a/src/test/java/com/yahoo/sketches/hive/kll/GetCdfFromSketchUDFTest.java
+++ b/src/test/java/com/yahoo/sketches/hive/kll/GetCdfUDFTest.java
@@ -13,11 +13,11 @@
 
 import com.yahoo.sketches.kll.KllFloatsSketch;
 
-public class GetCdfFromSketchUDFTest {
+public class GetCdfUDFTest {
 
   @Test
   public void nullSketch() {
-    List<Double> result = new GetCdfFromSketchUDF().evaluate(null, 0f);
+    List<Double> result = new GetCdfUDF().evaluate(null, 0f);
     Assert.assertNull(result);
   }
 
@@ -27,7 +27,7 @@
     sketch.update(1);
     sketch.update(2);
     sketch.update(3);
-    List<Double> result = new GetCdfFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()));
+    List<Double> result = new GetCdfUDF().evaluate(new BytesWritable(sketch.toByteArray()));
     Assert.assertNotNull(result);
     Assert.assertEquals(result.size(), 1);
     Assert.assertEquals(result.get(0), 1.0);
@@ -36,7 +36,7 @@
   @Test
   public void emptySketch() {
     KllFloatsSketch sketch = new KllFloatsSketch();
-    List<Double> result = new GetCdfFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()), 0f);
+    List<Double> result = new GetCdfUDF().evaluate(new BytesWritable(sketch.toByteArray()), 0f);
     Assert.assertNull(result);
   }
 
@@ -47,7 +47,7 @@
     sketch.update(2);
     sketch.update(3);
     sketch.update(4);
-    List<Double> result = new GetCdfFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()), 1f, 3f, 4f);
+    List<Double> result = new GetCdfUDF().evaluate(new BytesWritable(sketch.toByteArray()), 1f, 3f, 4f);
     Assert.assertNotNull(result);
     Assert.assertEquals(result.size(), 4);
     Assert.assertEquals(result.get(0), 0.0);
diff --git a/src/test/java/com/yahoo/sketches/hive/kll/GetNFromSektchUDFTest.java b/src/test/java/com/yahoo/sketches/hive/kll/GetNUDFTest.java
similarity index 77%
rename from src/test/java/com/yahoo/sketches/hive/kll/GetNFromSektchUDFTest.java
rename to src/test/java/com/yahoo/sketches/hive/kll/GetNUDFTest.java
index c0573f9..6c5ca9f 100644
--- a/src/test/java/com/yahoo/sketches/hive/kll/GetNFromSektchUDFTest.java
+++ b/src/test/java/com/yahoo/sketches/hive/kll/GetNUDFTest.java
@@ -11,11 +11,11 @@
 
 import com.yahoo.sketches.kll.KllFloatsSketch;
 
-public class GetNFromSektchUDFTest {
+public class GetNUDFTest {
 
   @Test
   public void nullSketch() {
-    final Long result = new GetNFromSketchUDF().evaluate(null);
+    final Long result = new GetNUDF().evaluate(null);
     Assert.assertNull(result);
   }
 
@@ -26,7 +26,7 @@
     sketch.update(2);
     sketch.update(3);
     sketch.update(4);
-    final Long result = new GetNFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()));
+    final Long result = new GetNUDF().evaluate(new BytesWritable(sketch.toByteArray()));
     Assert.assertNotNull(result);
     Assert.assertEquals(result, Long.valueOf(4));
   }
diff --git a/src/test/java/com/yahoo/sketches/hive/kll/GetPmfFromSketchUDFTest.java b/src/test/java/com/yahoo/sketches/hive/kll/GetPmfUDFTest.java
similarity index 74%
rename from src/test/java/com/yahoo/sketches/hive/kll/GetPmfFromSketchUDFTest.java
rename to src/test/java/com/yahoo/sketches/hive/kll/GetPmfUDFTest.java
index 33b3a00..c24c0fc 100644
--- a/src/test/java/com/yahoo/sketches/hive/kll/GetPmfFromSketchUDFTest.java
+++ b/src/test/java/com/yahoo/sketches/hive/kll/GetPmfUDFTest.java
@@ -13,11 +13,11 @@
 
 import com.yahoo.sketches.kll.KllFloatsSketch;
 
-public class GetPmfFromSketchUDFTest {
+public class GetPmfUDFTest {
 
   @Test
   public void nullSketch() {
-    List<Double> result = new GetPmfFromSketchUDF().evaluate(null, 0f);
+    List<Double> result = new GetPmfUDF().evaluate(null, 0f);
     Assert.assertNull(result);
   }
 
@@ -27,7 +27,7 @@
     sketch.update(1);
     sketch.update(2);
     sketch.update(3);
-    List<Double> result = new GetPmfFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()));
+    List<Double> result = new GetPmfUDF().evaluate(new BytesWritable(sketch.toByteArray()));
     Assert.assertNotNull(result);
     Assert.assertEquals(result.size(), 1);
     Assert.assertEquals(result.get(0), 1.0);
@@ -36,7 +36,7 @@
   @Test
   public void emptySketch() {
     KllFloatsSketch sketch = new KllFloatsSketch();
-    List<Double> result = new GetPmfFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()), 0f);
+    List<Double> result = new GetPmfUDF().evaluate(new BytesWritable(sketch.toByteArray()), 0f);
     Assert.assertNull(result);
   }
 
@@ -47,7 +47,7 @@
     sketch.update(2);
     sketch.update(3);
     sketch.update(4);
-    List<Double> result = new GetPmfFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()), 1f, 3f, 5f);
+    List<Double> result = new GetPmfUDF().evaluate(new BytesWritable(sketch.toByteArray()), 1f, 3f, 5f);
     Assert.assertNotNull(result);
     Assert.assertEquals(result.size(), 4);
     Assert.assertEquals(result.get(0), 0.0);
diff --git a/src/test/java/com/yahoo/sketches/hive/kll/GetQuantileFromSektchUDFTest.java b/src/test/java/com/yahoo/sketches/hive/kll/GetQuantileUDFTest.java
similarity index 73%
rename from src/test/java/com/yahoo/sketches/hive/kll/GetQuantileFromSektchUDFTest.java
rename to src/test/java/com/yahoo/sketches/hive/kll/GetQuantileUDFTest.java
index ee2d1f8..62ce730 100644
--- a/src/test/java/com/yahoo/sketches/hive/kll/GetQuantileFromSektchUDFTest.java
+++ b/src/test/java/com/yahoo/sketches/hive/kll/GetQuantileUDFTest.java
@@ -11,11 +11,11 @@
 
 import com.yahoo.sketches.kll.KllFloatsSketch;
 
-public class GetQuantileFromSektchUDFTest {
+public class GetQuantileUDFTest {
 
   @Test
   public void nullSketch() {
-    final Float result = new GetQuantileFromSketchUDF().evaluate(null, 0);
+    final Float result = new GetQuantileUDF().evaluate(null, 0);
     Assert.assertNull(result);
   }
 
@@ -25,7 +25,7 @@
     sketch.update(1);
     sketch.update(2);
     sketch.update(3);
-    final Float result = new GetQuantileFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()), 0.5);
+    final Float result = new GetQuantileUDF().evaluate(new BytesWritable(sketch.toByteArray()), 0.5);
     Assert.assertNotNull(result);
     Assert.assertEquals(result, 2f);
   }
diff --git a/src/test/java/com/yahoo/sketches/hive/kll/GetQuantilesFromSketchUDFTest.java b/src/test/java/com/yahoo/sketches/hive/kll/GetQuantilesUDFTest.java
similarity index 74%
rename from src/test/java/com/yahoo/sketches/hive/kll/GetQuantilesFromSketchUDFTest.java
rename to src/test/java/com/yahoo/sketches/hive/kll/GetQuantilesUDFTest.java
index 08fa45f..078de98 100644
--- a/src/test/java/com/yahoo/sketches/hive/kll/GetQuantilesFromSketchUDFTest.java
+++ b/src/test/java/com/yahoo/sketches/hive/kll/GetQuantilesUDFTest.java
@@ -13,11 +13,11 @@
 
 import com.yahoo.sketches.kll.KllFloatsSketch;
 
-public class GetQuantilesFromSketchUDFTest {
+public class GetQuantilesUDFTest {
 
   @Test
   public void nullSketch() {
-    final List<Float> result = new GetQuantilesFromSketchUDF().evaluate(null, 0.0);
+    final List<Float> result = new GetQuantilesUDF().evaluate(null, 0.0);
     Assert.assertNull(result);
   }
 
@@ -27,7 +27,7 @@
     sketch.update(1);
     sketch.update(2);
     sketch.update(3);
-    final List<Float> result = new GetQuantilesFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()));
+    final List<Float> result = new GetQuantilesUDF().evaluate(new BytesWritable(sketch.toByteArray()));
     Assert.assertNotNull(result);
     Assert.assertEquals(result.size(), 0);
   }
@@ -38,7 +38,7 @@
     sketch.update(1);
     sketch.update(2);
     sketch.update(3);
-    final List<Float> result = new GetQuantilesFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()), 0.0, 0.5, 1.0);
+    final List<Float> result = new GetQuantilesUDF().evaluate(new BytesWritable(sketch.toByteArray()), 0.0, 0.5, 1.0);
     Assert.assertNotNull(result);
     Assert.assertEquals(result.size(), 3);
     Assert.assertEquals(result.get(0), 1f);
diff --git a/src/test/java/com/yahoo/sketches/hive/kll/GetRankFromSektchUDFTest.java b/src/test/java/com/yahoo/sketches/hive/kll/GetRankUDFTest.java
similarity index 74%
rename from src/test/java/com/yahoo/sketches/hive/kll/GetRankFromSektchUDFTest.java
rename to src/test/java/com/yahoo/sketches/hive/kll/GetRankUDFTest.java
index 30011fa..84c3d8d 100644
--- a/src/test/java/com/yahoo/sketches/hive/kll/GetRankFromSektchUDFTest.java
+++ b/src/test/java/com/yahoo/sketches/hive/kll/GetRankUDFTest.java
@@ -11,11 +11,11 @@
 
 import com.yahoo.sketches.kll.KllFloatsSketch;
 
-public class GetRankFromSektchUDFTest {
+public class GetRankUDFTest {
 
   @Test
   public void nullSketch() {
-    final Double result = new GetRankFromSketchUDF().evaluate(null, 0);
+    final Double result = new GetRankUDF().evaluate(null, 0);
     Assert.assertNull(result);
   }
 
@@ -26,7 +26,7 @@
     sketch.update(2);
     sketch.update(3);
     sketch.update(4);
-    final Double result = new GetRankFromSketchUDF().evaluate(new BytesWritable(sketch.toByteArray()), 3f);
+    final Double result = new GetRankUDF().evaluate(new BytesWritable(sketch.toByteArray()), 3f);
     Assert.assertNotNull(result);
     Assert.assertEquals(result, 0.5);
   }
