diff --git a/src/main/java/org/apache/pirk/encryption/Paillier.java b/src/main/java/org/apache/pirk/encryption/Paillier.java
index da14bba..6502e0d 100644
--- a/src/main/java/org/apache/pirk/encryption/Paillier.java
+++ b/src/main/java/org/apache/pirk/encryption/Paillier.java
@@ -96,8 +96,10 @@
     }
   }
 
-  @Expose private BigInteger p; // large prime
-  @Expose private BigInteger q; // large prime
+  @Expose
+  private BigInteger p; // large prime
+  @Expose
+  private BigInteger q; // large prime
   private BigInteger N; // N=pq, RSA modulus
 
   private BigInteger NSquared; // NSquared = N^2
@@ -105,15 +107,20 @@
   private BigInteger lambdaN; // lambda(N) = lcm(p-1,q-1), Carmichael function of N
 
   private BigInteger w; // lambda(N)^-1 mod N
-  @Expose private final int bitLength; // bit length of the modulus N
+  @Expose
+  private final int bitLength; // bit length of the modulus N
 
   /**
    * Creates a Paillier algorithm with all parameters specified.
    *
-   * @param p         First large prime.
-   * @param q         Second large prime.
-   * @param bitLength Bit length of the modulus {@code N}.
-   * @throws IllegalArgumentException If {@code p} or {@code q} do not satisfy primality constraints.
+   * @param p
+   *          First large prime.
+   * @param q
+   *          Second large prime.
+   * @param bitLength
+   *          Bit length of the modulus {@code N}.
+   * @throws IllegalArgumentException
+   *           If {@code p} or {@code q} do not satisfy primality constraints.
    */
   public Paillier(BigInteger p, BigInteger q, int bitLength)
   {
@@ -145,9 +152,12 @@
    * The probability that the generated keys represent primes will exceed (1 - (1/2)<sup>{@code certainty}</sup>). The execution time of this constructor is
    * proportional to the value of this parameter.
    *
-   * @param bitLength The bit length of the resulting modulus {@code N}.
-   * @param certainty The probability that the new {@code p} and {@code q} represent prime numbers.
-   * @throws IllegalArgumentException If the {@code certainty} is less than the system allowed lower bound.
+   * @param bitLength
+   *          The bit length of the resulting modulus {@code N}.
+   * @param certainty
+   *          The probability that the new {@code p} and {@code q} represent prime numbers.
+   * @throws IllegalArgumentException
+   *           If the {@code certainty} is less than the system allowed lower bound.
    */
   public Paillier(int bitLength, int certainty)
   {
@@ -164,10 +174,14 @@
    * <p>
    * When ensureBitSet > -1 the value of bit "{@code ensureBitSet}" in modulus {@code N} will be set.
    *
-   * @param bitLength    The bit length of the resulting modulus {@code N}.
-   * @param certainty    The probability that the new {@code p} and {@code q} represent prime numbers.
-   * @param ensureBitSet index of bit in {@code N} to ensure is set.
-   * @throws IllegalArgumentException If the {@code certainty} is less than the system allowed lower bound, or the index of {@code ensureBitSet} is greater than the {@code bitLength}.
+   * @param bitLength
+   *          The bit length of the resulting modulus {@code N}.
+   * @param certainty
+   *          The probability that the new {@code p} and {@code q} represent prime numbers.
+   * @param ensureBitSet
+   *          index of bit in {@code N} to ensure is set.
+   * @throws IllegalArgumentException
+   *           If the {@code certainty} is less than the system allowed lower bound, or the index of {@code ensureBitSet} is greater than the {@code bitLength}.
    */
   public Paillier(int bitLength, int certainty, int ensureBitSet)
   {
@@ -287,9 +301,11 @@
   /**
    * Returns the encrypted value of {@code m} using a generated random value.
    *
-   * @param m the value to be encrypted.
+   * @param m
+   *          the value to be encrypted.
    * @return the encrypted value
-   * @throws PIRException If {@code m} is not less than @{code N}.
+   * @throws PIRException
+   *           If {@code m} is not less than @{code N}.
    */
   public BigInteger encrypt(BigInteger m) throws PIRException
   {
@@ -306,10 +322,13 @@
   /**
    * Returns the ciphertext of a message using the given random value.
    *
-   * @param m the value to be encrypted.
-   * @param r the random value to use in the Pailler encryption.
+   * @param m
+   *          the value to be encrypted.
+   * @param r
+   *          the random value to use in the Pailler encryption.
    * @return the encrypted value.
-   * @throws PIRException If {@code m} is not less than @{code N}.
+   * @throws PIRException
+   *           If {@code m} is not less than @{code N}.
    */
   public BigInteger encrypt(BigInteger m, BigInteger r) throws PIRException
   {
@@ -328,7 +347,8 @@
   /**
    * Returns the plaintext message for a given ciphertext.
    *
-   * @param c an encrypted value.
+   * @param c
+   *          an encrypted value.
    * @return the corresponding plaintext value.
    */
   public BigInteger decrypt(BigInteger c)
diff --git a/src/main/java/org/apache/pirk/querier/wideskies/Querier.java b/src/main/java/org/apache/pirk/querier/wideskies/Querier.java
index efb5a11..bb08cbb 100644
--- a/src/main/java/org/apache/pirk/querier/wideskies/Querier.java
+++ b/src/main/java/org/apache/pirk/querier/wideskies/Querier.java
@@ -32,20 +32,27 @@
  */
 public class Querier implements Serializable, Storable
 {
+  private static final long serialVersionUID = 1L;
+
   public static final long querierSerialVersionUID = 1L;
 
-  @Expose public final long querierVersion = querierSerialVersionUID;
+  @Expose
+  public final long querierVersion = querierSerialVersionUID;
 
-  @Expose private Query query = null; // contains the query vectors and functionality
+  @Expose
+  private Query query = null; // contains the query vectors and functionality
 
-  @Expose private Paillier paillier = null; // Paillier encryption functionality
+  @Expose
+  private Paillier paillier = null; // Paillier encryption functionality
 
-  @Expose private List<String> selectors = null; // selectors
+  @Expose
+  private List<String> selectors = null; // selectors
 
   // map to check the embedded selectors in the results for false positives;
   // if the selector is a fixed size < 32 bits, it is included as is
   // if the selector is of variable lengths
-  @Expose private Map<Integer,String> embedSelectorMap = null;
+  @Expose
+  private Map<Integer,String> embedSelectorMap = null;
 
   public Querier(List<String> selectorsInput, Paillier paillierInput, Query queryInput, Map<Integer,String> embedSelectorMapInput)
   {
diff --git a/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java b/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java
index 6971a26..c74f6b1 100644
--- a/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java
+++ b/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java
@@ -41,7 +41,8 @@
 
   private static final Gson gson = new Gson();
 
-  @Override public Querier deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException
+  @Override
+  public Querier deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException
   {
     JsonObject jsonObject = jsonElement.getAsJsonObject();
     // Check the version number.
@@ -58,11 +59,9 @@
     Paillier paillier = deserializePaillier(jsonObject.get("paillier").getAsJsonObject());
 
     List<String> selectors = gson.fromJson(jsonObject.get("selectors").toString(), new TypeToken<List<String>>()
-    {
-    }.getType());
+    {}.getType());
     Map<Integer,String> embedSelectorMap = gson.fromJson(jsonObject.get("embedSelectorMap").toString(), new TypeToken<Map<Integer,String>>()
-    {
-    }.getType());
+    {}.getType());
 
     return new Querier(selectors, paillier, query, embedSelectorMap);
   }
@@ -70,7 +69,8 @@
   /**
    * Deserializes a Paillier JsonObject.
    *
-   * @param paillier A JsonObject at the root of a serialied Paillier object.
+   * @param paillier
+   *          A JsonObject at the root of a serialied Paillier object.
    * @return A Paillier object of the deserialized Json.
    */
   private Paillier deserializePaillier(JsonObject paillier)
diff --git a/src/main/java/org/apache/pirk/query/wideskies/Query.java b/src/main/java/org/apache/pirk/query/wideskies/Query.java
index 4922d9d..cf5a3a9 100644
--- a/src/main/java/org/apache/pirk/query/wideskies/Query.java
+++ b/src/main/java/org/apache/pirk/query/wideskies/Query.java
@@ -38,16 +38,21 @@
 
 public class Query implements Serializable, Storable
 {
+  private static final long serialVersionUID = 1L;
+
   public static final long querySerialVersionUID = 1L;
 
   // So that we can serialize the version number in gson.
-  @Expose public final long queryVersion = querySerialVersionUID;
+  @Expose
+  public final long queryVersion = querySerialVersionUID;
 
   private static final Logger logger = LoggerFactory.getLogger(Query.class);
 
-  @Expose private final QueryInfo queryInfo; // holds all query info
+  @Expose
+  private final QueryInfo queryInfo; // holds all query info
 
-  @Expose private final SortedMap<Integer,BigInteger> queryElements; // query elements - ordered on insertion
+  @Expose
+  private final SortedMap<Integer,BigInteger> queryElements; // query elements - ordered on insertion
 
   // lookup table for exponentiation of query vectors - based on dataPartitionBitSize
   // element -> <power, element^power mod N^2>
@@ -55,11 +60,14 @@
 
   // File based lookup table for modular exponentiation
   // element hash -> filename containing it's <power, element^power mod N^2> modular exponentiations
-  @Expose private Map<Integer,String> expFileBasedLookup = new HashMap<>();
+  @Expose
+  private Map<Integer,String> expFileBasedLookup = new HashMap<>();
 
-  @Expose private final BigInteger N; // N=pq, RSA modulus for the Paillier encryption associated with the queryElements
+  @Expose
+  private final BigInteger N; // N=pq, RSA modulus for the Paillier encryption associated with the queryElements
 
-  @Expose private final BigInteger NSquared;
+  @Expose
+  private final BigInteger NSquared;
 
   public Query(QueryInfo queryInfo, BigInteger N, SortedMap<Integer,BigInteger> queryElements)
   {
@@ -124,7 +132,8 @@
 
     queryElements.values().parallelStream().forEach(new Consumer<BigInteger>()
     {
-      @Override public void accept(BigInteger element)
+      @Override
+      public void accept(BigInteger element)
       {
         Map<Integer,BigInteger> powMap = new HashMap<>(maxValue); // <power, element^power mod N^2>
         for (int i = 0; i <= maxValue; ++i)
diff --git a/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java b/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java
index 92fdfa0..3a5256d 100644
--- a/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java
+++ b/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java
@@ -52,7 +52,8 @@
 
   private static final Gson gson = new Gson();
 
-  @Override public Query deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException
+  @Override
+  public Query deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException
   {
     JsonObject jsonObject = jsonElement.getAsJsonObject();
     logger.info("Got query json:" + jsonObject.toString());
@@ -66,13 +67,11 @@
     // Then deserialize the Query Info
     QueryInfo queryInfo = deserializeInfo(jsonObject.get("queryInfo").getAsJsonObject());
     SortedMap<Integer,BigInteger> queryElements = gson.fromJson(jsonObject.get("queryElements"), new TypeToken<SortedMap<Integer,BigInteger>>()
-    {
-    }.getType());
+    {}.getType());
     BigInteger N = new BigInteger(jsonObject.get("n").getAsString());
     BigInteger NSquared = new BigInteger(jsonObject.get("nsquared").getAsString());
     Map<Integer,String> expFileBasedLookup = gson.fromJson(jsonObject.get("expFileBasedLookup"), new TypeToken<Map<Integer,String>>()
-    {
-    }.getType());
+    {}.getType());
 
     Query query = new Query(queryInfo, N, NSquared, queryElements);
     query.setExpFileBasedLookup(expFileBasedLookup);
@@ -82,7 +81,8 @@
   /**
    * Deserializes a QueryInfo JsonObject
    *
-   * @param queryInfoJson A JsonObject at the root of a serialized QueryInfo object.
+   * @param queryInfoJson
+   *          A JsonObject at the root of a serialized QueryInfo object.
    * @return A QueryInfo object of the deserialized Json.
    * @throws JsonParseException
    */
@@ -116,7 +116,8 @@
   /**
    * Deserializes a QuerySchema JsonObject
    *
-   * @param querySchemaJson A JsonObject at the root of a serialized QuerySchema object.
+   * @param querySchemaJson
+   *          A JsonObject at the root of a serialized QuerySchema object.
    * @return A QuerySchema object of the deserialized Json.
    * @throws JsonParseException
    */
@@ -134,8 +135,7 @@
     try
     {
       filteredElementNames = gson.fromJson(querySchemaJson.get("filteredElementNames"), new TypeToken<Set<String>>()
-      {
-      }.getType());
+      {}.getType());
     } catch (Exception e)
     {
       logger.warn("No filtered element names for Query Schema deserialization.");
@@ -155,12 +155,10 @@
     QuerySchema querySchema = new QuerySchema(querySchemaJson.get("schemaName").getAsString(), querySchemaJson.get("dataSchemaName").getAsString(),
         querySchemaJson.get("selectorName").getAsString(), dataFilterName, dataFilter, querySchemaJson.get("dataElementSize").getAsInt());
     List<String> elementNames = gson.fromJson(querySchemaJson.get("elementNames"), new TypeToken<List<String>>()
-    {
-    }.getType());
+    {}.getType());
     querySchema.getElementNames().addAll(elementNames);
     HashMap<String,String> additionalFields = gson.fromJson(querySchemaJson.get("additionalFields"), new TypeToken<HashMap<String,String>>()
-    {
-    }.getType());
+    {}.getType());
     querySchema.getAdditionalFields().putAll(additionalFields);
     return querySchema;
   }
diff --git a/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java b/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java
index 20fbb36..999bf76 100644
--- a/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java
+++ b/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java
@@ -38,39 +38,54 @@
  */
 public class QueryInfo implements Serializable, Cloneable
 {
+  private static final long serialVersionUID = 1L;
+
   public static final long queryInfoSerialVersionUID = 1L;
 
   // So that we can serialize the version number in gson.
-  @Expose public final long queryInfoVersion = queryInfoSerialVersionUID;
+  @Expose
+  public final long queryInfoVersion = queryInfoSerialVersionUID;
 
   private static final Logger logger = LoggerFactory.getLogger(QueryInfo.class);
 
-  @Expose private UUID identifier; // the identifier of the query
+  @Expose
+  private UUID identifier; // the identifier of the query
 
-  @Expose private int numSelectors = 0; // the number of selectors in the query, given by \floor{paillerBitSize/dataPartitionBitSize}
+  @Expose
+  private int numSelectors = 0; // the number of selectors in the query, given by \floor{paillerBitSize/dataPartitionBitSize}
 
-  @Expose private String queryType = null; // QueryType string const
+  @Expose
+  private String queryType = null; // QueryType string const
 
-  @Expose private int hashBitSize = 0; // Bit size of the keyed hash function
+  @Expose
+  private int hashBitSize = 0; // Bit size of the keyed hash function
 
-  @Expose private String hashKey; // Key for the keyed hash function
+  @Expose
+  private String hashKey; // Key for the keyed hash function
 
-  @Expose private int numBitsPerDataElement = 0; // total num bits per returned data value - defined relative to query type
+  @Expose
+  private int numBitsPerDataElement = 0; // total num bits per returned data value - defined relative to query type
 
-  @Expose private int dataPartitionBitSize = 0; // num of bits for each partition of an incoming data element, must be < 32 right now
+  @Expose
+  private int dataPartitionBitSize = 0; // num of bits for each partition of an incoming data element, must be < 32 right now
 
-  @Expose private int numPartitionsPerDataElement = 0; // num partitions of size dataPartitionBitSize per data element
+  @Expose
+  private int numPartitionsPerDataElement = 0; // num partitions of size dataPartitionBitSize per data element
 
-  @Expose private boolean useExpLookupTable = false; // whether or not to generate and use the expLookupTable for encryption, it is very expensive to compute
+  @Expose
+  private boolean useExpLookupTable = false; // whether or not to generate and use the expLookupTable for encryption, it is very expensive to compute
 
-  @Expose private boolean useHDFSExpLookupTable = false; // whether or not to use the expLookupTable stored in HDFS
+  @Expose
+  private boolean useHDFSExpLookupTable = false; // whether or not to use the expLookupTable stored in HDFS
   // if it doesn't yet exist, it will be created within the cluster and stored in HDFS
 
-  @Expose private boolean embedSelector = true; // whether or not to embed the selector in the results - results in a very low
+  @Expose
+  private boolean embedSelector = true; // whether or not to embed the selector in the results - results in a very low
 
   // false positive rate for variable length selectors and a zero false positive rate
   // for selectors of fixed size < 32 bits
-  @Expose private QuerySchema qSchema = null;
+  @Expose
+  private QuerySchema qSchema = null;
 
   public QueryInfo(int numSelectorsInput, int hashBitSizeInput, String hashKeyInput, int dataPartitionBitSizeInput, String queryTypeInput,
       boolean useExpLookupTableInput, boolean embedSelectorInput, boolean useHDFSExpLookupTableInput)
@@ -253,7 +268,8 @@
         + useHDFSExpLookupTable + " embedSelector = " + embedSelector);
   }
 
-  @Override public QueryInfo clone()
+  @Override
+  public QueryInfo clone()
   {
     try
     {
diff --git a/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java b/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java
index ef24326..f69f9cf 100644
--- a/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java
+++ b/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java
@@ -406,7 +406,7 @@
     optionAllowEmbeddedQS.setArgName(ResponderProps.ALLOWEMBEDDEDQUERYSCHEMAS);
     optionAllowEmbeddedQS.setType(String.class);
     options.addOption(optionAllowEmbeddedQS);
-    
+
     // embedQS
     Option optionEmbedQS = new Option("embedQS", ResponderProps.EMBEDQUERYSCHEMA, true,
         "optional -- 'true' or 'false'  (defaults to 'false') -- " + "If true, the embedded QuerySchema for the query.");
diff --git a/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java b/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java
index 7124531..8180df8 100644
--- a/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java
+++ b/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java
@@ -266,7 +266,7 @@
     {
       SystemConfiguration.setProperty(EMBEDQUERYSCHEMA, "false");
     }
-    
+
     if (!SystemConfiguration.hasProperty(USELOCALCACHE))
     {
       SystemConfiguration.setProperty(USELOCALCACHE, "true");
diff --git a/src/main/java/org/apache/pirk/response/wideskies/Response.java b/src/main/java/org/apache/pirk/response/wideskies/Response.java
index b94b977..5fa0abd 100644
--- a/src/main/java/org/apache/pirk/response/wideskies/Response.java
+++ b/src/main/java/org/apache/pirk/response/wideskies/Response.java
@@ -33,13 +33,18 @@
  */
 public class Response implements Serializable, Storable
 {
+  private static final long serialVersionUID = 1L;
+
   public static final long responseSerialVersionUID = 1L;
 
-  @Expose public final long responseVersion = responseSerialVersionUID;
+  @Expose
+  public final long responseVersion = responseSerialVersionUID;
 
-  @Expose private QueryInfo queryInfo = null; // holds all query info
+  @Expose
+  private QueryInfo queryInfo = null; // holds all query info
 
-  @Expose private TreeMap<Integer,BigInteger> responseElements = null; // encrypted response columns, colNum -> column
+  @Expose
+  private TreeMap<Integer,BigInteger> responseElements = null; // encrypted response columns, colNum -> column
 
   public Response(QueryInfo queryInfoInput)
   {
diff --git a/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java b/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java
index f1588c6..719833f 100644
--- a/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java
+++ b/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java
@@ -40,7 +40,8 @@
 
   private static final Gson gson = new Gson();
 
-  @Override public Response deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException
+  @Override
+  public Response deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException
   {
     final JsonObject jsonObject = jsonElement.getAsJsonObject();
     long responseVersion = jsonObject.get("responseVersion").getAsLong();
@@ -52,10 +53,8 @@
     QueryInfo queryInfo = QueryDeserializer.deserializeInfo(jsonObject.get("queryInfo").getAsJsonObject());
     Response response = new Response(queryInfo);
     TreeMap<Integer,BigInteger> responseElements = gson.fromJson(jsonObject.get("responseElements"), new TypeToken<TreeMap<Integer,BigInteger>>()
-    {
-    }.getType());
+    {}.getType());
     response.setResponseElements(responseElements);
     return response;
   }
 }
-
diff --git a/src/main/java/org/apache/pirk/schema/query/QuerySchema.java b/src/main/java/org/apache/pirk/schema/query/QuerySchema.java
index c22c384..59d74fe 100644
--- a/src/main/java/org/apache/pirk/schema/query/QuerySchema.java
+++ b/src/main/java/org/apache/pirk/schema/query/QuerySchema.java
@@ -33,38 +33,49 @@
  */
 public class QuerySchema implements Serializable
 {
+  private static final long serialVersionUID = 1L;
+
   public static final long querySchemaSerialVersionUID = 1L;
 
   // So that we can serialize the version number in gson.
-  @Expose public final long querySchemaVersion = querySchemaSerialVersionUID;
+  @Expose
+  public final long querySchemaVersion = querySchemaSerialVersionUID;
 
   // This schema's name.
-  @Expose private final String schemaName;
+  @Expose
+  private final String schemaName;
 
   // Name of the data schema associated with this query schema.
-  @Expose private final String dataSchemaName;
+  @Expose
+  private final String dataSchemaName;
 
   // Name of element in the dataSchema to be used as the selector.
-  @Expose private final String selectorName;
+  @Expose
+  private final String selectorName;
 
   // Element names from the data schema to include in the response.
   // Order matters for packing/unpacking.
-  @Expose private final List<String> elementNames = new ArrayList<>();
+  @Expose
+  private final List<String> elementNames = new ArrayList<>();
 
   // Name of class to use in data filtering.
-  @Expose private final String filterTypeName;
+  @Expose
+  private final String filterTypeName;
 
   // Instance of the filterTypeName.
   private final DataFilter filter;
 
   // Set of data schema element names on which to apply filtering.
-  @Expose private final Set<String> filteredElementNames = new HashSet<>();
+  @Expose
+  private final Set<String> filteredElementNames = new HashSet<>();
 
   // Total number of bits to be returned for each data element hit.
-  @Expose private final int dataElementSize;
+  @Expose
+  private final int dataElementSize;
 
   // Addiional fields by key,value
-  @Expose private final HashMap<String,String> additionalFields = new HashMap<>();
+  @Expose
+  private final HashMap<String,String> additionalFields = new HashMap<>();
 
   public QuerySchema(String schemaName, String dataSchemaName, String selectorName, String filterTypeName, DataFilter filter, int dataElementSize)
   {
diff --git a/src/main/java/org/apache/pirk/serialization/JsonSerializer.java b/src/main/java/org/apache/pirk/serialization/JsonSerializer.java
index ea4cabd..d3246ce 100644
--- a/src/main/java/org/apache/pirk/serialization/JsonSerializer.java
+++ b/src/main/java/org/apache/pirk/serialization/JsonSerializer.java
@@ -44,11 +44,15 @@
   /**
    * Stores the given object on the output stream as JSON.
    *
-   * @param outputStream The stream on which to store the object.
-   * @param obj          The object to be stored.
-   * @throws IOException If a problem occurs storing the object on the given stream.
+   * @param outputStream
+   *          The stream on which to store the object.
+   * @param obj
+   *          The object to be stored.
+   * @throws IOException
+   *           If a problem occurs storing the object on the given stream.
    */
-  @Override public void write(OutputStream outputStream, Storable obj) throws IOException
+  @Override
+  public void write(OutputStream outputStream, Storable obj) throws IOException
   {
     Writer writer = new OutputStreamWriter(outputStream);
     gson.toJson(obj, obj.getClass(), writer);
@@ -58,11 +62,15 @@
   /**
    * Read a JSON string from the given input stream and returns the Object representation.
    *
-   * @param inputStream The stream from which to read the object.
-   * @param classType   The type of object being retrieved.
-   * @throws IOException If a problem occurs reading the object from the stream.
+   * @param inputStream
+   *          The stream from which to read the object.
+   * @param classType
+   *          The type of object being retrieved.
+   * @throws IOException
+   *           If a problem occurs reading the object from the stream.
    */
-  @Override public <T> T read(InputStream inputStream, Class<T> classType) throws IOException
+  @Override
+  public <T> T read(InputStream inputStream, Class<T> classType) throws IOException
   {
     Reader reader = new InputStreamReader(inputStream);
     return gson.fromJson(reader, classType);
diff --git a/src/main/java/org/apache/pirk/serialization/StorageService.java b/src/main/java/org/apache/pirk/serialization/StorageService.java
index 74f7f03..2f85553 100644
--- a/src/main/java/org/apache/pirk/serialization/StorageService.java
+++ b/src/main/java/org/apache/pirk/serialization/StorageService.java
@@ -18,6 +18,8 @@
  *******************************************************************************/
 package org.apache.pirk.serialization;
 
+import org.apache.pirk.utils.SystemConfiguration;
+
 /**
  * Common supertype for types that can store objects using serialization.
  */
@@ -27,7 +29,14 @@
 
   StorageService()
   {
-    this.setSerializer(new JsonSerializer());
+    if (SystemConfiguration.getBooleanProperty("pirk.serialization.java", false))
+    {
+      this.setSerializer(new JavaSerializer());
+    }
+    else
+    {
+      this.setSerializer(new JsonSerializer());
+    }
   }
 
   StorageService(SerializationService service)
diff --git a/src/main/resources/pirk.properties b/src/main/resources/pirk.properties
index 543b8b1..4a76beb 100755
--- a/src/main/resources/pirk.properties
+++ b/src/main/resources/pirk.properties
@@ -82,6 +82,9 @@
 #Comma separated list of local query schema files to load, fully qualified file names
 query.schemas = none
 
+#Whether or not to use Java serialization (otherwise, JSON serialization is used)
+pirk.serialization.java=true
+
 ##
 ##Properties for ElasticSearch compatibility
 ##
