diff --git a/vipra-cmd/.project b/vipra-cmd/.project
index 3ac9cb904e07c158393db9e1b69cfe3cb80a2da6..e6b85466c1e3c9aa9198c926ed97d5b7c87344ed 100644
--- a/vipra-cmd/.project
+++ b/vipra-cmd/.project
@@ -33,11 +33,4 @@
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
 	</natures>
-	<linkedResources>
-		<link>
-			<name>src/main/resources/config.properties</name>
-			<type>1</type>
-			<locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI>
-		</link>
-	</linkedResources>
 </projectDescription>
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/CmdOptions.java b/vipra-cmd/src/main/java/de/vipra/cmd/CmdOptions.java
index 6cfd7f0a2afe3be3f195cae357de7ae2260d4fb5..f7619cd020eba22fc17e06dcb716e58910b6cb19 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/CmdOptions.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/CmdOptions.java
@@ -2,6 +2,7 @@ package de.vipra.cmd;
 
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
+import org.apache.commons.cli.OptionGroup;
 import org.apache.commons.cli.Options;
 
 public class CmdOptions extends Options {
@@ -11,15 +12,24 @@ public class CmdOptions extends Options {
 	public static final String OPT_HELP = "h";
 	public static final String OPT_HELP_LONG = "help";
 	public static final String OPT_IMPORT = "i";
+	public static final String OPT_IMPORT_LONG = "import";
 	public static final String OPT_SHELL = "x";
+	public static final String OPT_SHELL_LONG = "shell";
+	public static final String OPT_DELETE = "d";
+	public static final String OPT_DELETE_LONG = "delete";
 
 	public CmdOptions() {
-		addOption(Option.builder(OPT_HELP).longOpt("help").desc("print this message").build());
-		addOption(Option.builder(OPT_SHELL).longOpt("shell").hasArg(true).argName("name")
+		addOption(Option.builder(OPT_HELP).longOpt(OPT_HELP_LONG).desc("print this message").build());
+		addOption(Option.builder(OPT_SHELL).longOpt(OPT_SHELL_LONG).hasArg(true).argName("name")
 				.desc("run from a shell script").build());
-		addOption(Option.builder(OPT_IMPORT).longOpt("import").hasArgs().argName("files/dirs...")
+
+		OptionGroup group = new OptionGroup();
+		group.addOption(Option.builder(OPT_IMPORT).longOpt(OPT_IMPORT_LONG).hasArgs().argName("files/dirs...")
 				.desc("import articles into the database").build());
+		group.addOption(Option.builder(OPT_DELETE).longOpt(OPT_DELETE_LONG).hasArgs().argName("files/ids...")
+				.desc("delete articles from the database").build());
 
+		addOptionGroup(group);
 	}
 
 	public void printHelp(String cmd) {
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/Main.java b/vipra-cmd/src/main/java/de/vipra/cmd/Main.java
index 9ffcc8bfeb21dd0f39c2dd7a91f46cb21b017713..899ac92aa72c3b7fbfe6c17125c3d8a6b2f7f4b9 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/Main.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/Main.java
@@ -1,8 +1,6 @@
 package de.vipra.cmd;
 
-import static de.vipra.cmd.CmdOptions.OPT_HELP;
-import static de.vipra.cmd.CmdOptions.OPT_IMPORT;
-import static de.vipra.cmd.CmdOptions.OPT_SHELL;
+import static de.vipra.cmd.CmdOptions.*;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
@@ -12,6 +10,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import de.vipra.cmd.option.Command;
+import de.vipra.cmd.option.DeleteCommand;
 import de.vipra.cmd.option.ImportCommand;
 
 public class Main {
@@ -44,8 +43,9 @@ public class Main {
 			if (cline.hasOption(OPT_HELP)) {
 				options.printHelp(cmd);
 			} else if (cline.hasOption(OPT_IMPORT)) {
-				String[] paths = cline.getOptionValues(OPT_IMPORT);
-				c = new ImportCommand(paths);
+				c = new ImportCommand(cline.getOptionValues(OPT_IMPORT));
+			} else if (cline.hasOption(OPT_DELETE)) {
+				c = new DeleteCommand(cline.getOptionValues(OPT_DELETE));
 			}
 
 			if (c != null) {
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/option/DeleteCommand.java b/vipra-cmd/src/main/java/de/vipra/cmd/option/DeleteCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..350d543c7afd7c96acbf4f79ca1364115d8b94c1
--- /dev/null
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/option/DeleteCommand.java
@@ -0,0 +1,72 @@
+package de.vipra.cmd.option;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import de.vipra.cmd.ExecutionException;
+import de.vipra.cmd.model.Article;
+import de.vipra.util.Config;
+import de.vipra.util.ConfigException;
+import de.vipra.util.Constants;
+import de.vipra.util.service.DatabaseService;
+import de.vipra.util.service.FilebaseService;
+
+public class DeleteCommand implements Command {
+
+	public static final Logger log = LoggerFactory.getLogger(DeleteCommand.class);
+	public static final Logger out = LoggerFactory.getLogger("shellout");
+
+	private ArrayList<String> ids = new ArrayList<>();
+	private Config config;
+	private DatabaseService<Article> dbArticles;
+	private FilebaseService<Article> fbArticles;
+
+	public DeleteCommand(String[] strings) {
+		addIds(strings);
+	}
+
+	private void addIds(String[] strings) {
+		for (String str : strings) {
+			if (str.contains(File.pathSeparator)) {
+				String[] parts = str.split(File.pathSeparator);
+				str = parts[parts.length - 1];
+			}
+			ids.add(str);
+		}
+	}
+
+	private void deleteEntry(String id) {
+		// 1. delete mongodb entry
+		// 2. delete file
+		// 3. delete elasticsearch index entry
+	}
+
+	@Override
+	public void run() throws ExecutionException {
+		try {
+			config = new Config();
+			dbArticles = config.getDatabaseService(Constants.Collection.ARTICLES, Article.class);
+			fbArticles = config.getFilebaseService(Article.class);
+		} catch (IOException | ConfigException e) {
+			throw new ExecutionException(e);
+		}
+
+		List<Exception> ex = new ArrayList<>();
+		for (String id : ids) {
+			try {
+				deleteEntry(id);
+			} catch (Exception e) {
+				ex.add(e);
+			}
+		}
+		if (ex.size() > 0) {
+			throw new ExecutionException(ex);
+		}
+	}
+
+}
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportCommand.java b/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportCommand.java
index 807335a3bcba66192ceb872727cafd257467e269..572b2bbe1da81a5445d0a9096e7d595993610c7d 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportCommand.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/option/ImportCommand.java
@@ -18,7 +18,6 @@ import de.vipra.cmd.model.Article;
 import de.vipra.util.Config;
 import de.vipra.util.ConfigException;
 import de.vipra.util.Constants;
-import de.vipra.util.Mongo;
 import de.vipra.util.StringUtils;
 import de.vipra.util.ex.DatabaseException;
 import de.vipra.util.ex.FilebaseException;
@@ -100,8 +99,6 @@ public class ImportCommand implements Command {
 	}
 
 	private void importArticle(JSONObject obj) throws FilebaseException, DatabaseException {
-		// 4. topic modeling
-		// 3. index article via elasticsearch, include topics
 		out.info("importing \"" + StringUtils.ellipsize(obj.get("title").toString(), 80) + "\"");
 		Article article = new Article();
 		article.fromJSON(obj);
@@ -111,16 +108,17 @@ public class ImportCommand implements Command {
 
 		// add article to filebase
 		article = fbArticles.createSingle(article);
+
+		// 3. index article via elasticsearch, include topics
+		// 4. topic modeling
 	}
 
 	@Override
 	public void run() throws ExecutionException {
 		try {
 			config = new Config();
-			File dataDir = null;
-			Mongo mongo = Mongo.getInstance(config);
-			dbArticles = new DatabaseService<Article>(mongo, Constants.Collection.ARTICLES, Article.class);
-			fbArticles = new FilebaseService<Article>(dataDir, Article.class);
+			dbArticles = config.getDatabaseService(Constants.Collection.ARTICLES, Article.class);
+			fbArticles = config.getFilebaseService(Article.class);
 		} catch (IOException | ConfigException e) {
 			throw new ExecutionException(e);
 		}
diff --git a/vipra-cmd/src/main/resources/config.properties b/vipra-cmd/src/main/resources/config.properties
new file mode 100644
index 0000000000000000000000000000000000000000..ae859d297d92ab50c7cec64fba62b4fab4a3ab11
--- /dev/null
+++ b/vipra-cmd/src/main/resources/config.properties
@@ -0,0 +1,4 @@
+db.host=localhost
+db.port=27017
+db.name=test
+fb.path=/home/eike/.local/share/vipra
\ No newline at end of file
diff --git a/vipra-rest/.project b/vipra-rest/.project
index 7641716f5406382c8b896bb6aa2c95959d062e07..e24244ea68a972f817781145661bc0723916096b 100644
--- a/vipra-rest/.project
+++ b/vipra-rest/.project
@@ -41,11 +41,4 @@
 		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
 		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
 	</natures>
-	<linkedResources>
-		<link>
-			<name>src/main/resources/config.properties</name>
-			<type>1</type>
-			<locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI>
-		</link>
-	</linkedResources>
 </projectDescription>
diff --git a/vipra-rest/src/main/resources/config.properties b/vipra-rest/src/main/resources/config.properties
new file mode 100644
index 0000000000000000000000000000000000000000..06623e215e66a3dfaefbdf3baabce5e5aeb14412
--- /dev/null
+++ b/vipra-rest/src/main/resources/config.properties
@@ -0,0 +1,5 @@
+db.host=localhost
+db.port=27017
+db.name=test
+
+fb.path=${datadir}/vipra
\ No newline at end of file
diff --git a/vipra-util/.project b/vipra-util/.project
index 97df63f9e9fce517725586539ba319c7ccfedbbd..3eb2ee19593ed7f5d6c146794b6965a00956e603 100644
--- a/vipra-util/.project
+++ b/vipra-util/.project
@@ -33,11 +33,4 @@
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
 	</natures>
-	<linkedResources>
-		<link>
-			<name>src/main/resources/config.properties</name>
-			<type>1</type>
-			<locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI>
-		</link>
-	</linkedResources>
 </projectDescription>
diff --git a/vipra-util/src/main/java/de/vipra/util/Config.java b/vipra-util/src/main/java/de/vipra/util/Config.java
index f10013558603df1d99bcd1ad622071c508715bdc..b4b795b3bc93dfdb7db7407dbb21842f0a855f57 100644
--- a/vipra-util/src/main/java/de/vipra/util/Config.java
+++ b/vipra-util/src/main/java/de/vipra/util/Config.java
@@ -1,5 +1,6 @@
 package de.vipra.util;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
@@ -7,6 +8,10 @@ import java.util.Properties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import de.vipra.util.model.Model;
+import de.vipra.util.service.DatabaseService;
+import de.vipra.util.service.FilebaseService;
+
 public class Config {
 
 	public static final Logger log = LoggerFactory.getLogger(Config.class);
@@ -14,11 +19,18 @@ public class Config {
 	private final Properties props = new Properties();
 
 	public Config() throws IOException, ConfigException {
-		this(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
-
+		InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(Constants.CONFIG_FILE);
+		if (is == null) {
+			is = Config.class.getResourceAsStream(Constants.CONFIG_FILE);
+		}
+		load(is);
 	}
 
 	public Config(InputStream is) throws IOException, ConfigException {
+		load(is);
+	}
+
+	private void load(InputStream is) throws ConfigException, IOException {
 		if (is == null) {
 			log.error("config file input stream is null");
 			throw new ConfigException("config file input stream is null");
@@ -47,4 +59,24 @@ public class Config {
 		}
 	}
 
+	public File getDataDirectory() throws ConfigException {
+		File dataDir = new File(getString("fb.path"));
+		if (!dataDir.exists()) {
+			if (!dataDir.mkdirs()) {
+				throw new ConfigException("could not create data directory: " + dataDir.getAbsolutePath());
+			}
+		}
+		return dataDir;
+	}
+
+	public <T extends Model> DatabaseService<T> getDatabaseService(Constants.Collection collection, Class<T> clazz)
+			throws ConfigException {
+		Mongo mongo = Mongo.getInstance(this);
+		return new DatabaseService<T>(mongo, collection, clazz);
+	}
+
+	public <T extends Model> FilebaseService<T> getFilebaseService(Class<T> clazz) throws ConfigException {
+		return new FilebaseService<T>(getDataDirectory(), clazz);
+	}
+
 }
diff --git a/vipra-util/src/main/java/de/vipra/util/Constants.java b/vipra-util/src/main/java/de/vipra/util/Constants.java
index fe0679afe7d3a83013928e66324a931f6da31173..4146b9c2c7878ce182b35e55ed64d76730a73f18 100644
--- a/vipra-util/src/main/java/de/vipra/util/Constants.java
+++ b/vipra-util/src/main/java/de/vipra/util/Constants.java
@@ -7,6 +7,8 @@ public class Constants {
 
 	public static final String FB_DIR = "vipra";
 	public static final Charset FB_ENCODING = StandardCharsets.UTF_8;
+	
+	public static final String CONFIG_FILE = "config.properties";
 
 	public static final String DEFAULT_HOST = "localhost";
 	public static final int DEFAULT_PORT = 27017;
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Model.java b/vipra-util/src/main/java/de/vipra/util/model/Model.java
index 0009ca6f50910d94f63903f86070b17861215656..264b7ab6e3cc52cc5ad805cd730d63c411f184bb 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Model.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Model.java
@@ -36,13 +36,9 @@ public abstract class Model {
 		}
 	}
 
-	public boolean writeToFile(File file) throws IOException {
-		if (file.exists()) {
-			String data = toFileString();
-			FileUtils.writeStringToFile(file, data, Constants.FB_ENCODING, false);
-			return true;
-		}
-		return false;
+	public void writeToFile(File file) throws IOException {
+		String data = toFileString();
+		FileUtils.writeStringToFile(file, data, Constants.FB_ENCODING, false);
 	}
 
 	public abstract String getType();
diff --git a/vipra-util/src/main/java/de/vipra/util/service/FilebaseService.java b/vipra-util/src/main/java/de/vipra/util/service/FilebaseService.java
index e369e216cbc894636de0d51038d6a0aa1ea8d381..49c8ec34e1dc8a357a3917a58303f97f540442d5 100644
--- a/vipra-util/src/main/java/de/vipra/util/service/FilebaseService.java
+++ b/vipra-util/src/main/java/de/vipra/util/service/FilebaseService.java
@@ -54,6 +54,7 @@ public class FilebaseService<T extends Model> implements Service<T, FilebaseExce
 			}
 			try {
 				t.writeToFile(file);
+				log.info("file created: " + file.getAbsolutePath());
 			} catch (IOException e) {
 				throw new FilebaseException(e);
 			}
diff --git a/vipra-util/src/main/resources/config.properties b/vipra-util/src/main/resources/config.properties
new file mode 100644
index 0000000000000000000000000000000000000000..06623e215e66a3dfaefbdf3baabce5e5aeb14412
--- /dev/null
+++ b/vipra-util/src/main/resources/config.properties
@@ -0,0 +1,5 @@
+db.host=localhost
+db.port=27017
+db.name=test
+
+fb.path=${datadir}/vipra
\ No newline at end of file