diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/.classpath b/plugins/org.eclipse.viatra.modelobfuscator.application/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.application/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/.project b/plugins/org.eclipse.viatra.modelobfuscator.application/.project
new file mode 100644
index 0000000..42f5271
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.viatra.modelobfuscator.application</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.viatra.modelobfuscator.application/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/META-INF/MANIFEST.MF b/plugins/org.eclipse.viatra.modelobfuscator.application/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6755e77
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: VIATRA Model Obfuscator Headless
+Bundle-SymbolicName: org.eclipse.viatra.modelobfuscator.application;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.eclipse.core.runtime,
+ com.google.guava,
+ org.eclipse.viatra.modelobfuscator.runtime
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/build.properties b/plugins/org.eclipse.viatra.modelobfuscator.application/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/emf_configuration_example.properties b/plugins/org.eclipse.viatra.modelobfuscator.application/emf_configuration_example.properties
new file mode 100644
index 0000000..f43ba4a
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/emf_configuration_example.properties
@@ -0,0 +1,13 @@
+# = EMF Obfuscator =
+
+# Select XML mode for obfuscator
+org.eclipse.viatra.modelobfuscator/mode=emf
+
+# Semicolon separated list of Ecore model files that must be loaded into repository (only XMI resources are supported)
+org.eclipse.viatra.modelobfuscator/ecore=someEcore.ecore;otherEcore.ecore
+
+# Semicolon separated list of input instance model files that are obfuscated together
+org.eclipse.viatra.modelobfuscator/input=someModel.ext;otherModel.xmi;someOtherModel.ext
+
+# Select output directory where all obfuscated files are put (input directories will be also recreated inside this)
+org.eclipse.viatra.modelobfuscator/output=someOutputDir
\ No newline at end of file
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/plugin.xml b/plugins/org.eclipse.viatra.modelobfuscator.application/plugin.xml
new file mode 100644
index 0000000..0b79da6
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         id="org.eclipse.viatra.modelobfuscator.application.app"
+         point="org.eclipse.core.runtime.applications">
+      <application
+            cardinality="singleton-global"
+            thread="main"
+            visible="true">
+         <run
+               class="org.eclipse.viatra.modelobfuscator.application.ModelObfuscatorApplication">
+         </run>
+      </application>
+   </extension>
+   <extension
+         id="product"
+         point="org.eclipse.core.runtime.products">
+      <product
+            application="org.eclipse.viatra.modelobfuscator.application.app"
+            name="VIATRA Model Obfuscator">
+      </product>
+   </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/pom.xml b/plugins/org.eclipse.viatra.modelobfuscator.application/pom.xml
new file mode 100644
index 0000000..f5911df
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>org.eclipse.viatra.modelobfuscator.parent</artifactId>
+    <groupId>org.eclipse.viatra</groupId>
+    <version>0.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml</relativePath>
+  </parent>
+  <artifactId>org.eclipse.viatra.modelobfuscator.application</artifactId>
+  <packaging>eclipse-plugin</packaging>
+</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorApplication.java b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorApplication.java
new file mode 100644
index 0000000..e97eb1b
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorApplication.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2014, Abel Hegedus, Istvan Rath and Daniel Varro
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Abel Hegedus - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.viatra.modelobfuscator.application;
+
+import java.util.Map;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.viatra.modelobfuscator.application.common.ModelObfuscatorHeadless;
+
+/**
+ * @author Abel Hegedus
+ *
+ */
+public class ModelObfuscatorApplication implements IApplication {
+
+    @Override
+    public Object start(IApplicationContext context) throws Exception {
+        @SuppressWarnings("unchecked")
+        Map<String, Object> arguments = context.getArguments();
+        String[] args = (String[]) arguments.get("application.args");
+        
+        try {
+            return new ModelObfuscatorHeadless().performHeadlessObfuscation(args);
+        } catch (IllegalArgumentException e) {
+            System.out.println("Obfuscation failed");
+            return IApplication.EXIT_OK;
+        }
+        
+    }
+
+    @Override
+    public void stop() {
+    
+    }
+
+
+}
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorMain.java b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorMain.java
new file mode 100644
index 0000000..2c5be21
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorMain.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2014, Abel Hegedus, Istvan Rath and Daniel Varro
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Abel Hegedus - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.viatra.modelobfuscator.application;
+
+import org.eclipse.viatra.modelobfuscator.application.common.ModelObfuscatorHeadless;
+
+/**
+ * @author Abel Hegedus
+ *
+ */
+public class ModelObfuscatorMain {
+
+    public static void main(String[] args) {
+        
+        try {
+            new ModelObfuscatorHeadless().performHeadlessObfuscation(args);
+        } catch (IllegalArgumentException e) {
+            System.out.println("Obfuscation failed");
+        }
+        
+    }
+    
+}
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/common/ModelObfuscatorHeadless.java b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/common/ModelObfuscatorHeadless.java
new file mode 100644
index 0000000..1fae547
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/common/ModelObfuscatorHeadless.java
@@ -0,0 +1,351 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2014, Abel Hegedus, Istvan Rath and Daniel Varro
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Abel Hegedus - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.viatra.modelobfuscator.application.common;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.viatra.modelobfuscator.xml.XMLModelObfuscator;
+import org.eclipse.viatra.modelobfuscator.xml.XMLModelObfuscatorBuilder;
+import org.eclipse.viatra.modelobfuscator.xml.XMLSchemaConfiguration;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Strings;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
+
+/**
+ * @author Abel Hegedus
+ *
+ */
+public class ModelObfuscatorHeadless {
+
+    /*
+     * Command line parameters 
+     */
+    private static String configParam = "-c";
+    private static String configLongParam = "--config";
+    private static String seedParam   = "-s";
+    private static String saltParam   = "--salt";
+
+    /*
+     * Property keys
+     */
+    private static final String PROPERTY_PREFIX = "org.eclipse.viatra.modelobfuscator/";
+    private static final String OBFUSCATION_MODE_PROPERTY = PROPERTY_PREFIX + "mode";
+    private static final String XML_OBFUSCATION_MODE = "xml";
+    private static final String EMF_OBFUSCATION_MODE= "emf";
+    private static final String OBFUSCATION_INPUT_PROPERTY = PROPERTY_PREFIX + "input";
+    private static final String OBFUSCATION_OUTPUT_PROPERTY = PROPERTY_PREFIX + "output";
+    private static final String OBFUSCATION_ECORE_PROPERTY = PROPERTY_PREFIX + "ecore";
+    private static final String OBFUSCATION_TAGS_PROPERTY = PROPERTY_PREFIX + "tags";
+    private static final String OBFUSCATION_ATTRIBUTES_PROPERTY = PROPERTY_PREFIX + "attributes";
+
+    /**
+     * @param args
+     * @return
+     */
+    public Integer performHeadlessObfuscation(String[] args) {
+        String config = null;
+        String seed = null;
+        String salt = null;
+        
+        if (args == null || args.length == 0) {
+            reportError("Configuration parameter not set");
+        }
+        int i = 0;
+        
+        while (i < args.length) {
+           if (args[i].equals(configLongParam)) {
+               config = args[i + 1];
+                i += 2;
+            } else if (args[i].equals(configParam)) {
+                config = args[i + 1];
+                i += 2;
+            } else if (args[i].equals(seedParam)) {
+                seed = args[i + 1];
+                i += 2;
+            } else if (args[i].equals(saltParam)) {
+                salt = args[i + 1];
+                i += 2;
+            } else {
+                i++;
+            }
+        }
+
+        System.out.println("Obfuscation called with:\n"
+                + "  Config : " + Strings.nullToEmpty(config) + "\n"
+                + "  Seed   : " + Strings.nullToEmpty(seed) + "\n"
+                + "  Salt   : " + Strings.nullToEmpty(salt));
+        
+        if (config == null) {
+            reportError("Configuration parameter not set");
+        }
+
+        Properties configuration = null;
+        // load configuration file
+        try {
+            configuration = loadConfigurationPropertyFile(config);
+        } catch (FileNotFoundException e) {
+            reportError("Could not find configuration file");
+        } catch (IOException e) {
+            reportError("Could not read configuration file");
+        }
+
+        String mode = getPropertyValue(configuration, OBFUSCATION_MODE_PROPERTY);
+        
+        if(mode.equals(EMF_OBFUSCATION_MODE)) {
+            // TODO handle EMF obfuscation
+            
+            // check input file existence
+
+            // ensure output directory existence
+            
+            // load ecore models into registry
+            
+            // load inputs into resource set
+            
+            // initialize obfuscator
+            
+            // perform obfuscation
+            
+            // save models to output directory
+            
+        } else if(mode.equals(XML_OBFUSCATION_MODE)) {
+
+            // ensure output directory existence
+            File outputDirectory = checkOutputDirectory(configuration);
+            
+            // check input file existence
+            Map<String,FileInputStream> inputs = Maps.newHashMap();
+            prepareInputStreams(configuration, inputs);
+            
+            // parse schema configuration
+            XMLSchemaConfiguration schemaConfiguration = prepareSchemaConfiguration(configuration);
+            
+            // initialize obfuscator
+            XMLModelObfuscatorBuilder obfuscatorBuilder = XMLModelObfuscatorBuilder.create().setSchemaConfiguration(schemaConfiguration);
+            
+            if(seed != null) {
+                obfuscatorBuilder.setSeed(seed);
+            }
+            System.out.println("Obfuscating using seed: " + obfuscatorBuilder.getSeed());
+            
+            if(salt != null) {
+                obfuscatorBuilder.setSalt(salt);
+                System.out.println("Obfuscating using salt: " + obfuscatorBuilder.getSalt());
+            }
+            
+            performObfuscation(outputDirectory, inputs, obfuscatorBuilder);
+            
+        } else {
+            reportError("Unknown mode " + mode + " selected in configuration");
+        }
+        
+        return IApplication.EXIT_OK;
+    }
+
+    /**
+     * @param outputDirectory
+     * @param inputs
+     * @param obfuscatorBuilder
+     */
+    private void performObfuscation(File outputDirectory, Map<String, FileInputStream> inputs,
+            XMLModelObfuscatorBuilder obfuscatorBuilder) {
+        for (Entry<String, FileInputStream> input : inputs.entrySet()) {
+            BufferedInputStream bufferedInputStream = new BufferedInputStream(input.getValue());
+            obfuscatorBuilder.setInput(bufferedInputStream);
+            String fileName = input.getKey();
+            File output = new File(outputDirectory, fileName);
+            BufferedOutputStream bufferedOutputStream;
+            try {
+                bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(output));
+                obfuscatorBuilder.setOutput(bufferedOutputStream);
+                XMLModelObfuscator obfuscator = obfuscatorBuilder.build();
+                System.out.println("Obfuscating " + fileName);
+                obfuscator.obfuscate();
+                bufferedOutputStream.close();
+                bufferedInputStream.close();
+            } catch (FileNotFoundException e) {
+                reportError("Could not ouput to file " + output.getPath());
+            } catch (IOException e) {
+                reportError("Could not close output file " + output.getPath());
+            }
+        }
+    }
+
+    private Properties loadConfigurationPropertyFile(String configPath) throws FileNotFoundException, IOException {
+        Properties bundle = new Properties();
+        FileInputStream fis = new FileInputStream(configPath);
+        try {
+            bundle.load(fis);
+        } finally {
+            fis.close();
+        }
+        return bundle;
+    }
+
+    /**
+     * @param configuration
+     */
+    private File checkOutputDirectory(Properties configuration) {
+        String output = getPropertyValue(configuration, OBFUSCATION_OUTPUT_PROPERTY);
+        File outputFile = new File(output);
+        if(!outputFile.exists()) {
+            boolean directoryCreated = outputFile.mkdir();
+            if(!directoryCreated) {
+                reportError("Output " + output + " specified in configuration could not be created");
+            }
+        } else if(!outputFile.isDirectory()) {
+            reportError("Output " + output + " specified in configuration is not a directory");
+        }
+        return outputFile;
+    }
+
+    private void prepareInputStreams(Properties configuration, Map<String, FileInputStream> inputs) {
+        String input = getPropertyValue(configuration, OBFUSCATION_INPUT_PROPERTY);
+        StringTokenizer inputTokenizer = new StringTokenizer(input,";");
+        while (inputTokenizer.hasMoreTokens()) {
+            String inputPath = (String) inputTokenizer.nextToken();
+            // create input stream for input files
+            File file = new File(inputPath);
+            createFileInputStreams(inputs, file);
+        }
+    }
+
+    /**
+     * @param inputs
+     * @param inputPath
+     */
+    private void createFileInputStreams(Map<String, FileInputStream> inputs, File file) {
+        if(!file.exists()) {
+            reportError("Input " + file.getPath() + " specified in configuration could not be found");
+        }
+        if(file.isFile()) {
+            try {
+                FileInputStream fileInputStream = new FileInputStream(file);
+                String fileName = file.getName();
+                if(inputs.containsKey(fileName)) {
+                    reportError("Multiple files with the same name " + fileName + " in configuration");
+                }
+                inputs.put(fileName,fileInputStream);
+            } catch (FileNotFoundException e) {
+                reportError("Input " +  file.getPath() + " specified in configuration could not be found, although it exists");
+            }
+        } else if(file.isDirectory()) {
+            /*
+             * TODO we could support directories, either processing only directly contained files or all transitive
+             * files. However, we would need to take care in putting the directory structure into the output, handle
+             * symbolic and hard links, etc.
+             */
+            reportError("Input" + file.getPath() + " specified in configuration is a directory");
+        }
+    }
+
+    /**
+     * @param configuration
+     * @return
+     */
+    private XMLSchemaConfiguration prepareSchemaConfiguration(Properties configuration) {
+        Optional<String> tags = getOptionalPropertyValue(configuration, OBFUSCATION_TAGS_PROPERTY);
+        Optional<String> attributes = getOptionalPropertyValue(configuration, OBFUSCATION_ATTRIBUTES_PROPERTY);
+        if(!tags.isPresent() && !attributes.isPresent()) {
+            reportError("No schema configuration provided, nothing to obfuscate");
+        }
+        
+        Set<String> tagSet = Sets.newHashSet();
+        if(tags.isPresent()) {
+            StringTokenizer tagTokenizer = new StringTokenizer(tags.get(), ";");
+            while (tagTokenizer.hasMoreTokens()) {
+                String tag = tagTokenizer.nextToken();
+                tagSet.add(tag);
+            }
+        }
+        
+        Multimap<String, String> attributeMultimap = HashMultimap.create();
+        if(attributes.isPresent()) {
+            StringTokenizer attributeTokenizer = new StringTokenizer(attributes.get(), ";");
+            while (attributeTokenizer.hasMoreTokens()) {
+                String tagAttributes = attributeTokenizer.nextToken();
+                try {
+                    StringTokenizer tagAttributeTokenizer = new StringTokenizer(tagAttributes, ":");
+                    String tagName = tagAttributeTokenizer.nextToken();
+                    String attributeList = tagAttributeTokenizer.nextToken();
+                    StringTokenizer attributeListTokenizer = new StringTokenizer(attributeList, ",");
+                    while (attributeListTokenizer.hasMoreTokens()) {
+                        String attributeName = attributeListTokenizer.nextToken();
+                        attributeMultimap.put(tagName, attributeName);
+                    }
+                } catch (NoSuchElementException e) {
+                    reportError("Incorrect syntax in attributes value of schema configuration when processing: " + tagAttributes);
+                }
+            }
+        }
+        
+        XMLSchemaConfiguration schemaConfiguration = new XMLSchemaConfiguration(attributeMultimap, tagSet);
+        return schemaConfiguration;
+    }
+
+    /**
+     * @param configuration
+     * @return
+     */
+    private String getPropertyValue(Properties configuration, String propertyName) {
+        Optional<String> optionalPropertyValue = getOptionalPropertyValue(configuration, propertyName);
+        if(!optionalPropertyValue.isPresent()) {
+            reportError(propertyName + " undefined in configuration");
+        }
+        return optionalPropertyValue.get();
+    }
+    
+    /**
+     * @param configuration
+     * @return
+     */
+    private Optional<String> getOptionalPropertyValue(Properties configuration, String propertyName) {
+        String propertyValue = configuration.getProperty(propertyName);
+        return Optional.fromNullable(propertyValue);
+    }
+
+    /**
+     * @return
+     */
+    private Integer reportError(String message) {
+        System.out.println(message);
+        displayHelp();
+        throw new IllegalArgumentException(message);
+    }
+
+    private void displayHelp() {
+        System.out.println("Usage:\n"
+                + "<call> -c <configurationFilePath> [-s <seed>] [-salt <salt>]\n"
+                + "  -c       : Required, the configuration that describes what to obfuscate.\n"
+                + "  --config : Same as -c.\n"
+                + "  -s       : Optional, the seed used for the obfuscation.\n"
+                + "  --seed   : Same as -s.\n"
+                + "  --salt   : Optional, the salt used for the obfuscation.");
+    }
+    
+}
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/xml_configuration_example.properties b/plugins/org.eclipse.viatra.modelobfuscator.application/xml_configuration_example.properties
new file mode 100644
index 0000000..8d79cb7
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/xml_configuration_example.properties
@@ -0,0 +1,18 @@
+# = XML Obfuscator =
+
+# Select XML mode for obfuscator
+org.eclipse.viatra.modelobfuscator/mode=xml
+
+# Provide inputs as semicolon separated list of files
+org.eclipse.viatra.modelobfuscator/input=somefile.ext;c:/someDir/someOtherFile.ex2
+
+# Select output directory where all obfuscated files are put (input directories will be also recreated inside this)
+org.eclipse.viatra.modelobfuscator/output=someOutputDir
+
+# Schema configuration
+# Semicolon separated list of tags whose text content is obfuscated 
+org.eclipse.viatra.modelobfuscator/tags=someTag;otherTag
+
+# Semicolon separated list for tag attributes that are obfuscated
+# (tag name followed by : and comma separated list of attribute names)
+org.eclipse.viatra.modelobfuscator/attributes=someTag:someAttr;otherTag:otherAttr,attr2
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/.gitignore
index ae3c172..b33f6af 100644
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/.gitignore
+++ b/plugins/org.eclipse.viatra.modelobfuscator.runtime/.gitignore
@@ -1 +1,2 @@
 /bin/
+/xtend-gen/
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/src/org/eclipse/viatra/modelobfuscator/xml/XMLModelObfuscatorBuilder.xtend b/plugins/org.eclipse.viatra.modelobfuscator.runtime/src/org/eclipse/viatra/modelobfuscator/xml/XMLModelObfuscatorBuilder.xtend
index a6dd89c..983dafd 100644
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/src/org/eclipse/viatra/modelobfuscator/xml/XMLModelObfuscatorBuilder.xtend
+++ b/plugins/org.eclipse.viatra.modelobfuscator.runtime/src/org/eclipse/viatra/modelobfuscator/xml/XMLModelObfuscatorBuilder.xtend
@@ -95,6 +95,14 @@
     return this
   }
   
+  def getSeed(){
+    return seedString
+  }
+  
+  def getSalt(){
+    return saltString
+  }
+  
   /**
    * Returns the {@link XMLModelObfuscator} instance built using the current configuration of the builder. 
    */
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/api/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/api/.gitignore
deleted file mode 100644
index ea7b2b7..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/api/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/.DataTypeObfuscator.java._trace
-/.ModelObfuscator.java._trace
-/DataTypeObfuscator.java
-/ModelObfuscator.java
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/emf/simple/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/emf/simple/.gitignore
deleted file mode 100644
index 3b698f3..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/emf/simple/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/.EMFModelObfuscatorBuilder.java._trace
-/.ResourceFilter.java._trace
-/.SimpleEMFModelObfuscator.java._trace
-/EMFModelObfuscatorBuilder.java
-/ResourceFilter.java
-/SimpleEMFModelObfuscator.java
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/util/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/util/.gitignore
deleted file mode 100644
index ade536c..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/util/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/.StringObfuscator.java._trace
-/StringObfuscator.java
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/xml/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/xml/.gitignore
deleted file mode 100644
index bde1def..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/xml/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/.XMLModelObfuscator.java._trace
-/.XMLModelObfuscatorBuilder.java._trace
-/.XMLSchemaConfiguration.java._trace
-/XMLModelObfuscator.java
-/XMLModelObfuscatorBuilder.java
-/XMLSchemaConfiguration.java
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.tests/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.tests/.gitignore
index ae3c172..b33f6af 100644
--- a/plugins/org.eclipse.viatra.modelobfuscator.tests/.gitignore
+++ b/plugins/org.eclipse.viatra.modelobfuscator.tests/.gitignore
@@ -1 +1,2 @@
 /bin/
+/xtend-gen/
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.tests/xtend-gen/org/eclipse/viatra/modelobfuscator/tests/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.tests/xtend-gen/org/eclipse/viatra/modelobfuscator/tests/.gitignore
deleted file mode 100644
index f822ea9..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.tests/xtend-gen/org/eclipse/viatra/modelobfuscator/tests/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/.SimpleEMFModelObfuscatorTest.java._trace
-/.XMLModelObfuscatorTest.java._trace
-/SimpleEMFModelObfuscatorTest.java
-/XMLModelObfuscatorTest.java
diff --git a/releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml b/releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml
index c882c12..5e41322 100644
--- a/releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml
+++ b/releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml
@@ -177,11 +177,13 @@
       </activation>
       <modules>
 	      <module>../../plugins/org.eclipse.viatra.modelobfuscator.ui</module>
+	      <module>../../plugins/org.eclipse.viatra.modelobfuscator.application</module>
 		    <!-- Needs BPM example metamodel as dependency
 		    <module>../../plugins/org.eclipse.viatra.modelobfuscator.tests</module>
 		      -->
         <module>../../features/org.eclipse.viatra.modelobfuscator.feature</module>
         <module>../../releng/org.eclipse.viatra.modelobfuscator.update</module>
+        <module>../../releng/org.eclipse.viatra.modelobfuscator.product</module>
       </modules>
     </profile>
     <profile>
diff --git a/releng/org.eclipse.viatra.modelobfuscator.product/.project b/releng/org.eclipse.viatra.modelobfuscator.product/.project
new file mode 100644
index 0000000..730c3f0
--- /dev/null
+++ b/releng/org.eclipse.viatra.modelobfuscator.product/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.viatra.modelobfuscator.product</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/releng/org.eclipse.viatra.modelobfuscator.product/modelobfuscator.product b/releng/org.eclipse.viatra.modelobfuscator.product/modelobfuscator.product
new file mode 100644
index 0000000..cb33491
--- /dev/null
+++ b/releng/org.eclipse.viatra.modelobfuscator.product/modelobfuscator.product
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="VIATRA Model Obfuscator Product" uid="org.eclipse.viatra.modelobfuscator.product" id="org.eclipse.viatra.modelobfuscator" application="org.eclipse.viatra.modelobfuscator.application.app" version="0.7.0.qualifier" useFeatures="false" includeLaunchers="true">
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <programArgs>-consoleLog
+      </programArgs>
+      <vmArgs>-Xms200m -Xmx1024m
+      </vmArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
+      </vmArgsMac>
+   </launcherArgs>
+
+   <windowImages/>
+
+   <launcher>
+      <solaris/>
+      <win useIco="false">
+         <bmp/>
+      </win>
+   </launcher>
+
+   <vm>
+      <windows include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6</windows>
+   </vm>
+
+   <plugins>
+      <plugin id="com.google.guava"/>
+      <plugin id="com.ibm.icu"/>
+      <plugin id="javax.annotation"/>
+      <plugin id="javax.inject"/>
+      <plugin id="javax.xml"/>
+      <plugin id="org.apache.batik.css"/>
+      <plugin id="org.apache.batik.util"/>
+      <plugin id="org.apache.batik.util.gui"/>
+      <plugin id="org.eclipse.ant.core"/>
+      <plugin id="org.eclipse.compare.core"/>
+      <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.databinding"/>
+      <plugin id="org.eclipse.core.databinding.observable"/>
+      <plugin id="org.eclipse.core.databinding.property"/>
+      <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.filesystem"/>
+      <plugin id="org.eclipse.core.filesystem.win32.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.resources"/>
+      <plugin id="org.eclipse.core.resources.win32.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.core.runtime"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.core.variables"/>
+      <plugin id="org.eclipse.e4.core.commands"/>
+      <plugin id="org.eclipse.e4.core.contexts"/>
+      <plugin id="org.eclipse.e4.core.di"/>
+      <plugin id="org.eclipse.e4.core.di.extensions"/>
+      <plugin id="org.eclipse.e4.core.services"/>
+      <plugin id="org.eclipse.e4.ui.bindings"/>
+      <plugin id="org.eclipse.e4.ui.css.core"/>
+      <plugin id="org.eclipse.e4.ui.css.swt"/>
+      <plugin id="org.eclipse.e4.ui.css.swt.theme"/>
+      <plugin id="org.eclipse.e4.ui.di"/>
+      <plugin id="org.eclipse.e4.ui.model.workbench"/>
+      <plugin id="org.eclipse.e4.ui.services"/>
+      <plugin id="org.eclipse.e4.ui.widgets"/>
+      <plugin id="org.eclipse.e4.ui.workbench"/>
+      <plugin id="org.eclipse.e4.ui.workbench.addons.swt"/>
+      <plugin id="org.eclipse.e4.ui.workbench.renderers.swt"/>
+      <plugin id="org.eclipse.e4.ui.workbench.swt"/>
+      <plugin id="org.eclipse.e4.ui.workbench3"/>
+      <plugin id="org.eclipse.emf.cdo.ecore.retrofit" fragment="true"/>
+      <plugin id="org.eclipse.emf.common"/>
+      <plugin id="org.eclipse.emf.ecore"/>
+      <plugin id="org.eclipse.emf.ecore.change"/>
+      <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.ds"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.equinox.util"/>
+      <plugin id="org.eclipse.help"/>
+      <plugin id="org.eclipse.jface"/>
+      <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.compatibility.state" fragment="true"/>
+      <plugin id="org.eclipse.osgi.services"/>
+      <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.team.core"/>
+      <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.trace"/>
+      <plugin id="org.eclipse.ui.workbench"/>
+      <plugin id="org.eclipse.viatra.modelobfuscator.application"/>
+      <plugin id="org.eclipse.viatra.modelobfuscator.runtime"/>
+      <plugin id="org.eclipse.xtend.lib"/>
+      <plugin id="org.eclipse.xtext.xbase.lib"/>
+      <plugin id="org.w3c.css.sac"/>
+      <plugin id="org.w3c.dom.events"/>
+      <plugin id="org.w3c.dom.smil"/>
+      <plugin id="org.w3c.dom.svg"/>
+   </plugins>
+
+   <configurations>
+      <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
+      <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="1" />
+      <plugin id="org.eclipse.osgi" autoStart="true" startLevel="-1" />
+   </configurations>
+
+</product>
diff --git a/releng/org.eclipse.viatra.modelobfuscator.product/pom.xml b/releng/org.eclipse.viatra.modelobfuscator.product/pom.xml
new file mode 100644
index 0000000..7e24c92
--- /dev/null
+++ b/releng/org.eclipse.viatra.modelobfuscator.product/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>org.eclipse.viatra.modelobfuscator.parent</artifactId>
+    <groupId>org.eclipse.viatra</groupId>
+    <version>0.7.0-SNAPSHOT</version>
+    <relativePath>../../releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml</relativePath>
+  </parent>
+  <artifactId>org.eclipse.viatra.modelobfuscator.product</artifactId>
+  <packaging>eclipse-repository</packaging>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-p2-director-plugin</artifactId>
+        <version>${tycho.version}</version>
+        <configuration>
+          <formats>
+            <win32>zip</win32>
+            <linux>tar.gz</linux>
+            <macosx>zip</macosx>
+          </formats>
+        </configuration>
+        <executions>
+          <execution>
+            <id>materialize-products</id>
+            <goals>
+              <goal>materialize-products</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>archive-products</id>
+            <goals>
+              <goal>archive-products</goal>
+            </goals>
+            
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/releng/org.eclipse.viatra.modelobfuscator.target/org.eclipse.viatra.modelobfuscator.target.target b/releng/org.eclipse.viatra.modelobfuscator.target/org.eclipse.viatra.modelobfuscator.target.target
index b038cbf..0ca1fea 100644
--- a/releng/org.eclipse.viatra.modelobfuscator.target/org.eclipse.viatra.modelobfuscator.target.target
+++ b/releng/org.eclipse.viatra.modelobfuscator.target/org.eclipse.viatra.modelobfuscator.target.target
@@ -16,6 +16,7 @@
     <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
       <unit id="org.eclipse.platform.sdk" version="3.7.2.M20120208-0800"/>
       <unit id="org.eclipse.sdk.ide" version="3.7.2.M20120208-0800"/>
+      <unit id="org.eclipse.equinox.sdk.feature.group" version="3.7.1.R37x_v20110907-7M7W8i8eNV4WsRkue-4Vq4J6pCyW"/>
       <repository location="http://download.eclipse.org/eclipse/updates/3.7"/>
     </location>
     <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
