diff --git a/core/api/src/main/java/org/onlab/onos/store/service/DatabaseService.java b/core/api/src/main/java/org/onlab/onos/store/service/DatabaseService.java
index 57d81f2..2779fe6 100644
--- a/core/api/src/main/java/org/onlab/onos/store/service/DatabaseService.java
+++ b/core/api/src/main/java/org/onlab/onos/store/service/DatabaseService.java
@@ -13,7 +13,7 @@
      * @returns value (and version) associated with this key. This calls returns null if the key does not exist.
      */
     VersionedValue get(String tableName, String key);
-    
+
     /**
      * Associate the key with a value.
      * @param tableName table name in which this key/value resides.
@@ -22,7 +22,7 @@
      * @return the previous value associated with the specified key, or null if there was no mapping for the key.
      */
     VersionedValue put(String tableName, String key, byte[] value);
-    
+
     /**
      * If the specified key is not already associated with a value, associate it with the given value.
      * @param tableName table name in which this key/value resides.
@@ -31,7 +31,7 @@
      * @return true if put was successful, false if there is already a value associated with this key
      */
     boolean putIfAbsent(String tableName, String key, byte[] value);
-    
+
     /**
      * Sets the key to the specified value if the version in the database (for that key)
      * matches the specified version.
@@ -42,7 +42,7 @@
      * @return true if put was successful, false if there version in database is different from what is specified.
      */
     boolean putIfVersionMatches(String tableName, String key, byte[] value, long version);
-    
+
     /**
      * Replaces the entry for a key only if currently mapped to a given value.
      * @param tableName name of table associated with this operation.
@@ -52,7 +52,7 @@
      * @return true if put was successful, false if there version in database is different from what is specified.
      */
     boolean putIfValueMatches(String tableName, String key, byte[] oldValue, byte[] newValue);
-    
+
     /**
      * Removes the key (and associated value).
      * @param tableName name of table associated with this operation.
@@ -60,7 +60,7 @@
      * @return value previously associated with the key. This call returns null if the key does not exist.
      */
     VersionedValue remove(String tableName, String key);
-    
+
     /**
      * Removes the key (and associated value) if the version in the database matches specified version.
      * @param tableName name of table associated with this operation.
@@ -69,7 +69,7 @@
      * @return true if remove was successful, false if there version in database is different from what is specified.
      */
     boolean removeIfVersionMatches(String tableName, String key, long version);
-    
+
     /**
      * Removes the key (and associated value) if the value in the database matches specified value.
      * @param tableName name of table associated with this operation.
@@ -78,14 +78,14 @@
      * @return true if remove was successful, false if there value in database is different from what is specified.
      */
     boolean removeIfValueMatches(String tableName, String key, byte[] value);
-    
+
     /**
      * Performs a batch read operation and returns the results.
      * @param batchRequest batch request.
      * @return result of the batch operation.
      */
     BatchReadResult batchRead(BatchReadRequest batchRequest);
-    
+
     /**
      * Performs a batch write operation and returns the results.
      * This method provides transactional semantics. Either all writes succeed or none do.
@@ -96,4 +96,4 @@
      * @return result of the batch operation.
      */
     BatchWriteResult batchWrite(BatchWriteRequest batchRequest);
-}
\ No newline at end of file
+}
