Fixed DSE BPMN example
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/META-INF/MANIFEST.MF b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/META-INF/MANIFEST.MF
index af22804..2f3b463 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/META-INF/MANIFEST.MF
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/META-INF/MANIFEST.MF
@@ -21,3 +21,4 @@
  org.eclipse.xtend.lib.macro
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.log4j;version="1.2.15"
+Automatic-Module-Name: org.eclipse.viatra.dse.examples.bpmn.dse
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/dse/BpmnExamples.java b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/dse/BpmnExamples.java
index ecd4d3c..8c017f9 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/dse/BpmnExamples.java
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/dse/BpmnExamples.java
@@ -23,11 +23,11 @@
 import org.eclipse.viatra.dse.examples.bpmn.objectives.AvgResponseTimeSoftObjective;
 import org.eclipse.viatra.dse.examples.bpmn.objectives.CostOfCreateResource;
 import org.eclipse.viatra.dse.examples.bpmn.objectives.MinResourceUsageSoftObjective;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.AbsenceOfResourceInstancesQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.EnoughResourceInstancesQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.EveryTaskHasVariantQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.UnassignedTaskQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.UnrequiredResourceInstanceQuerySpecification;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.AbsenceOfResourceInstances;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.EnoughResourceInstances;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.EveryTaskHasVariant;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.UnassignedTask;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.UnrequiredResourceInstance;
 import org.eclipse.viatra.dse.examples.bpmn.problems.BpmnProblems;
 import org.eclipse.viatra.dse.examples.bpmn.rules.BpmnRuleProvider;
 import org.eclipse.viatra.dse.examples.bpmn.statecoder.BpmnStateCoderFactory;
@@ -107,14 +107,14 @@
         dse.addTransformationRule(ruleProvider.makeSequentialRule);
 
         dse.addGlobalConstraint(new ModelQueriesGlobalConstraint()
-                .withConstraint(UnrequiredResourceInstanceQuerySpecification.instance()));
+                .withConstraint(UnrequiredResourceInstance.instance()));
         
         // Guidance objective
         dse.addObjective(new ConstraintsObjective()
-                .withHardConstraint(EnoughResourceInstancesQuerySpecification.instance())
-                .withHardConstraint(EveryTaskHasVariantQuerySpecification.instance())
-                .withSoftConstraint(AbsenceOfResourceInstancesQuerySpecification.instance(), 1)
-                .withSoftConstraint(UnassignedTaskQuerySpecification.instance(), 10)
+                .withHardConstraint(EnoughResourceInstances.instance())
+                .withHardConstraint(EveryTaskHasVariant.instance())
+                .withSoftConstraint(AbsenceOfResourceInstances.instance(), 1)
+                .withSoftConstraint(UnassignedTask.instance(), 10)
                 .withComparator(Comparators.LOWER_IS_BETTER)
                 .withLevel(0));
 
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/genetic/BpmnEvolutionaryExample.java b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/genetic/BpmnEvolutionaryExample.java
index 2828ba0..be7e71c 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/genetic/BpmnEvolutionaryExample.java
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/genetic/BpmnEvolutionaryExample.java
@@ -17,11 +17,11 @@
 import org.eclipse.viatra.dse.examples.bpmn.objectives.AvgResponseTimeSoftObjective;
 import org.eclipse.viatra.dse.examples.bpmn.objectives.CostOfCreateResource;
 import org.eclipse.viatra.dse.examples.bpmn.objectives.MinResourceUsageSoftObjective;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.AbsenceOfResourceInstancesQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.EnoughResourceInstancesQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.EveryTaskHasVariantQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.UnassignedTaskQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.UnrequiredResourceInstanceQuerySpecification;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.AbsenceOfResourceInstances;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.EnoughResourceInstances;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.EveryTaskHasVariant;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.UnassignedTask;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.UnrequiredResourceInstance;
 import org.eclipse.viatra.dse.examples.bpmn.problems.BpmnProblems;
 import org.eclipse.viatra.dse.examples.bpmn.rules.BpmnRuleProvider;
 import org.eclipse.viatra.dse.examples.bpmn.statecoder.BpmnStateCoderFactory;
@@ -61,14 +61,14 @@
         dse.addTransformationRule(ruleProvider.makeSequentialRule);
 
         dse.addGlobalConstraint(new ModelQueriesGlobalConstraint()
-                .withConstraint(UnrequiredResourceInstanceQuerySpecification.instance()));
+                .withConstraint(UnrequiredResourceInstance.instance()));
 
         dse.addObjective(new ConstraintsObjective()
-                .withHardConstraint(EnoughResourceInstancesQuerySpecification.instance())
-                .withHardConstraint(EveryTaskHasVariantQuerySpecification.instance())
-                .withSoftConstraint("LackOfResourceInstances", AbsenceOfResourceInstancesQuerySpecification.instance(), 1)
-                .withSoftConstraint("UnassignedTask", UnassignedTaskQuerySpecification.instance(), 10)
-                .withSoftConstraint("UnrequiredResources", UnrequiredResourceInstanceQuerySpecification.instance(), 100)
+                .withHardConstraint(EnoughResourceInstances.instance())
+                .withHardConstraint(EveryTaskHasVariant.instance())
+                .withSoftConstraint("LackOfResourceInstances", AbsenceOfResourceInstances.instance(), 1)
+                .withSoftConstraint("UnassignedTask", UnassignedTask.instance(), 10)
+                .withSoftConstraint("UnrequiredResources", UnrequiredResourceInstance.instance(), 100)
                 .withComparator(Comparators.LOWER_IS_BETTER)
                 .withLevel(0));
 
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/objectives/CostOfCreateResource.java b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/objectives/CostOfCreateResource.java
index 7def32d..b85db7a 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/objectives/CostOfCreateResource.java
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/objectives/CostOfCreateResource.java
@@ -1,6 +1,6 @@
 package org.eclipse.viatra.dse.examples.bpmn.objectives;
 
-import org.eclipse.viatra.dse.examples.bpmn.patterns.CreateResourceMatch;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.CreateResource;
 import org.eclipse.viatra.dse.examples.bpmn.problems.BpmnProblems;
 import org.eclipse.viatra.dse.objectives.ActivationFitnessProcessor;
 import org.eclipse.viatra.query.runtime.api.IPatternMatch;
@@ -11,7 +11,7 @@
 public final class CostOfCreateResource implements ActivationFitnessProcessor {
     @Override
     public double process(IPatternMatch match) {
-        CreateResourceMatch m = (CreateResourceMatch) match;
+        CreateResource.Match m = (CreateResource.Match) match;
         String name = m.getRTV().getName();
         Double result;
         if (name.equals(BpmnProblems.NOSQL_FAST)) {
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/rules/BpmnRuleProvider.xtend b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/rules/BpmnRuleProvider.xtend
index 03fd1ae..c4fe7d1 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/rules/BpmnRuleProvider.xtend
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/rules/BpmnRuleProvider.xtend
@@ -1,9 +1,9 @@
 package org.eclipse.viatra.dse.examples.bpmn.rules
 
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.AllocateTaskToVariantQuerySpecification
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.CreateResourceQuerySpecification
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.MakeParallelQuerySpecification
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.MakeSequentialQuerySpecification
+import org.eclipse.viatra.dse.examples.bpmn.patterns.AllocateTaskToVariant
+import org.eclipse.viatra.dse.examples.bpmn.patterns.CreateResource
+import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeParallel
+import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeSequential
 import org.eclipse.viatra.dse.examples.bpmn.problems.BpmnProblems
 import org.eclipse.viatra.dse.examples.bpmn.problems.SimplifiedBpmnBuilder
 import org.eclipse.viatra.dse.examples.simplifiedbpmn.SimplifiedbpmnFactory
@@ -23,7 +23,7 @@
     new() {
         allocateRule = createRule
             .name("AllocateTaskToVariantRule")
-            .precondition(AllocateTaskToVariantQuerySpecification.instance())
+            .precondition(AllocateTaskToVariant.instance())
             .action[
                 t.variant = RTV
             ]
@@ -31,7 +31,7 @@
 
         allocateRuleFilteredExample = createRule
             .name("FilteredAllocateTaskToVariantRule")
-            .precondition(AllocateTaskToVariantQuerySpecification.instance())
+            .precondition(AllocateTaskToVariant.instance())
             .action[
                 t.variant = RTV
             ]
@@ -46,7 +46,7 @@
 
         createResourceRule = createRule
             .name("CreateResourceRule")
-            .precondition(CreateResourceQuerySpecification.instance())
+            .precondition(CreateResource.instance())
             .action[
                 RTV.instances += SimplifiedbpmnFactory.eINSTANCE.createResourceInstance()
             ]
@@ -54,7 +54,7 @@
 
         makeParallelRule = createRule
             .name("MakeParallelRule")
-            .precondition(MakeParallelQuerySpecification.instance())
+            .precondition(MakeParallel.instance())
             .action[
                 val builder = new SimplifiedBpmnBuilder(root)
 
@@ -86,7 +86,7 @@
 
         makeSequentialRule = createRule
             .name("MakeSequentialRule")
-            .precondition(MakeSequentialQuerySpecification.instance())
+            .precondition(MakeSequential.instance())
             .action[
                 var flows = t1.inFlows
                 val divergingGateway = flows.get(0).getSource()
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/statecoder/BpmnStateCoder.java b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/statecoder/BpmnStateCoder.java
index 358d8d4..5e9e50e 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/statecoder/BpmnStateCoder.java
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/src/org/eclipse/viatra/dse/examples/bpmn/statecoder/BpmnStateCoder.java
@@ -15,10 +15,10 @@
 
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.viatra.dse.api.DSEException;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.AllocateTaskToVariantMatch;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.CreateResourceMatch;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeParallelMatch;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeSequentialMatch;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.AllocateTaskToVariant;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.CreateResource;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeParallel;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeSequential;
 import org.eclipse.viatra.dse.examples.bpmn.problems.SimplifiedBpmnBuilder;
 import org.eclipse.viatra.dse.examples.simplifiedbpmn.ParallelGateway;
 import org.eclipse.viatra.dse.examples.simplifiedbpmn.ResourceType;
@@ -96,17 +96,17 @@
     @Override
     public Object createActivationCode(IPatternMatch match) {
 
-        if (match instanceof CreateResourceMatch) {
-            CreateResourceMatch m = (CreateResourceMatch) match;
+        if (match instanceof CreateResource.Match) {
+            CreateResource.Match m = (CreateResource.Match) match;
             return m.getRTV().getName().intern();
-        } else if (match instanceof AllocateTaskToVariantMatch) {
-            AllocateTaskToVariantMatch m = (AllocateTaskToVariantMatch) match;
+        } else if (match instanceof AllocateTaskToVariant.Match) {
+            AllocateTaskToVariant.Match m = (AllocateTaskToVariant.Match) match;
             return (m.getT().getName() + "-" + m.getRTV().getName()).intern();
-        } else if (match instanceof MakeParallelMatch) {
-            MakeParallelMatch m = (MakeParallelMatch) match;
+        } else if (match instanceof MakeParallel.Match) {
+            MakeParallel.Match m = (MakeParallel.Match) match;
             return ("Parallel:" + SimplifiedBpmnBuilder.createOrderedString(m.getT1().getName(), m.getT2().getName())).intern();
-        } else if (match instanceof MakeSequentialMatch) {
-            MakeSequentialMatch m = (MakeSequentialMatch) match;
+        } else if (match instanceof MakeSequential.Match) {
+            MakeSequential.Match m = (MakeSequential.Match) match;
             return ("Sequential:" + SimplifiedBpmnBuilder.createOrderedString(m.getT1().getName(), m.getT2().getName())).intern();
         } else {
             throw new DSEException("Unsupported rule.");
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/.BpmnRuleProvider.java._trace b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/.BpmnRuleProvider.java._trace
index b6a7590..0a80b7b 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/.BpmnRuleProvider.java._trace
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/.BpmnRuleProvider.java._trace
Binary files differ
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/.BpmnRuleProvider.xtendbin b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/.BpmnRuleProvider.xtendbin
index fe97265..b8f7304 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/.BpmnRuleProvider.xtendbin
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/.BpmnRuleProvider.xtendbin
Binary files differ
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/BpmnRuleProvider.java b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/BpmnRuleProvider.java
index a15f5c3..61f513b 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/BpmnRuleProvider.java
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.dse/xtend-gen/org/eclipse/viatra/dse/examples/bpmn/rules/BpmnRuleProvider.java
@@ -1,18 +1,10 @@
 package org.eclipse.viatra.dse.examples.bpmn.rules;
 
 import org.eclipse.emf.common.util.EList;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.AllocateTaskToVariantMatch;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.AllocateTaskToVariantMatcher;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.CreateResourceMatch;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.CreateResourceMatcher;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeParallelMatch;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeParallelMatcher;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeSequentialMatch;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeSequentialMatcher;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.AllocateTaskToVariantQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.CreateResourceQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.MakeParallelQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.MakeSequentialQuerySpecification;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.AllocateTaskToVariant;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.CreateResource;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeParallel;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.MakeSequential;
 import org.eclipse.viatra.dse.examples.bpmn.problems.BpmnProblems;
 import org.eclipse.viatra.dse.examples.bpmn.problems.SimplifiedBpmnBuilder;
 import org.eclipse.viatra.dse.examples.simplifiedbpmn.BaseElement;
@@ -26,7 +18,6 @@
 import org.eclipse.viatra.transformation.evm.api.event.EventFilter;
 import org.eclipse.viatra.transformation.runtime.emf.rules.batch.BatchTransformationRule;
 import org.eclipse.viatra.transformation.runtime.emf.rules.batch.BatchTransformationRuleFactory;
-import org.eclipse.xtext.xbase.lib.Exceptions;
 import org.eclipse.xtext.xbase.lib.Extension;
 
 @SuppressWarnings("all")
@@ -45,97 +36,93 @@
   public BatchTransformationRule<?, ?> allocateRuleFilteredExample;
   
   public BpmnRuleProvider() {
-    try {
-      final IMatchProcessor<AllocateTaskToVariantMatch> _function = (AllocateTaskToVariantMatch it) -> {
-        Task _t = it.getT();
-        _t.setVariant(it.getRTV());
-      };
-      this.allocateRule = this.factory.<AllocateTaskToVariantMatch, AllocateTaskToVariantMatcher>createRule().name("AllocateTaskToVariantRule").precondition(AllocateTaskToVariantQuerySpecification.instance()).action(_function).build();
-      final IMatchProcessor<AllocateTaskToVariantMatch> _function_1 = (AllocateTaskToVariantMatch it) -> {
-        Task _t = it.getT();
-        _t.setVariant(it.getRTV());
-      };
-      final EventFilter<AllocateTaskToVariantMatch> _function_2 = (AllocateTaskToVariantMatch it) -> {
-        if ((it.getRTV().getName().equals(BpmnProblems.NOSQL_MEDIUM) || 
-          it.getRTV().getName().equals(BpmnProblems.SQL_MEDIUM))) {
-          return false;
+    final IMatchProcessor<AllocateTaskToVariant.Match> _function = (AllocateTaskToVariant.Match it) -> {
+      Task _t = it.getT();
+      _t.setVariant(it.getRTV());
+    };
+    this.allocateRule = this.factory.<AllocateTaskToVariant.Match, AllocateTaskToVariant.Matcher>createRule().name("AllocateTaskToVariantRule").precondition(AllocateTaskToVariant.instance()).action(_function).build();
+    final IMatchProcessor<AllocateTaskToVariant.Match> _function_1 = (AllocateTaskToVariant.Match it) -> {
+      Task _t = it.getT();
+      _t.setVariant(it.getRTV());
+    };
+    final EventFilter<AllocateTaskToVariant.Match> _function_2 = (AllocateTaskToVariant.Match it) -> {
+      if ((it.getRTV().getName().equals(BpmnProblems.NOSQL_MEDIUM) || 
+        it.getRTV().getName().equals(BpmnProblems.SQL_MEDIUM))) {
+        return false;
+      }
+      return true;
+    };
+    this.allocateRuleFilteredExample = this.factory.<AllocateTaskToVariant.Match, AllocateTaskToVariant.Matcher>createRule().name("FilteredAllocateTaskToVariantRule").precondition(AllocateTaskToVariant.instance()).action(_function_1).filter(_function_2).build();
+    final IMatchProcessor<CreateResource.Match> _function_3 = (CreateResource.Match it) -> {
+      EList<ResourceInstance> _instances = it.getRTV().getInstances();
+      ResourceInstance _createResourceInstance = SimplifiedbpmnFactory.eINSTANCE.createResourceInstance();
+      _instances.add(_createResourceInstance);
+    };
+    this.createResourceRule = this.factory.<CreateResource.Match, CreateResource.Matcher>createRule().name("CreateResourceRule").precondition(CreateResource.instance()).action(_function_3).build();
+    final IMatchProcessor<MakeParallel.Match> _function_4 = (MakeParallel.Match it) -> {
+      SimplifiedBPMN _root = it.getRoot();
+      final SimplifiedBpmnBuilder builder = new SimplifiedBpmnBuilder(_root);
+      final ParallelGateway divergingGateway = builder.createParallelGateway(it.getT1(), it.getT2(), true);
+      final ParallelGateway convergingGateway = builder.createParallelGateway(it.getT1(), it.getT2(), false);
+      EList<SequenceFlow> flows = it.getT1().getInFlows();
+      while ((!flows.isEmpty())) {
+        {
+          final SequenceFlow flow = flows.get(0);
+          flow.setTarget(divergingGateway);
         }
-        return true;
-      };
-      this.allocateRuleFilteredExample = this.factory.<AllocateTaskToVariantMatch, AllocateTaskToVariantMatcher>createRule().name("FilteredAllocateTaskToVariantRule").precondition(AllocateTaskToVariantQuerySpecification.instance()).action(_function_1).filter(_function_2).build();
-      final IMatchProcessor<CreateResourceMatch> _function_3 = (CreateResourceMatch it) -> {
-        EList<ResourceInstance> _instances = it.getRTV().getInstances();
-        ResourceInstance _createResourceInstance = SimplifiedbpmnFactory.eINSTANCE.createResourceInstance();
-        _instances.add(_createResourceInstance);
-      };
-      this.createResourceRule = this.factory.<CreateResourceMatch, CreateResourceMatcher>createRule().name("CreateResourceRule").precondition(CreateResourceQuerySpecification.instance()).action(_function_3).build();
-      final IMatchProcessor<MakeParallelMatch> _function_4 = (MakeParallelMatch it) -> {
-        SimplifiedBPMN _root = it.getRoot();
-        final SimplifiedBpmnBuilder builder = new SimplifiedBpmnBuilder(_root);
-        final ParallelGateway divergingGateway = builder.createParallelGateway(it.getT1(), it.getT2(), true);
-        final ParallelGateway convergingGateway = builder.createParallelGateway(it.getT1(), it.getT2(), false);
-        EList<SequenceFlow> flows = it.getT1().getInFlows();
-        while ((!flows.isEmpty())) {
-          {
-            final SequenceFlow flow = flows.get(0);
-            flow.setTarget(divergingGateway);
-          }
+      }
+      flows = it.getT2().getOutFlows();
+      while ((!flows.isEmpty())) {
+        {
+          final SequenceFlow flow = flows.get(0);
+          flow.setSource(convergingGateway);
         }
-        flows = it.getT2().getOutFlows();
-        while ((!flows.isEmpty())) {
-          {
-            final SequenceFlow flow = flows.get(0);
-            flow.setSource(convergingGateway);
-          }
+      }
+      final SequenceFlow flow = it.getT1().getOutFlows().get(0);
+      EList<SequenceFlow> _sequenceFlows = it.getRoot().getSequenceFlows();
+      _sequenceFlows.remove(flow);
+      flow.setTarget(null);
+      flow.setSource(null);
+      builder.createFlow(divergingGateway, it.getT1());
+      builder.createFlow(divergingGateway, it.getT2());
+      builder.createFlow(it.getT1(), convergingGateway);
+      builder.createFlow(it.getT2(), convergingGateway);
+    };
+    this.makeParallelRule = this.factory.<MakeParallel.Match, MakeParallel.Matcher>createRule().name("MakeParallelRule").precondition(MakeParallel.instance()).action(_function_4).build();
+    final IMatchProcessor<MakeSequential.Match> _function_5 = (MakeSequential.Match it) -> {
+      EList<SequenceFlow> flows = it.getT1().getInFlows();
+      final BaseElement divergingGateway = flows.get(0).getSource();
+      it.getRoot().getParallelGateways().remove(divergingGateway);
+      it.getRoot().getSequenceFlows().removeAll(flows);
+      flows.clear();
+      flows = it.getT2().getInFlows();
+      it.getRoot().getSequenceFlows().removeAll(flows);
+      flows.clear();
+      flows = it.getT1().getOutFlows();
+      it.getRoot().getSequenceFlows().removeAll(flows);
+      flows.clear();
+      flows = it.getT2().getOutFlows();
+      final BaseElement convergingGateway = flows.get(0).getTarget();
+      it.getRoot().getParallelGateways().remove(convergingGateway);
+      it.getRoot().getSequenceFlows().removeAll(flows);
+      flows.clear();
+      flows = divergingGateway.getInFlows();
+      while ((!flows.isEmpty())) {
+        {
+          final SequenceFlow flow = flows.get(0);
+          flow.setTarget(it.getT1());
         }
-        final SequenceFlow flow = it.getT1().getOutFlows().get(0);
-        EList<SequenceFlow> _sequenceFlows = it.getRoot().getSequenceFlows();
-        _sequenceFlows.remove(flow);
-        flow.setTarget(null);
-        flow.setSource(null);
-        builder.createFlow(divergingGateway, it.getT1());
-        builder.createFlow(divergingGateway, it.getT2());
-        builder.createFlow(it.getT1(), convergingGateway);
-        builder.createFlow(it.getT2(), convergingGateway);
-      };
-      this.makeParallelRule = this.factory.<MakeParallelMatch, MakeParallelMatcher>createRule().name("MakeParallelRule").precondition(MakeParallelQuerySpecification.instance()).action(_function_4).build();
-      final IMatchProcessor<MakeSequentialMatch> _function_5 = (MakeSequentialMatch it) -> {
-        EList<SequenceFlow> flows = it.getT1().getInFlows();
-        final BaseElement divergingGateway = flows.get(0).getSource();
-        it.getRoot().getParallelGateways().remove(divergingGateway);
-        it.getRoot().getSequenceFlows().removeAll(flows);
-        flows.clear();
-        flows = it.getT2().getInFlows();
-        it.getRoot().getSequenceFlows().removeAll(flows);
-        flows.clear();
-        flows = it.getT1().getOutFlows();
-        it.getRoot().getSequenceFlows().removeAll(flows);
-        flows.clear();
-        flows = it.getT2().getOutFlows();
-        final BaseElement convergingGateway = flows.get(0).getTarget();
-        it.getRoot().getParallelGateways().remove(convergingGateway);
-        it.getRoot().getSequenceFlows().removeAll(flows);
-        flows.clear();
-        flows = divergingGateway.getInFlows();
-        while ((!flows.isEmpty())) {
-          {
-            final SequenceFlow flow = flows.get(0);
-            flow.setTarget(it.getT1());
-          }
+      }
+      flows = convergingGateway.getOutFlows();
+      while ((!flows.isEmpty())) {
+        {
+          final SequenceFlow flow = flows.get(0);
+          flow.setSource(it.getT2());
         }
-        flows = convergingGateway.getOutFlows();
-        while ((!flows.isEmpty())) {
-          {
-            final SequenceFlow flow = flows.get(0);
-            flow.setSource(it.getT2());
-          }
-        }
-        SimplifiedBPMN _root = it.getRoot();
-        new SimplifiedBpmnBuilder(_root).createFlow(it.getT1(), it.getT2());
-      };
-      this.makeSequentialRule = this.factory.<MakeSequentialMatch, MakeSequentialMatcher>createRule().name("MakeSequentialRule").precondition(MakeSequentialQuerySpecification.instance()).action(_function_5).build();
-    } catch (Throwable _e) {
-      throw Exceptions.sneakyThrow(_e);
-    }
+      }
+      SimplifiedBPMN _root = it.getRoot();
+      new SimplifiedBpmnBuilder(_root).createFlow(it.getT1(), it.getT2());
+    };
+    this.makeSequentialRule = this.factory.<MakeSequential.Match, MakeSequential.Matcher>createRule().name("MakeSequentialRule").precondition(MakeSequential.instance()).action(_function_5).build();
   }
 }
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.model/META-INF/MANIFEST.MF b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.model/META-INF/MANIFEST.MF
index 4433de2..5f90e06 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.model/META-INF/MANIFEST.MF
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.model/META-INF/MANIFEST.MF
@@ -12,3 +12,4 @@
  org.eclipse.emf.ecore;visibility:=reexport
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.viatra.dse.examples.bpmn.model
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.patterns/META-INF/MANIFEST.MF b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.patterns/META-INF/MANIFEST.MF
index e29e614..e7b8212 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.patterns/META-INF/MANIFEST.MF
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.patterns/META-INF/MANIFEST.MF
@@ -3,11 +3,11 @@
 Bundle-Name: org.eclipse.viatra.dse.examples.bpmn.patterns
 Bundle-SymbolicName: org.eclipse.viatra.dse.examples.bpmn.patterns;singleton:=true
 Bundle-Version: 0.20.0.qualifier
-Export-Package: org.eclipse.viatra.dse.examples.bpmn.patterns,
- org.eclipse.viatra.dse.examples.bpmn.patterns.util
+Export-Package: org.eclipse.viatra.dse.examples.bpmn.patterns
 Require-Bundle: org.eclipse.viatra.dse.examples.bpmn.model,
- org.eclipse.emf.ecore,
- org.eclipse.xtext.xbase.lib,
- org.eclipse.viatra.query.runtime
+  org.eclipse.emf.ecore,
+  org.eclipse.xtext.xbase.lib,
+  org.eclipse.viatra.query.runtime
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.log4j
+Automatic-Module-Name: org.eclipse.viatra.dse.examples.bpmn.patterns
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.test/META-INF/MANIFEST.MF b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.test/META-INF/MANIFEST.MF
index 08d3a9d..1d9101e 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.test/META-INF/MANIFEST.MF
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.test/META-INF/MANIFEST.MF
@@ -11,3 +11,4 @@
  com.google.guava,
  org.junit
 Import-Package: org.apache.log4j
+Automatic-Module-Name: org.eclipse.viatra.dse.examples.bpmn.test
diff --git a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.test/src/org/eclipse/viatra/dse/examples/bpmn/test/BpmnExamplesTest.java b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.test/src/org/eclipse/viatra/dse/examples/bpmn/test/BpmnExamplesTest.java
index e4a1323..9ee25ab 100644
--- a/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.test/src/org/eclipse/viatra/dse/examples/bpmn/test/BpmnExamplesTest.java
+++ b/dse/bpmn/org.eclipse.viatra.dse.examples.bpmn.test/src/org/eclipse/viatra/dse/examples/bpmn/test/BpmnExamplesTest.java
@@ -19,11 +19,11 @@
 import org.eclipse.viatra.dse.examples.bpmn.objectives.AvgResponseTimeSoftObjective;
 import org.eclipse.viatra.dse.examples.bpmn.objectives.CostOfCreateResource;
 import org.eclipse.viatra.dse.examples.bpmn.objectives.MinResourceUsageSoftObjective;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.AbsenceOfResourceInstancesQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.EnoughResourceInstancesQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.EveryTaskHasVariantQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.UnassignedTaskQuerySpecification;
-import org.eclipse.viatra.dse.examples.bpmn.patterns.util.UnrequiredResourceInstanceQuerySpecification;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.AbsenceOfResourceInstances;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.EnoughResourceInstances;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.EveryTaskHasVariant;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.UnassignedTask;
+import org.eclipse.viatra.dse.examples.bpmn.patterns.UnrequiredResourceInstance;
 import org.eclipse.viatra.dse.examples.bpmn.problems.BpmnProblems;
 import org.eclipse.viatra.dse.examples.bpmn.rules.BpmnRuleProvider;
 import org.eclipse.viatra.dse.examples.bpmn.statecoder.BpmnStateCoderFactory;
@@ -90,14 +90,14 @@
         dse.addTransformationRule(ruleProvider.makeSequentialRule);
 
         dse.addGlobalConstraint(new ModelQueriesGlobalConstraint()
-                .withConstraint(UnrequiredResourceInstanceQuerySpecification.instance()));
+                .withConstraint(UnrequiredResourceInstance.instance()));
         
         // Guidance objective
         dse.addObjective(new ConstraintsObjective()
-                .withHardConstraint(EnoughResourceInstancesQuerySpecification.instance())
-                .withHardConstraint(EveryTaskHasVariantQuerySpecification.instance())
-                .withSoftConstraint(AbsenceOfResourceInstancesQuerySpecification.instance(), 1)
-                .withSoftConstraint(UnassignedTaskQuerySpecification.instance(), 10)
+                .withHardConstraint(EnoughResourceInstances.instance())
+                .withHardConstraint(EveryTaskHasVariant.instance())
+                .withSoftConstraint(AbsenceOfResourceInstances.instance(), 1)
+                .withSoftConstraint(UnassignedTask.instance(), 10)
                 .withComparator(Comparators.LOWER_IS_BETTER)
                 .withLevel(0));
 
diff --git a/dse/bpmn/pom.xml b/dse/bpmn/pom.xml
index daef438..5d40514 100644
--- a/dse/bpmn/pom.xml
+++ b/dse/bpmn/pom.xml
@@ -46,6 +46,11 @@
 			<url>${viatra.repository.url}</url>
 		</repository>
 		<repository>
+			<id>eclipse.collections.update</id>
+			<layout>p2</layout>
+			<url>${ec.repository.url}</url>
+		</repository>
+		<repository>
 			<id>xtext.update</id>
 			<layout>p2</layout>
 			<url>${xtext.repository.url}</url>
@@ -76,6 +81,7 @@
 		<tycho.version>1.0.0</tycho.version>
 		<xtend.compiler.version>2.13.0</xtend.compiler.version>
 		<viatra.repository.url>http://download.eclipse.org/viatra/updates/integration</viatra.repository.url>
+		<ec.repository.url>http://download.eclipse.org/collections/9.2.0.M1/repository</ec.repository.url>
 		<xtext.repository.url>http://download.eclipse.org/modeling/tmf/xtext/updates/releases/2.13.0</xtext.repository.url>
 		<eclipse.repository.release.url>http://download.eclipse.org/releases/neon</eclipse.repository.release.url>
 		<eclipse.repository.url>http://download.eclipse.org/eclipse/updates/4.6</eclipse.repository.url>