diff --git a/storage-narpc/src/main/java/org/apache/crail/storage/tcp/TcpStorageServer.java b/storage-narpc/src/main/java/org/apache/crail/storage/tcp/TcpStorageServer.java
index 1ce51c5..a66537f 100644
--- a/storage-narpc/src/main/java/org/apache/crail/storage/tcp/TcpStorageServer.java
+++ b/storage-narpc/src/main/java/org/apache/crail/storage/tcp/TcpStorageServer.java
@@ -18,7 +18,6 @@
 
 package org.apache.crail.storage.tcp;
 
-import java.io.File;
 import java.io.RandomAccessFile;
 import java.net.InetSocketAddress;
 import java.nio.ByteBuffer;
@@ -64,8 +63,8 @@
 		this.regions = TcpStorageConstants.STORAGE_TCP_STORAGE_LIMIT/TcpStorageConstants.STORAGE_TCP_ALLOCATION_SIZE;
 		this.keys = 0;
 		this.dataBuffers = new ConcurrentHashMap<Integer, ByteBuffer>();
-		this.dataDirPath = getDatanodeDirectory(address);
-		clean();
+		this.dataDirPath = StorageUtils.getDatanodeDirectory(TcpStorageConstants.STORAGE_TCP_DATA_PATH, address);
+		StorageUtils.clean(TcpStorageConstants.STORAGE_TCP_DATA_PATH, dataDirPath);
 	}
 
 	@Override
@@ -145,21 +144,4 @@
 			return new TcpStorageResponse(TcpStorageProtocol.RET_RPC_UNKNOWN);
 		}
 	}
-	
-	private void clean(){
-		File dataDir = new File(dataDirPath);
-		if (!dataDir.exists()){
-			dataDir.mkdirs();
-		}
-		for (File child : dataDir.listFiles()) {
-			child.delete();
-		}
-	}	
-	
-	public static String getDatanodeDirectory(InetSocketAddress address) throws IllegalArgumentException {
-		if (address == null) {
-			throw new IllegalArgumentException("Address paramater cannot be null!");
-		}
-		return TcpStorageConstants.STORAGE_TCP_DATA_PATH + address.getAddress() + "-"  + address.getPort();
-	}	
 }
diff --git a/storage-rdma/src/main/java/org/apache/crail/storage/rdma/RdmaStorageServer.java b/storage-rdma/src/main/java/org/apache/crail/storage/rdma/RdmaStorageServer.java
index fe5ac00..847fcf2 100644
--- a/storage-rdma/src/main/java/org/apache/crail/storage/rdma/RdmaStorageServer.java
+++ b/storage-rdma/src/main/java/org/apache/crail/storage/rdma/RdmaStorageServer.java
@@ -18,7 +18,6 @@
 
 package org.apache.crail.storage.rdma;
 
-import java.io.File;
 import java.io.RandomAccessFile;
 import java.net.InetSocketAddress;
 import java.nio.ByteBuffer;
@@ -70,12 +69,11 @@
 		datanodeGroup.init(new RdmaStorageEndpointFactory(datanodeGroup, this));
 		datanodeServerEndpoint.bind(serverAddr, RdmaConstants.STORAGE_RDMA_BACKLOG);
 		
-		this.dataDirPath = getDatanodeDirectory(serverAddr);
-		LOG.info("dataPath " + dataDirPath);
 		this.allocatedSize = 0;
 		this.fileCount = 0;
+		this.dataDirPath = StorageUtils.getDatanodeDirectory(RdmaConstants.STORAGE_RDMA_DATA_PATH, serverAddr);
 		if (!RdmaConstants.STORAGE_RDMA_PERSISTENT){
-			clean();		
+			StorageUtils.clean(RdmaConstants.STORAGE_RDMA_DATA_PATH, dataDirPath);		
 		} 
 	}
 	
@@ -141,29 +139,8 @@
 		return serverAddr;
 	}	
 	
-	//--------------------
-	
-	public static String getDatanodeDirectory(InetSocketAddress inetAddress){
-		String address = inetAddress.getAddress().toString();
-		if (address.startsWith("/")){
-			return RdmaConstants.STORAGE_RDMA_DATA_PATH + address + "-"  + inetAddress.getPort();
-		} else {
-			return RdmaConstants.STORAGE_RDMA_DATA_PATH + address + "-"  + inetAddress.getPort();
-		}
-	}
-	
 	@Override
 	public boolean isAlive() {
 		return isAlive;
 	}
-
-	private void clean(){
-		File dataDir = new File(dataDirPath);
-		if (!dataDir.exists()){
-			dataDir.mkdirs();
-		}
-		for (File child : dataDir.listFiles()) {
-			child.delete();
-		}
-	}
 }
diff --git a/storage-rdma/src/main/java/org/apache/crail/storage/rdma/client/RdmaStorageLocalEndpoint.java b/storage-rdma/src/main/java/org/apache/crail/storage/rdma/client/RdmaStorageLocalEndpoint.java
index 736e071..91bf04a 100644
--- a/storage-rdma/src/main/java/org/apache/crail/storage/rdma/client/RdmaStorageLocalEndpoint.java
+++ b/storage-rdma/src/main/java/org/apache/crail/storage/rdma/client/RdmaStorageLocalEndpoint.java
@@ -35,8 +35,8 @@
 import org.apache.crail.metadata.BlockInfo;
 import org.apache.crail.storage.StorageEndpoint;
 import org.apache.crail.storage.StorageFuture;
+import org.apache.crail.storage.StorageUtils;
 import org.apache.crail.storage.rdma.RdmaConstants;
-import org.apache.crail.storage.rdma.RdmaStorageServer;
 import org.apache.crail.utils.CrailUtils;
 import org.slf4j.Logger;
 
@@ -52,7 +52,7 @@
 	
 	public RdmaStorageLocalEndpoint(InetSocketAddress datanodeAddr) throws Exception {
 		LOG.info("new local endpoint for address " + datanodeAddr);
-		String dataPath = RdmaStorageServer.getDatanodeDirectory(datanodeAddr);
+		String dataPath = StorageUtils.getDatanodeDirectory(RdmaConstants.STORAGE_RDMA_DATA_PATH, datanodeAddr);
 		File dataDir = new File(dataPath);
 		if (!dataDir.exists()){
 			throw new Exception("Local RDMA data path missing");
diff --git a/storage/src/main/java/org/apache/crail/storage/StorageUtils.java b/storage/src/main/java/org/apache/crail/storage/StorageUtils.java
index 4b0becf..42c0917 100644
--- a/storage/src/main/java/org/apache/crail/storage/StorageUtils.java
+++ b/storage/src/main/java/org/apache/crail/storage/StorageUtils.java
@@ -18,6 +18,7 @@
 
 package org.apache.crail.storage;
 
+import java.io.File;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
@@ -45,5 +46,28 @@
 		}
 		InetSocketAddress inetAddr = new InetSocketAddress(addr, port);
 		return inetAddr;
+	}
+	
+	public static void clean(String base, String path) throws IOException {
+		try {
+			File dataDir = new File(path);
+			if (!dataDir.exists()){
+				if (!dataDir.mkdirs()) {
+					throw new IOException("crail.datapath " + base + " either does not exist or has no write permissions");
+				}
+			}
+			for (File child : dataDir.listFiles()) {
+				child.delete();
+			}
+		} catch(SecurityException e) {
+			throw new IOException("Error when trying to access " + base, e);
+		}
+	}
+	
+	public static String getDatanodeDirectory(String datapath, InetSocketAddress address) throws IllegalArgumentException {
+		if (address == null) {
+			throw new IllegalArgumentException("Address paramater cannot be null!");
+		}
+		return datapath + address.getAddress() + "-"  + address.getPort();
 	}	
 }
