diff --git a/.gitignore b/.gitignore
index 8d0bf0b..d8a339e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
 .settings
 /target
 site/_site
+build
diff --git a/pom.xml b/pom.xml
index 24449e7..e103468 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,7 +70,7 @@
     <dependency>
       <groupId>org.apache.accumulo</groupId>
       <artifactId>accumulo-core</artifactId>
-      <version>1.5.1-SNAPSHOT</version>
+      <version>1.5.0</version>
     </dependency>
     <dependency>
       <groupId>joda-time</groupId>
@@ -96,7 +96,7 @@
     <dependency>
       <groupId>org.apache.accumulo</groupId>
       <artifactId>accumulo-minicluster</artifactId>
-      <version>1.5.1-SNAPSHOT</version>
+      <version>1.5.0</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/src/main/java/org/apache/accumulo/pig/AbstractAccumuloStorage.java b/src/main/java/org/apache/accumulo/pig/AbstractAccumuloStorage.java
index b3e91fc..2c21b95 100644
--- a/src/main/java/org/apache/accumulo/pig/AbstractAccumuloStorage.java
+++ b/src/main/java/org/apache/accumulo/pig/AbstractAccumuloStorage.java
@@ -17,6 +17,8 @@
 package org.apache.accumulo.pig;
 
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Collection;
@@ -139,7 +141,7 @@
       simpleUnset(conf, entriesToUnset);
     } else {
       // If we're running on something else, we have to remove everything and re-add it
-      replaceUnset(conf, entriesToUnset);
+      clearUnset(conf, entriesToUnset);
     }
   }
   
@@ -149,8 +151,24 @@
    * @param entriesToUnset
    */
   protected void simpleUnset(Configuration conf, Map<String,String> entriesToUnset) {
-    for (String key : entriesToUnset.keySet()) {
-      conf.unset(key);
+    try {
+      Method unset = conf.getClass().getMethod("unset", String.class);
+      
+      for (String key : entriesToUnset.keySet()) {
+        unset.invoke(conf, key);
+      }
+    } catch (NoSuchMethodException e) {
+      LOG.error("Could not invoke Configuration.unset method", e);
+      throw new RuntimeException(e);
+    } catch (IllegalAccessException e) {
+      LOG.error("Could not invoke Configuration.unset method", e);
+      throw new RuntimeException(e);
+    } catch (IllegalArgumentException e) {
+      LOG.error("Could not invoke Configuration.unset method", e);
+      throw new RuntimeException(e);
+    } catch (InvocationTargetException e) {
+      LOG.error("Could not invoke Configuration.unset method", e);
+      throw new RuntimeException(e);
     }
   }
   
@@ -160,7 +178,7 @@
    * @param conf
    * @param entriesToUnset
    */
-  protected void replaceUnset(Configuration conf, Map<String,String> entriesToUnset) {
+  protected void clearUnset(Configuration conf, Map<String,String> entriesToUnset) {
     // Gets a copy of the entries
     Iterator<Entry<String,String>> originalEntries = conf.iterator();
     conf.clear();
diff --git a/src/main/java/org/apache/accumulo/pig/AccumuloStorage.java b/src/main/java/org/apache/accumulo/pig/AccumuloStorage.java
index 742480c..d2be9b6 100644
--- a/src/main/java/org/apache/accumulo/pig/AccumuloStorage.java
+++ b/src/main/java/org/apache/accumulo/pig/AccumuloStorage.java
@@ -1,3 +1,19 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
 package org.apache.accumulo.pig;
 
 import java.io.IOException;
diff --git a/src/main/java/org/apache/accumulo/pig/FORMAT.java b/src/main/java/org/apache/accumulo/pig/FORMAT.java
index a72987a..16a85ca 100644
--- a/src/main/java/org/apache/accumulo/pig/FORMAT.java
+++ b/src/main/java/org/apache/accumulo/pig/FORMAT.java
@@ -1,3 +1,19 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
 package org.apache.accumulo.pig;
 
 import java.io.IOException;
diff --git a/src/test/java/org/apache/accumulo/pig/AccumuloPigClusterTest.java b/src/test/java/org/apache/accumulo/pig/AccumuloPigClusterTest.java
index 10b0a2a..d53620d 100644
--- a/src/test/java/org/apache/accumulo/pig/AccumuloPigClusterTest.java
+++ b/src/test/java/org/apache/accumulo/pig/AccumuloPigClusterTest.java
@@ -1,3 +1,19 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
 package org.apache.accumulo.pig;
 
 import java.io.File;
diff --git a/src/test/java/org/apache/accumulo/pig/AccumuloStorageConfigurationTest.java b/src/test/java/org/apache/accumulo/pig/AccumuloStorageConfigurationTest.java
index 079cc0c..c58d26d 100644
--- a/src/test/java/org/apache/accumulo/pig/AccumuloStorageConfigurationTest.java
+++ b/src/test/java/org/apache/accumulo/pig/AccumuloStorageConfigurationTest.java
@@ -1,3 +1,19 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
 package org.apache.accumulo.pig;
 
 import java.util.HashMap;
@@ -8,6 +24,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class AccumuloStorageConfigurationTest {
@@ -41,9 +58,78 @@
     return contents;
   }
   
+  @Test
+  public void testClearEquivalenceStrings() {
+    Configuration clearCopy = new Configuration(original);
+    
+    Assert.assertEquals(getContents(original), getContents(clearCopy));
+    
+    Map<String,String>  entriesToUnset = new HashMap<String,String>();
+    entriesToUnset.put("string1", "foo");
+    entriesToUnset.put("string3", "bar");
+    
+    storage.clearUnset(clearCopy, entriesToUnset);
+    
+    Configuration originalCopy = new Configuration();
+    for (Entry<String,String> entry : original) {
+      if (!"string1".equals(entry.getKey()) && !"string3".equals(entry.getKey())) {
+        originalCopy.set(entry.getKey(), entry.getValue());
+      }
+    }
+    
+    Assert.assertEquals(getContents(originalCopy), getContents(clearCopy));
+  }
   
   @Test
-  public void testEquivalence() {
+  public void testClearEquivalenceOnTypes() {
+    Configuration clearCopy = new Configuration(original);
+    
+    Assert.assertEquals(getContents(original), getContents(clearCopy));
+    
+    Map<String,String>  entriesToUnset = new HashMap<String,String>();
+    entriesToUnset.put("long", "foo");
+    entriesToUnset.put("boolean", "bar");
+    entriesToUnset.put("integer", "foobar");
+    
+    storage.clearUnset(clearCopy, entriesToUnset);
+    
+    Configuration originalCopy = new Configuration();
+    for (Entry<String,String> entry : original) {
+      if (!"long".equals(entry.getKey()) && !"boolean".equals(entry.getKey()) &&
+          !"integer".equals(entry.getKey())) {
+        originalCopy.set(entry.getKey(), entry.getValue());
+      }
+    }
+    
+    Assert.assertEquals(getContents(originalCopy), getContents(clearCopy));
+  }
+  
+  @Ignore // Ignored until dependency gets updated to Hadoop >=1.2.0 and we have Configuration#unset
+  @Test
+  public void testUnsetEquivalenceStrings() {
+    Configuration unsetCopy = new Configuration(original);
+    
+    Assert.assertEquals(getContents(original), getContents(unsetCopy));
+    
+    Map<String,String>  entriesToUnset = new HashMap<String,String>();
+    entriesToUnset.put("string1", "foo");
+    entriesToUnset.put("string3", "bar");
+    
+    storage.simpleUnset(unsetCopy, entriesToUnset);
+    
+    Configuration originalCopy = new Configuration();
+    for (Entry<String,String> entry : original) {
+      if (!"string1".equals(entry.getKey()) && !"string2".equals(entry.getKey())) {
+        originalCopy.set(entry.getKey(), entry.getValue());
+      }
+    }
+    
+    Assert.assertEquals(getContents(originalCopy), getContents(unsetCopy));
+  }
+  
+  @Ignore // Ignored until dependency gets updated to Hadoop >=1.2.0 and we have Configuration#unset
+  @Test
+  public void testEquivalenceStrings() {
     Configuration unsetCopy = new Configuration(original), clearCopy = new Configuration(original);
     
     Assert.assertEquals(getContents(unsetCopy), getContents(clearCopy));
@@ -53,24 +139,28 @@
     entriesToUnset.put("string3", "bar");
     
     storage.simpleUnset(unsetCopy, entriesToUnset);
-    storage.replaceUnset(clearCopy, entriesToUnset);
+    storage.clearUnset(clearCopy, entriesToUnset);
     
     Assert.assertEquals(getContents(unsetCopy), getContents(clearCopy));
     
-    Configuration originalCopy = new Configuration(original);
-    originalCopy.unset("string1");
-    originalCopy.unset("string3");
+    Configuration originalCopy = new Configuration();
+    for (Entry<String,String> entry : original) {
+      if (!"string1".equals(entry.getKey()) && !"string2".equals(entry.getKey())) {
+        originalCopy.set(entry.getKey(), entry.getValue());
+      }
+    }
     
     Assert.assertEquals(getContents(originalCopy), getContents(unsetCopy));
     Assert.assertEquals(getContents(originalCopy), getContents(clearCopy));
   }
   
-  
+  @Ignore // Ignored until dependency gets updated to Hadoop >=1.2.0 and we have Configuration#unset
   @Test
   public void testEquivalenceOnTypes() {
     Configuration unsetCopy = new Configuration(original), clearCopy = new Configuration(original);
     
-    Assert.assertEquals(getContents(unsetCopy), getContents(clearCopy));
+    Assert.assertEquals(getContents(original), getContents(unsetCopy));
+    Assert.assertEquals(getContents(original), getContents(clearCopy));
     
     Map<String,String>  entriesToUnset = new HashMap<String,String>();
     entriesToUnset.put("long", "foo");
@@ -78,17 +168,42 @@
     entriesToUnset.put("integer", "foobar");
     
     storage.simpleUnset(unsetCopy, entriesToUnset);
-    storage.replaceUnset(clearCopy, entriesToUnset);
+    storage.clearUnset(clearCopy, entriesToUnset);
     
-    Assert.assertEquals(getContents(unsetCopy), getContents(clearCopy));
-    
-    Configuration originalCopy = new Configuration(original);
-    originalCopy.unset("long");
-    originalCopy.unset("boolean");
-    originalCopy.unset("integer");
+    Configuration originalCopy = new Configuration();
+    for (Entry<String,String> entry : original) {
+      if (!"long".equals(entry.getKey()) && !"boolean".equals(entry.getKey()) &&
+          !"integer".equals(entry.getKey())) {
+        originalCopy.set(entry.getKey(), entry.getValue());
+      }
+    }
     
     Assert.assertEquals(getContents(originalCopy), getContents(unsetCopy));
     Assert.assertEquals(getContents(originalCopy), getContents(clearCopy));
   }
-
+  
+  @Ignore // Ignored until dependency gets updated to Hadoop >=1.2.0 and we have Configuration#unset
+  @Test
+  public void testUnsetEquivalenceOnTypes() {
+    Configuration unsetCopy = new Configuration(original);
+    
+    Assert.assertEquals(getContents(original), getContents(unsetCopy));
+    
+    Map<String,String>  entriesToUnset = new HashMap<String,String>();
+    entriesToUnset.put("long", "foo");
+    entriesToUnset.put("boolean", "bar");
+    entriesToUnset.put("integer", "foobar");
+    
+    storage.simpleUnset(unsetCopy, entriesToUnset);
+    
+    Configuration originalCopy = new Configuration();
+    for (Entry<String,String> entry : original) {
+      if (!"long".equals(entry.getKey()) && !"boolean".equals(entry.getKey()) &&
+          !"integer".equals(entry.getKey())) {
+        originalCopy.set(entry.getKey(), entry.getValue());
+      }
+    }
+    
+    Assert.assertEquals(getContents(originalCopy), getContents(unsetCopy));
+  }
 }
diff --git a/src/test/java/org/apache/accumulo/pig/AccumuloStorageTest.java b/src/test/java/org/apache/accumulo/pig/AccumuloStorageTest.java
index aa88191..d102d64 100644
--- a/src/test/java/org/apache/accumulo/pig/AccumuloStorageTest.java
+++ b/src/test/java/org/apache/accumulo/pig/AccumuloStorageTest.java
@@ -1,3 +1,19 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
 package org.apache.accumulo.pig;
 
 import java.io.IOException;
diff --git a/src/test/java/org/apache/pig/test/MiniCluster.java b/src/test/java/org/apache/pig/test/MiniCluster.java
index 64467ae..aacd30f 100644
--- a/src/test/java/org/apache/pig/test/MiniCluster.java
+++ b/src/test/java/org/apache/pig/test/MiniCluster.java
@@ -1,4 +1,3 @@
-package org.apache.pig.test;
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -16,6 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.pig.test;
 
 
 import java.io.File;
diff --git a/src/test/java/org/apache/pig/test/MiniGenericCluster.java b/src/test/java/org/apache/pig/test/MiniGenericCluster.java
index 584631a..b4ea84f 100644
--- a/src/test/java/org/apache/pig/test/MiniGenericCluster.java
+++ b/src/test/java/org/apache/pig/test/MiniGenericCluster.java
@@ -1,4 +1,3 @@
-package org.apache.pig.test;
 /**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -16,6 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.pig.test;
 
 
 import java.io.*;
