diff --git a/CHANGES.txt b/CHANGES.txt
index b1f96c1..1ef021f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -31,6 +31,9 @@
   OPTIMIZATIONS
 
   BUG FIXES
+
+  HCAT-628 Committer deletes the original partition when a duplicate partition fails registration (thiruvel via daijy)
+
   HCAT-554 Loading data using HCatLoader() from a table on non default namenode fails. (amalakar via avandana)
 
   HCAT-629 First request always fails for webhcat (kamrul via gates)
diff --git a/core/src/main/java/org/apache/hcatalog/mapreduce/FileOutputCommitterContainer.java b/core/src/main/java/org/apache/hcatalog/mapreduce/FileOutputCommitterContainer.java
index b913482..464d334 100644
--- a/core/src/main/java/org/apache/hcatalog/mapreduce/FileOutputCommitterContainer.java
+++ b/core/src/main/java/org/apache/hcatalog/mapreduce/FileOutputCommitterContainer.java
@@ -681,14 +681,14 @@
                 // no harProcessor, regular operation
                 updateTableSchema(client, table, jobInfo.getOutputSchema());
                 LOG.info("HAR not is not being used. The table {} has new partitions {}.", table.getTableName(), ptnInfos);
-                partitionsAdded = partitionsToAdd;
-                if (dynamicPartitioningUsed && (partitionsAdded.size()>0)){
+                if (dynamicPartitioningUsed && (partitionsToAdd.size()>0)){
                     Path src = new Path(ptnRootLocation);
                     moveTaskOutputs(fs, src, src, tblPath, true);
                     moveTaskOutputs(fs, src, src, tblPath, false);
                     fs.delete(src, true);
                 }
                 client.add_partitions(partitionsToAdd);
+                partitionsAdded = partitionsToAdd;
             }
         } catch (Exception e) {
             if (partitionsAdded.size() > 0) {
diff --git a/core/src/test/java/org/apache/hcatalog/mapreduce/TestHCatDynamicPartitioned.java b/core/src/test/java/org/apache/hcatalog/mapreduce/TestHCatDynamicPartitioned.java
index db00bec..491316c 100644
--- a/core/src/test/java/org/apache/hcatalog/mapreduce/TestHCatDynamicPartitioned.java
+++ b/core/src/test/java/org/apache/hcatalog/mapreduce/TestHCatDynamicPartitioned.java
@@ -160,6 +160,24 @@
                             || (ErrorType.ERROR_MOVE_FAILED == ((HCatException) exc).getErrorType())
             );
         }
+
+        query = "show partitions " + tableName;
+        retCode = driver.run(query).getResponseCode();
+        if (retCode != 0) {
+            throw new Exception("Error " + retCode + " running query " + query);
+        }
+        res = new ArrayList<String>();
+        driver.getResults(res);
+        assertEquals(NUM_PARTITIONS, res.size());
+
+        query = "select * from " + tableName;
+        retCode = driver.run(query).getResponseCode();
+        if (retCode != 0) {
+            throw new Exception("Error " + retCode + " running query " + query);
+        }
+        res = new ArrayList<String>();
+        driver.getResults(res);
+        assertEquals(NUM_RECORDS, res.size());
     }
 
     //TODO 1.0 miniCluster is slow this test times out, make it work
