diff --git a/common/rya.api.function/src/main/test/org/apache/rya/api/function/join/IterativeJoinTest.java b/common/rya.api.function/src/main/test/org/apache/rya/api/function/join/IterativeJoinTest.java
index 91997a3..c82f0b7 100644
--- a/common/rya.api.function/src/main/test/org/apache/rya/api/function/join/IterativeJoinTest.java
+++ b/common/rya.api.function/src/main/test/org/apache/rya/api/function/join/IterativeJoinTest.java
@@ -18,15 +18,14 @@
  */
 package org.apache.rya.api.function.join;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 
 import org.apache.rya.api.model.VisibilityBindingSet;
-import org.apache.rya.api.function.join.IterativeJoin;
-import org.apache.rya.api.function.join.LeftOuterJoin;
-import org.apache.rya.api.function.join.NaturalJoin;
 import org.eclipse.rdf4j.model.ValueFactory;
 import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
 import org.eclipse.rdf4j.query.impl.MapBindingSet;
@@ -36,8 +35,6 @@
 import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
 
-import static org.junit.Assert.assertEquals;
-
 /**
  * Tests the methods of {@link IterativeJoin}.
  */
diff --git a/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/AfterTemporalFunctionsTest.java b/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/AfterTemporalFunctionsTest.java
index 48bbefa..e99417e 100644
--- a/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/AfterTemporalFunctionsTest.java
+++ b/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/AfterTemporalFunctionsTest.java
@@ -32,7 +32,7 @@
     private static final ZonedDateTime TIME_10 = ZonedDateTime.parse("2015-12-30T12:00:10Z");
     private static final ZonedDateTime TIME_20 = ZonedDateTime.parse("2015-12-30T12:00:20Z");
 
-    final ValueFactory VF = SimpleValueFactory.getInstance();
+    private static final ValueFactory VF = SimpleValueFactory.getInstance();
 
     @Test
     public void testAfter_same() throws Exception {
diff --git a/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/BeforeTemporalFunctionsTest.java b/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/BeforeTemporalFunctionsTest.java
index 7fb5680..1a39423 100644
--- a/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/BeforeTemporalFunctionsTest.java
+++ b/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/BeforeTemporalFunctionsTest.java
@@ -32,7 +32,7 @@
     private static final ZonedDateTime TIME_10 = ZonedDateTime.parse("2015-12-30T12:00:10Z");
     private static final ZonedDateTime TIME_20 = ZonedDateTime.parse("2015-12-30T12:00:20Z");
 
-    final ValueFactory VF = SimpleValueFactory.getInstance();
+    private static final ValueFactory VF = SimpleValueFactory.getInstance();
 
     @Test
     public void testBefore_same() throws Exception {
diff --git a/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/EqualsTemporalFunctionsTest.java b/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/EqualsTemporalFunctionsTest.java
index bffade6..51fe263 100644
--- a/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/EqualsTemporalFunctionsTest.java
+++ b/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/EqualsTemporalFunctionsTest.java
@@ -32,7 +32,7 @@
     private static final ZonedDateTime TIME_10 = ZonedDateTime.parse("2015-12-30T12:00:10Z");
     private static final ZonedDateTime TIME_20 = ZonedDateTime.parse("2015-12-30T12:00:20Z");
 
-    final ValueFactory VF = SimpleValueFactory.getInstance();
+    private static final ValueFactory VF = SimpleValueFactory.getInstance();
 
     @Test
     public void testEquals_equal() throws Exception {
diff --git a/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/WithinTemporalFunctionsTest.java b/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/WithinTemporalFunctionsTest.java
index 2761287..e145c4d 100644
--- a/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/WithinTemporalFunctionsTest.java
+++ b/common/rya.api.function/src/main/test/org/apache/rya/api/function/temporal/WithinTemporalFunctionsTest.java
@@ -33,7 +33,7 @@
     private static final ZonedDateTime TIME_10 = ZonedDateTime.parse("2015-12-30T12:00:10Z");
     private static final ZonedDateTime TIME_20 = ZonedDateTime.parse("2015-12-30T12:00:20Z");
 
-    final ValueFactory VF = SimpleValueFactory.getInstance();
+    private static final ValueFactory VF = SimpleValueFactory.getInstance();
 
     @Test(expected = ValueExprEvaluationException.class)
     public void within_NotInterval() throws Exception {
diff --git a/common/rya.api/pom.xml b/common/rya.api/pom.xml
index 13cd4cf..ea4fb19 100644
--- a/common/rya.api/pom.xml
+++ b/common/rya.api/pom.xml
@@ -68,6 +68,10 @@
             <groupId>org.eclipse.rdf4j</groupId>
             <artifactId>rdf4j-rio-turtle</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.eclipse.rdf4j</groupId>
+            <artifactId>rdf4j-sail-base</artifactId>
+        </dependency>
         
         <dependency>
             <groupId>com.google.guava</groupId>
@@ -108,10 +112,6 @@
             <artifactId>mockito-all</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.eclipse.rdf4j</groupId>
-            <artifactId>rdf4j-sail-base</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreUtils.java b/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreUtils.java
index 8a7c007..4fb5705 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreUtils.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreUtils.java
@@ -86,8 +86,8 @@
 ////
 ////        Value ret = null;
 ////        if (valueTypeMarker == RdfCloudTripleStoreConstants.URI_MARKER) {
-////            String uriString = readString(dataIn);
-////            ret = vf.createIRI(uriString);
+////            String iriString = readString(dataIn);
+////            ret = vf.createIRI(iriString);
 ////        } else if (valueTypeMarker == RdfCloudTripleStoreConstants.BNODE_MARKER) {
 ////            String bnodeID = readString(dataIn);
 ////            ret = vf.createBNode(bnodeID);
@@ -261,16 +261,16 @@
     public static IRI convertToUri(String namespace, String value) {
         if (value == null)
             return null;
-        IRI subjUri;
+        IRI subjIri;
         try {
-            subjUri = VF.createIRI(value);
+            subjIri = VF.createIRI(value);
         } catch (Exception e) {
-            //not uri
+            //not iri
             if (namespace == null)
                 return null;
-            subjUri = VF.createIRI(namespace, value);
+            subjIri = VF.createIRI(namespace, value);
         }
-        return subjUri;
+        return subjIri;
     }
 
     public static Literal convertToDataTypeLiteral(String s) {
@@ -294,10 +294,10 @@
         return lit != null && lit.indexOf("^^") != -1;
     }
 
-    public static boolean isUri(String uri) {
-        if (uri == null) return false;
+    public static boolean isUri(String iri) {
+        if (iri == null) return false;
         try {
-            VF.createIRI(uri);
+            VF.createIRI(iri);
         } catch (Exception e) {
             return false;
         }
@@ -315,16 +315,16 @@
 //    }
 
 
-//    public static void addTimeIndexUri(Configuration conf, IRI timeUri, Class<? extends TtlValueConverter> ttlValueConvClass) {
-//        String[] timeIndexUris = conf.getStrings(RdfCloudTripleStoreConfiguration.CONF_TIMEINDEXURIS);
-//        if (timeIndexUris == null)
-//            timeIndexUris = new String[0];
-//        List<String> stringList = new ArrayList<String>(Arrays.asList(timeIndexUris));
-//        String timeUri_s = timeUri.stringValue();
-//        if (!stringList.contains(timeUri_s))
-//            stringList.add(timeUri_s);
+//    public static void addTimeIndexUri(Configuration conf, IRI timeIri, Class<? extends TtlValueConverter> ttlValueConvClass) {
+//        String[] timeIndexIris = conf.getStrings(RdfCloudTripleStoreConfiguration.CONF_TIMEINDEXURIS);
+//        if (timeIndexIris == null)
+//            timeIndexIris = new String[0];
+//        List<String> stringList = new ArrayList<String>(Arrays.asList(timeIndexIris));
+//        String timeIri_s = timeIri.stringValue();
+//        if (!stringList.contains(timeIri_s))
+//            stringList.add(timeIri_s);
 //        conf.setStrings(RdfCloudTripleStoreConfiguration.CONF_TIMEINDEXURIS, stringList.toArray(new String[stringList.size()]));
-//        conf.set(timeUri_s, ttlValueConvClass.getName());
+//        conf.set(timeIri_s, ttlValueConvClass.getName());
 //    }
 
 //    public static Class<? extends TtlValueConverter> getTtlValueConverter(Configuration conf, IRI predicate) throws ClassNotFoundException {
@@ -380,7 +380,7 @@
         if (resource.contains(":") || resource.contains("/") || resource.contains("#")) {
             return VF.createIRI(resource);
         } else {
-            throw new RuntimeException((new StringBuilder()).append(resource).append(" is not a valid URI, blank node, or literal value").toString());
+            throw new RuntimeException((new StringBuilder()).append(resource).append(" is not a valid IRI, blank node, or literal value").toString());
         }
     }
 
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/date/DateTimeTtlValueConverter.java b/common/rya.api/src/main/java/org/apache/rya/api/date/DateTimeTtlValueConverter.java
index 62ee8c0..5150219 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/date/DateTimeTtlValueConverter.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/date/DateTimeTtlValueConverter.java
@@ -49,10 +49,10 @@
             cal.setTimeZone(getTimeZone());
             cal.setTimeInMillis(start_l);
             DatatypeFactory factory = DatatypeFactory.newInstance();
-            start = vf.createLiteral(factory.newXMLGregorianCalendar(cal));
+            start = VF.createLiteral(factory.newXMLGregorianCalendar(cal));
 
             cal.setTimeInMillis(stop_l);
-            stop = vf.createLiteral(factory.newXMLGregorianCalendar(cal));
+            stop = VF.createLiteral(factory.newXMLGregorianCalendar(cal));
         } catch (DatatypeConfigurationException e) {
             throw new RuntimeException("Exception occurred creating DataTypeFactory", e);
         }
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlStrValueConverter.java b/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlStrValueConverter.java
index a52e0b4..5b25622 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlStrValueConverter.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlStrValueConverter.java
@@ -38,8 +38,8 @@
             stop_l = Long.parseLong(startTime);
         start_l = stop_l - ttl_l;
 
-        start = vf.createLiteral(start_l + "");
-        stop = vf.createLiteral(stop_l + "");
+        start = VF.createLiteral(start_l + "");
+        stop = VF.createLiteral(stop_l + "");
     }
 
     @Override
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlValueConverter.java b/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlValueConverter.java
index 4ce6932..8fe1997 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlValueConverter.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlValueConverter.java
@@ -38,8 +38,8 @@
             stop_l = Long.parseLong(startTime);
         start_l = stop_l - ttl_l;
 
-        start = vf.createLiteral(start_l);
-        stop = vf.createLiteral(stop_l);
+        start = VF.createLiteral(start_l);
+        stop = VF.createLiteral(stop_l);
     }
 
     @Override
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/date/TtlValueConverter.java b/common/rya.api/src/main/java/org/apache/rya/api/date/TtlValueConverter.java
index 98ea208..c053643 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/date/TtlValueConverter.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/date/TtlValueConverter.java
@@ -29,7 +29,7 @@
  */
 public interface TtlValueConverter {
 
-    ValueFactory vf = SimpleValueFactory.getInstance();
+    public static final ValueFactory VF = SimpleValueFactory.getInstance();
 
     public void convert(String ttl, String startTime);
 
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/functions/DateTimeWithinPeriod.java b/common/rya.api/src/main/java/org/apache/rya/api/functions/DateTimeWithinPeriod.java
index 62720e6..26db3ac 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/functions/DateTimeWithinPeriod.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/functions/DateTimeWithinPeriod.java
@@ -17,6 +17,9 @@
  * under the License.
  */package org.apache.rya.api.functions;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.time.Duration;
 import java.time.Instant;
 
@@ -30,15 +33,12 @@
 import org.eclipse.rdf4j.query.algebra.evaluation.ValueExprEvaluationException;
 import org.eclipse.rdf4j.query.algebra.evaluation.function.Function;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
 /**
  * This {@link Function} determines whether two {@link XMLSchema#DATETIME}s occur within a specified period of time of
  * one another. The method {@link Function#evaluate(ValueFactory, Value...)} expects four values, where the first two
- * values are the datetimes, the third value is an integer indicating the period, and the fourth value is a URI
+ * values are the datetimes, the third value is an integer indicating the period, and the fourth value is an IRI
  * indicating the time unit of the period. The IRI must be of Type DurationDescription in the OWL-Time ontology (see
- * <a href ="https://www.w3.org/TR/owl-time/">https://www.w3.org/TR/owl-time/</a>). Examples of valid time unit URIs can
+ * <a href ="https://www.w3.org/TR/owl-time/">https://www.w3.org/TR/owl-time/</a>). Examples of valid time unit IRIs can
  * be found in the class {@link OWLTime} and below
  * <ul>
  * <li>http://www.w3.org/2006/time#days</li>
@@ -50,11 +50,11 @@
  */
 public class DateTimeWithinPeriod implements Function {
 
-    private static final String FUNCTION_URI = FN.NAMESPACE + "dateTimeWithin";
+    private static final String FUNCTION_IRI = FN.NAMESPACE + "dateTimeWithin";
 
     @Override
     public String getURI() {
-        return FUNCTION_URI;
+        return FUNCTION_IRI;
     }
 
     /**
@@ -62,7 +62,7 @@
      * values, where the first two values are the datetimes, the third value is an integer indicating the period, and
      * the fourth value is an IRI indicating the time unit of the period. The IRI must be of Type DurationDescription in
      * the OWL-Time ontology (see <a href ="https://www.w3.org/TR/owl-time/">https://www.w3.org/TR/owl-time/</a>).
-     * Examples of valid time unit URIs can be found in the class {@link OWLTime} and below
+     * Examples of valid time unit IRIs can be found in the class {@link OWLTime} and below
      * <ul>
      * <li>http://www.w3.org/2006/time#days</li>
      * <li>http://www.w3.org/2006/time#hours</li>
@@ -118,7 +118,7 @@
      * Converts the period duration to milliseconds.
      *
      * @param duration - duration of temporal period
-     * @param unit - IRI indicating the time unit (URI must be of type DurationDescription in the OWL-Time ontology
+     * @param unit - IRI indicating the time unit (IRI must be of type DurationDescription in the OWL-Time ontology
      *            indicated by the namespace <http://www.w3.org/2006/time#>)
      * @return - duration in milliseconds
      */
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/resolver/RdfToRyaConversions.java b/common/rya.api/src/main/java/org/apache/rya/api/resolver/RdfToRyaConversions.java
index e89306e..fca31e4 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/resolver/RdfToRyaConversions.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/resolver/RdfToRyaConversions.java
@@ -40,13 +40,13 @@
  */
 public class RdfToRyaConversions {
 
-    public static RyaURI convertURI(IRI uri) {
-        if (uri == null) return null;
-        if (uri instanceof RangeURI) {
-            RangeURI ruri = (RangeURI) uri;
-            return new RyaURIRange(convertURI(ruri.getStart()), convertURI(ruri.getEnd()));
+    public static RyaURI convertURI(IRI iri) {
+        if (iri == null) return null;
+        if (iri instanceof RangeURI) {
+            RangeURI riri = (RangeURI) iri;
+            return new RyaURIRange(convertURI(riri.getStart()), convertURI(riri.getEnd()));
         }
-        return new RyaURI(uri.stringValue());
+        return new RyaURI(iri.stringValue());
     }
 
     public static RyaType convertLiteral(Literal literal) {
@@ -68,7 +68,7 @@
             return convertLiteral((Literal) value);
         }
         if (value instanceof RangeValue) {
-            RangeValue rv = (RangeValue) value;
+            RangeValue<?> rv = (RangeValue<?>) value;
             if (rv.getStart() instanceof IRI) {
                 return new RyaURIRange(convertURI((IRI) rv.getStart()), convertURI((IRI) rv.getEnd()));
             } else {
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/resolver/RyaToRdfConversions.java b/common/rya.api/src/main/java/org/apache/rya/api/resolver/RyaToRdfConversions.java
index e9e1e46..b43bdaa 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/resolver/RyaToRdfConversions.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/resolver/RyaToRdfConversions.java
@@ -37,8 +37,8 @@
 public class RyaToRdfConversions {
     private static final ValueFactory VF = SimpleValueFactory.getInstance();
 
-    public static IRI convertURI(RyaURI uri) {
-        return VF.createIRI(uri.getData());
+    public static IRI convertURI(RyaURI iri) {
+        return VF.createIRI(iri.getData());
     }
     
     private static IRI convertURI(RyaType value) {
diff --git a/extras/indexing/src/main/java/org/apache/rya/indexing/FreeTextIndexer.java b/extras/indexing/src/main/java/org/apache/rya/indexing/FreeTextIndexer.java
index 7745b01..88bb1d9 100644
--- a/extras/indexing/src/main/java/org/apache/rya/indexing/FreeTextIndexer.java
+++ b/extras/indexing/src/main/java/org/apache/rya/indexing/FreeTextIndexer.java
@@ -30,15 +30,15 @@
  */
 public interface FreeTextIndexer extends RyaSecondaryIndexer {
 
-	/**
-	 * Query the Free Text Index with specific constraints. A <code>null</code> or empty parameters imply no constraint.
-	 *
-	 * @param query
-	 *            the query to perform
-	 * @param contraints
-	 *            the constraints on the statements returned
-	 * @return the set of statements that meet the query and other constraints.
-	 * @throws IOException
-	 */
+    /**
+     * Query the Free Text Index with specific constraints. A <code>null</code> or empty parameters imply no constraint.
+     *
+     * @param query
+     *            the query to perform
+     * @param contraints
+     *            the constraints on the statements returned
+     * @return the set of statements that meet the query and other constraints.
+     * @throws IOException
+     */
     public CloseableIteration<Statement, QueryEvaluationException> queryText(String query, StatementConstraints contraints) throws IOException;
 }
diff --git a/extras/indexing/src/main/java/org/apache/rya/indexing/IndexPlanValidator/IndexedQueryPlanSelector.java b/extras/indexing/src/main/java/org/apache/rya/indexing/IndexPlanValidator/IndexedQueryPlanSelector.java
index 974f616..e8dffa6 100644
--- a/extras/indexing/src/main/java/org/apache/rya/indexing/IndexPlanValidator/IndexedQueryPlanSelector.java
+++ b/extras/indexing/src/main/java/org/apache/rya/indexing/IndexPlanValidator/IndexedQueryPlanSelector.java
@@ -24,8 +24,6 @@
 import org.eclipse.rdf4j.query.algebra.TupleExpr;
 
 public interface IndexedQueryPlanSelector {
-    
-    TupleExpr getThreshholdQueryPlan(Iterator<TupleExpr> tupleList, double threshhold,
+    public TupleExpr getThreshholdQueryPlan(Iterator<TupleExpr> tupleList, double threshhold,
             double indexWeight, double commonVarWeight, double dirProdWeight);
-
 }
diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/accumulo/entity/AccumuloDocIndexerTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/accumulo/entity/AccumuloDocIndexerTest.java
index a6487df..b25864e 100644
--- a/extras/indexing/src/test/java/org/apache/rya/indexing/accumulo/entity/AccumuloDocIndexerTest.java
+++ b/extras/indexing/src/test/java/org/apache/rya/indexing/accumulo/entity/AccumuloDocIndexerTest.java
@@ -63,7 +63,7 @@
     private MockInstance mockInstance;
     private Connector accCon;
     AccumuloRdfConfiguration conf = new AccumuloRdfConfiguration();
-    ValueFactory vf = SimpleValueFactory.getInstance();
+    private static final ValueFactory VF = SimpleValueFactory.getInstance();
     
     private String tableName;
     
@@ -316,11 +316,11 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
 //                QueryBindingSet b1 = (new QueryBindingSet());
-//                b1.addBinding("X", vf.createIRI("uri:5"));
+//                b1.addBinding("X", VF.createIRI("uri:5"));
 //                QueryBindingSet b2 = (new QueryBindingSet());
-//                b2.addBinding("X", vf.createIRI("uri:15"));
+//                b2.addBinding("X", VF.createIRI("uri:15"));
 //                QueryBindingSet b3 = (new QueryBindingSet());
-//                b3.addBinding("X", vf.createIRI("uri:25"));
+//                b3.addBinding("X", VF.createIRI("uri:25"));
 //                bsList.add(b1);
 //                bsList.add(b2);
 //                bsList.add(b3);
@@ -440,11 +440,11 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
                 QueryBindingSet b1 = (new QueryBindingSet());
-                b1.addBinding("X", vf.createIRI("uri:5"));
+                b1.addBinding("X", VF.createIRI("uri:5"));
                 QueryBindingSet b2 = (new QueryBindingSet());
-                b2.addBinding("X", vf.createIRI("uri:15"));
+                b2.addBinding("X", VF.createIRI("uri:15"));
                 QueryBindingSet b3 = (new QueryBindingSet());
-                b3.addBinding("X", vf.createIRI("uri:25"));
+                b3.addBinding("X", VF.createIRI("uri:25"));
                 bsList.add(b1);
                 bsList.add(b2);
                 bsList.add(b3);
@@ -666,11 +666,11 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
                 QueryBindingSet b1 = (new QueryBindingSet());
-                b1.addBinding("X", vf.createIRI("uri:5"));
+                b1.addBinding("X", VF.createIRI("uri:5"));
                 QueryBindingSet b2 = (new QueryBindingSet());
-                b2.addBinding("X", vf.createIRI("uri:15"));
+                b2.addBinding("X", VF.createIRI("uri:15"));
                 QueryBindingSet b3 = (new QueryBindingSet());
-                b3.addBinding("X", vf.createIRI("uri:25"));
+                b3.addBinding("X", VF.createIRI("uri:25"));
                 bsList.add(b1);
                 bsList.add(b2);
                 bsList.add(b3);
@@ -779,11 +779,11 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
                 QueryBindingSet b1 = (new QueryBindingSet());
-                b1.addBinding("X", vf.createIRI("uri:5"));
+                b1.addBinding("X", VF.createIRI("uri:5"));
                 QueryBindingSet b2 = (new QueryBindingSet());
-                b2.addBinding("X", vf.createIRI("uri:15"));
+                b2.addBinding("X", VF.createIRI("uri:15"));
                 QueryBindingSet b3 = (new QueryBindingSet());
-                b3.addBinding("X", vf.createIRI("uri:25"));
+                b3.addBinding("X", VF.createIRI("uri:25"));
                 bsList.add(b1);
                 bsList.add(b2);
                 bsList.add(b3);
@@ -934,11 +934,11 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
 //                QueryBindingSet b1 = (new QueryBindingSet());
-//                b1.addBinding("X", vf.createIRI("uri:5"));
+//                b1.addBinding("X", VF.createIRI("uri:5"));
 //                QueryBindingSet b2 = (new QueryBindingSet());
-//                b2.addBinding("X", vf.createIRI("uri:15"));
+//                b2.addBinding("X", VF.createIRI("uri:15"));
 //                QueryBindingSet b3 = (new QueryBindingSet());
-//                b3.addBinding("X", vf.createIRI("uri:25"));
+//                b3.addBinding("X", VF.createIRI("uri:25"));
 //                bsList.add(b1);
 //                bsList.add(b2);
 //                bsList.add(b3);
@@ -1111,11 +1111,11 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
                 QueryBindingSet b1 = (new QueryBindingSet());
-                b1.addBinding("X", vf.createIRI("uri:5"));
+                b1.addBinding("X", VF.createIRI("uri:5"));
                 QueryBindingSet b2 = (new QueryBindingSet());
-                b2.addBinding("X", vf.createIRI("uri:15"));
+                b2.addBinding("X", VF.createIRI("uri:15"));
                 QueryBindingSet b3 = (new QueryBindingSet());
-                b3.addBinding("X", vf.createIRI("uri:25"));
+                b3.addBinding("X", VF.createIRI("uri:25"));
                 bsList.add(b1);
                 bsList.add(b2);
                 bsList.add(b3);
@@ -1648,11 +1648,11 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
                 QueryBindingSet b1 = (new QueryBindingSet());
-                b1.addBinding("X", vf.createIRI("uri:5"));
+                b1.addBinding("X", VF.createIRI("uri:5"));
                 QueryBindingSet b2 = (new QueryBindingSet());
-                b2.addBinding("X", vf.createIRI("uri:15"));
+                b2.addBinding("X", VF.createIRI("uri:15"));
                 QueryBindingSet b3 = (new QueryBindingSet());
-                b3.addBinding("X", vf.createIRI("uri:25"));
+                b3.addBinding("X", VF.createIRI("uri:25"));
                 bsList.add(b1);
                 bsList.add(b2);
                 bsList.add(b3);
@@ -1850,10 +1850,10 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
                 QueryBindingSet b1 = new QueryBindingSet();
-                b1.addBinding("X", vf.createIRI("uri:5"));
+                b1.addBinding("X", VF.createIRI("uri:5"));
                 b1.addBinding("Y3", v1);
                 QueryBindingSet b2 = new QueryBindingSet();
-                b2.addBinding("X", vf.createIRI("uri:25"));
+                b2.addBinding("X", VF.createIRI("uri:25"));
                 b2.addBinding("Y3", v2);
                 bsList.add(b1);
                 bsList.add(b2);
@@ -2035,11 +2035,11 @@
                 
                 List<BindingSet> bsList = Lists.newArrayList();
 //                QueryBindingSet b1 = (new QueryBindingSet());
-//                b1.addBinding("X", vf.createIRI("uri:5"));
+//                b1.addBinding("X", VF.createIRI("uri:5"));
 //                QueryBindingSet b2 = (new QueryBindingSet());
-//                b2.addBinding("X", vf.createIRI("uri:15"));
+//                b2.addBinding("X", VF.createIRI("uri:15"));
 //                QueryBindingSet b3 = (new QueryBindingSet());
-//                b3.addBinding("X", vf.createIRI("uri:25"));
+//                b3.addBinding("X", VF.createIRI("uri:25"));
 //                bsList.add(b1);
 //                bsList.add(b2);
 //                bsList.add(b3);
diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/accumulo/entity/StarQueryTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/accumulo/entity/StarQueryTest.java
index 54b5dcd..d66dc8e 100644
--- a/extras/indexing/src/test/java/org/apache/rya/indexing/accumulo/entity/StarQueryTest.java
+++ b/extras/indexing/src/test/java/org/apache/rya/indexing/accumulo/entity/StarQueryTest.java
@@ -47,7 +47,7 @@
 
 public class StarQueryTest {
 
-    ValueFactory vf = SimpleValueFactory.getInstance();
+    private static final ValueFactory VF = SimpleValueFactory.getInstance();
     
     
     @Test
@@ -115,8 +115,8 @@
         QueryBindingSet bs1 = new QueryBindingSet();
         QueryBindingSet bs2 = new QueryBindingSet();
         
-        Value v1 = vf.createIRI("uri:hank");
-        Value v2 = vf.createIRI("uri:bob");
+        Value v1 = VF.createIRI("uri:hank");
+        Value v2 = VF.createIRI("uri:bob");
         
         bs1.addBinding("X",v1);
         bs2.addBinding("X", v1);
@@ -176,8 +176,8 @@
         QueryBindingSet bs1 = new QueryBindingSet();
         QueryBindingSet bs2 = new QueryBindingSet();
         
-        Value v1 = vf.createIRI("uri:hank");
-        Value v2 = vf.createIRI("uri:bob");
+        Value v1 = VF.createIRI("uri:hank");
+        Value v2 = VF.createIRI("uri:bob");
         
         bs1.addBinding("X",v1);
         bs2.addBinding("X", v1);
diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoPCJIndexIT.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoPCJIndexIT.java
index c169dac..8ff563d 100644
--- a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoPCJIndexIT.java
+++ b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoPCJIndexIT.java
@@ -201,8 +201,8 @@
     }
 
     private Set<Statement> getStatements() throws Exception {
-    	final Set<Statement> statements = new HashSet<>();
-    	statements.add(VF.createStatement(VF.createIRI("urn:Alice"), VF.createIRI("urn:likes"), VF.createIRI("urn:icecream")));
+        final Set<Statement> statements = new HashSet<>();
+        statements.add(VF.createStatement(VF.createIRI("urn:Alice"), VF.createIRI("urn:likes"), VF.createIRI("urn:icecream")));
         statements.add(VF.createStatement(VF.createIRI("urn:Bob"), VF.createIRI("urn:likes"), VF.createIRI("urn:icecream")));
         statements.add(VF.createStatement(VF.createIRI("urn:Charlie"), VF.createIRI("urn:likes"), VF.createIRI("urn:icecream")));
         statements.add(VF.createStatement(VF.createIRI("urn:David"), VF.createIRI("urn:likes"), VF.createIRI("urn:icecream")));
diff --git a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java
index a82656a..f126d57 100644
--- a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java
+++ b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/GeoEnabledFilterFunctionOptimizer.java
@@ -234,8 +234,8 @@
             this.matchVar = matchVar;
         }
 
-        protected void addFilter(final IRI uri, final Object[] values) {
-            func.add(uri);
+        protected void addFilter(final IRI iri, final Object[] values) {
+            func.add(iri);
             args.add(values);
         }
     }
@@ -249,8 +249,8 @@
 
         @Override
         public void meet(final FunctionCall call) {
-            final IRI fnUri = VF.createIRI(call.getURI());
-            final Var resultVar = IndexingFunctionRegistry.getResultVarFromFunctionCall(fnUri, call.getArgs());
+            final IRI fnIri = VF.createIRI(call.getURI());
+            final Var resultVar = IndexingFunctionRegistry.getResultVarFromFunctionCall(fnIri, call.getArgs());
             if (resultVar != null && resultVar.getName().equals(matchVar)) {
                 addFilter(VF.createIRI(call.getURI()), GeoParseUtils.extractArguments(matchVar, call));
                 if (call.getParentNode() instanceof Filter || call.getParentNode() instanceof And || call.getParentNode() instanceof LeftJoin) {
diff --git a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java
index 37cb99d..0d3cef9 100644
--- a/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java
+++ b/extras/rya.geoindexing/geo.common/src/main/java/org/apache/rya/indexing/geotemporal/GeoTemporalIndexer.java
@@ -29,9 +29,9 @@
  * A repository to store, index, and retrieve {@link Statement}s based on geotemporal features.
  */
 public interface GeoTemporalIndexer extends RyaSecondaryIndexer {
-	/**
-	 * initialize after setting configuration.
-	 */
+    /**
+     * Initialize after setting configuration.
+     */
     @Override
     public void init();
 
@@ -88,19 +88,19 @@
          */
         OVERLAPS(GeoConstants.GEO_SF_OVERLAPS);
 
-        private final IRI uri;
+        private final IRI iri;
 
-        private GeoPolicy(final IRI uri) {
-            this.uri = uri;
+        private GeoPolicy(final IRI iri) {
+            this.iri = iri;
         }
 
         public IRI getURI() {
-            return uri;
+            return iri;
         }
 
-        public static GeoPolicy fromURI(final IRI uri) {
+        public static GeoPolicy fromURI(final IRI iri) {
             for(final GeoPolicy policy : GeoPolicy.values()) {
-                if(policy.getURI().equals(uri)) {
+                if(policy.getURI().equals(iri)) {
                     return policy;
                 }
             }
@@ -170,11 +170,11 @@
         INTERVAL_AFTER(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"intervalAfter"));
 
         private final boolean isInstant;
-        private final IRI uri;
+        private final IRI iri;
 
-        TemporalPolicy(final boolean isInstant, final IRI uri) {
+        TemporalPolicy(final boolean isInstant, final IRI iri) {
             this.isInstant = isInstant;
-            this.uri = uri;
+            this.iri = iri;
         }
 
         public boolean isInstant(){
@@ -182,12 +182,12 @@
         }
 
         public IRI getURI() {
-            return uri;
+            return iri;
         }
 
-        public static TemporalPolicy fromURI(final IRI uri) {
+        public static TemporalPolicy fromURI(final IRI iri) {
             for(final TemporalPolicy policy : TemporalPolicy.values()) {
-                if(policy.getURI().equals(uri)) {
+                if(policy.getURI().equals(iri)) {
                     return policy;
                 }
             }
diff --git a/extras/rya.geoindexing/geo.geomesa/src/main/java/org/apache/rya/indexing/accumulo/geo/GeoMesaGeoIndexer.java b/extras/rya.geoindexing/geo.geomesa/src/main/java/org/apache/rya/indexing/accumulo/geo/GeoMesaGeoIndexer.java
index 2771749..f2f71f0 100644
--- a/extras/rya.geoindexing/geo.geomesa/src/main/java/org/apache/rya/indexing/accumulo/geo/GeoMesaGeoIndexer.java
+++ b/extras/rya.geoindexing/geo.geomesa/src/main/java/org/apache/rya/indexing/accumulo/geo/GeoMesaGeoIndexer.java
@@ -305,8 +305,8 @@
         }
         if (contraints.hasPredicates()) {
             final List<String> predicates = new ArrayList<String>();
-            for (final IRI u : contraints.getPredicates()) {
-                predicates.add("( " + PREDICATE_ATTRIBUTE + "= '" + u.stringValue() + "') ");
+            for (final IRI iri : contraints.getPredicates()) {
+                predicates.add("( " + PREDICATE_ATTRIBUTE + "= '" + iri.stringValue() + "') ");
             }
             filterParms.add("(" + StringUtils.join(predicates, " OR ") + ")");
         }
diff --git a/extras/rya.geoindexing/geo.geowave/src/main/java/org/apache/rya/indexing/accumulo/geo/GeoWaveGeoIndexer.java b/extras/rya.geoindexing/geo.geowave/src/main/java/org/apache/rya/indexing/accumulo/geo/GeoWaveGeoIndexer.java
index 8684d11..0709d78 100644
--- a/extras/rya.geoindexing/geo.geowave/src/main/java/org/apache/rya/indexing/accumulo/geo/GeoWaveGeoIndexer.java
+++ b/extras/rya.geoindexing/geo.geowave/src/main/java/org/apache/rya/indexing/accumulo/geo/GeoWaveGeoIndexer.java
@@ -367,8 +367,8 @@
         }
         if (contraints.hasPredicates()) {
             final List<String> predicates = new ArrayList<String>();
-            for (final IRI u : contraints.getPredicates()) {
-                predicates.add("( " + PREDICATE_ATTRIBUTE + "= '" + u.stringValue() + "') ");
+            for (final IRI iri : contraints.getPredicates()) {
+                predicates.add("( " + PREDICATE_ATTRIBUTE + "= '" + iri.stringValue() + "') ");
             }
             filterParms.add("(" + StringUtils.join(predicates, " OR ") + ")");
         }
diff --git a/extras/rya.reasoning/README.md b/extras/rya.reasoning/README.md
index 6401285..b65b252 100644
--- a/extras/rya.reasoning/README.md
+++ b/extras/rya.reasoning/README.md
@@ -331,10 +331,10 @@
 to the set of known triples for the next iteration, until there are no new
 triples or inconsistencies generated.
 
-Reasoning is distributed according to URI: Mappers read in triples from Accumulo
+Reasoning is distributed according to IRI: Mappers read in triples from Accumulo
 and from previous iterations, and partition triples according to their subject
 and object. Reducers perform reasoning around one IRI at a time, receiving as
-input only triples involving that URI. This enables us to use MapReduce, but
+input only triples involving that IRI. This enables us to use MapReduce, but
 requires making several passes through the data in cases where information
 needs to be propagated several steps through the graph (for example, with
 transitivity).
@@ -380,8 +380,8 @@
             `(:c :d :e)` are relevant to the reducer for `:c`, then
             `<:c, (:a :b :c)>`  will be received before `<:c, (:c :d :e)>`.)
             This allows joins to use less memory than they would otherwise need.
-        * Reduce: Receives a series of triples involving a single URI. Creates a
-            LocalReasoner object for that URI, which combines those triples with
+        * Reduce: Receives a series of triples involving a single IRI. Creates a
+            LocalReasoner object for that IRI, which combines those triples with
             the schema knowledge to apply inference rules. Outputs newly generated
             triples and/or inconsistencies to files.
     2. **DuplicateElimination**
@@ -668,14 +668,14 @@
 The main reasoning logic is located in **org.apache.rya.reasoning**, while MapReduce
 tools and utilities for interacting with Accumulo are located in
 **org.apache.rya.reasoning.mr**. Reasoning logic makes use of RDF constructs in the
-**org.eclipse.rdf4j.model** API, in particular: Statement, URI, Resource, and Value.
+**org.eclipse.rdf4j.model** API, in particular: Statement, IRI, Resource, and Value.
 
 ### org.apache.rya.reasoning
 
 - **OWL2**:
     In general, the RDF4J API is used to represent RDF constructs and
     refer to the RDF, RDFS, and OWL vocabularies. However, the API only covers
-    OWL 1 constructs. The OWL2 class contains static URIs for new OWL 2
+    OWL 1 constructs. The OWL2 class contains static IRIs for new OWL 2
     vocabulary resources: owl:IrreflexiveProperty, owl:propertyDisjointWith,
     etc.
 
@@ -685,7 +685,7 @@
 - **Schema**:
     Schema represents the complete schema/TBox/RBox as a set of Java objects.
     A schema consists of properties, classes, and their relationships.  The
-    Schema object maps URIs to instances of OwlProperty and Resources to
+    Schema object maps IRIs to instances of OwlProperty and Resources to
     instances of OwlClass.
 
     The schema is built one triple at a time: the Schema takes in a single
@@ -702,7 +702,7 @@
 
     Once the schema has been constructed, it can be used in reasoning. The
     Schema object serves as a repository for OwlClass and OwlProperty objects,
-    accessed by their URIs (or Resources), which in turn contain detailed schema
+    accessed by their IRIs (or Resources), which in turn contain detailed schema
     information about themselves.
 
     The Schema class also provides static method isSchemaTriple for checking
@@ -719,7 +719,7 @@
     Internally, they are represented as sets of those entities they are
     connected to, one set for each type of relationship. (For example, each
     OwlClass contains a set of its superclasses.) These are accessed via getter
-    methods that return sets of URIs or Resources, as appropriate. Both also
+    methods that return sets of IRIs or Resources, as appropriate. Both also
     apply some RL schema rules. Some rules are applied by the getter
     methods (for example, every class being its own subclass), while others must
     be explicitly invoked by the Schema (for example, determining that one
diff --git a/extras/rya.reasoning/src/main/java/org/apache/rya/reasoning/AbstractReasoner.java b/extras/rya.reasoning/src/main/java/org/apache/rya/reasoning/AbstractReasoner.java
index 75313a2..4a6f1af 100644
--- a/extras/rya.reasoning/src/main/java/org/apache/rya/reasoning/AbstractReasoner.java
+++ b/extras/rya.reasoning/src/main/java/org/apache/rya/reasoning/AbstractReasoner.java
@@ -159,6 +159,9 @@
 
     /**
      * Create a Fact representing a triple inferred by this reasoner.
+     * @param   s       The subject {@link Resource}.
+     * @param   p       The predicate {@link IRI}.
+     * @param   o       The object {@link Value}.
      * @param   rule    The specific rule rule that yielded the inference
      * @param   source  One (might be the only) fact used in the derivation
      */
diff --git a/extras/vagrantExample/src/main/vagrant/Vagrantfile b/extras/vagrantExample/src/main/vagrant/Vagrantfile
index bfa882f..247f46c 100644
--- a/extras/vagrantExample/src/main/vagrant/Vagrantfile
+++ b/extras/vagrantExample/src/main/vagrant/Vagrantfile
@@ -315,7 +315,7 @@
 	if [[ ! -s ${ryaIndexing}.zip ]] ; then
 		# Eventually it'll be on maven...
 		echo "Downloading ${ryaIndexing}.zip quietly, this will take some minutes with no output..."
-		download --output ${ryaIndexing}.zip ${mavenRepoUrl}org/apache/rya/rya.indexing.example/${RYA_EXAMPLE_VERSION}/${ryaIndexing}.zip?raw=1  || exit 112
+		download --output ${ryaIndexing}.zip ${mavenRepoUrl}org/apache/rya/rya.indexing.example/${RYA_EXAMPLE_VERSION}/${ryaIndexing}.zip || exit 112
 	fi
 	sudo mkdir --parents ${ryaIndexing}
 	sudo unzip -q -o ${ryaIndexing}.zip -d ${ryaIndexing}
@@ -341,7 +341,7 @@
 	ryaVagrant=rya.vagrant.example-${RYA_EXAMPLE_VERSION}
 	if [[ ! -s ${ryaVagrant}.jar ]] ; then
 		echo "Downloading ${ryaVagrant}.jar"
-		download --output ${ryaVagrant}.jar ${mavenRepoUrl}org/apache/rya/rya.vagrant.example/${RYA_EXAMPLE_VERSION}/${ryaVagrant}.jar?raw=1 || exit 120
+		download --output ${ryaVagrant}.jar ${mavenRepoUrl}org/apache/rya/rya.vagrant.example/${RYA_EXAMPLE_VERSION}/${ryaVagrant}.jar || exit 120
 	fi
 	sudo mkdir --parents ${ryaVagrant}
 	sudo unzip -q -o ${ryaVagrant}.jar -d ${ryaVagrant}
@@ -352,7 +352,7 @@
 	ryaWar=web.rya-${RYA_EXAMPLE_VERSION}.war
 	if [[ ! -s ${ryaWar} ]] ; then
 		echo "Downloading ${ryaWar}"
-		download ${mavenRepoUrl}org/apache/rya/web.rya/${RYA_EXAMPLE_VERSION}/${ryaWar}?raw=1 --output ${ryaWar} || exit 121
+		download ${mavenRepoUrl}org/apache/rya/web.rya/${RYA_EXAMPLE_VERSION}/${ryaWar} --output ${ryaWar} || exit 121
 	fi
 	sudo cp ${ryaWar} /var/lib/tomcat7/webapps/web.rya.war
 	# Wait for the war to deploy
diff --git a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/InverseURI.java b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/InverseURI.java
index 2a96ae6..b038604 100644
--- a/sail/src/main/java/org/apache/rya/rdftriplestore/inference/InverseURI.java
+++ b/sail/src/main/java/org/apache/rya/rdftriplestore/inference/InverseURI.java
@@ -25,8 +25,8 @@
 
     private final IRI impl;
 
-    public InverseURI(final IRI uri) {
-        this.impl = uri;
+    public InverseURI(final IRI iri) {
+        this.impl = iri;
     }
 
     @Override
