diff --git a/src/main/java/ch/psi/fda/aq/Acquisition.java b/src/main/java/ch/psi/fda/aq/Acquisition.java
new file mode 100644
index 0000000..2ba78be
--- /dev/null
+++ b/src/main/java/ch/psi/fda/aq/Acquisition.java
@@ -0,0 +1,1085 @@
+/**
+ *
+ * Copyright 2010 Paul Scherrer Institute. All rights reserved.
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This code is distributed in the hope that it will be useful,
+ * but without any warranty; without even the implied warranty of
+ * merchantability or fitness for a particular purpose. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this code. If not, see .
+ *
+ */
+
+package ch.psi.fda.aq;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeoutException;
+import java.util.logging.FileHandler;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+
+import com.google.common.eventbus.AsyncEventBus;
+import com.google.common.eventbus.EventBus;
+
+import ch.psi.fda.core.ActionLoop;
+import ch.psi.fda.core.Actor;
+import ch.psi.fda.core.Manipulation;
+import ch.psi.fda.core.Sensor;
+import ch.psi.fda.core.actions.ChannelAccessCondition;
+import ch.psi.fda.core.actions.ChannelAccessPut;
+import ch.psi.fda.core.actions.Delay;
+import ch.psi.fda.core.actors.ChannelAccessFunctionActuator;
+import ch.psi.fda.core.actors.ChannelAccessLinearActuator;
+import ch.psi.fda.core.actors.ChannelAccessTableActuator;
+import ch.psi.fda.core.actors.ComplexActuator;
+import ch.psi.fda.core.actors.JythonFunction;
+import ch.psi.fda.core.actors.PseudoActuatorSensor;
+import ch.psi.fda.core.guard.ChannelAccessGuard;
+import ch.psi.fda.core.guard.ChannelAccessGuardCondition;
+import ch.psi.fda.core.loops.ActorSensorLoop;
+import ch.psi.fda.core.loops.cr.CrlogicLoopStream;
+import ch.psi.fda.core.loops.cr.CrlogicResource;
+import ch.psi.fda.core.loops.cr.ParallelCrlogic;
+import ch.psi.fda.core.loops.cr.ScrlogicLoop;
+import ch.psi.fda.core.manipulator.JythonManipulation;
+import ch.psi.fda.core.scripting.JythonGlobalVariable;
+import ch.psi.fda.core.scripting.JythonParameterMapping;
+import ch.psi.fda.core.scripting.JythonParameterMappingChannel;
+import ch.psi.fda.core.scripting.JythonParameterMappingGlobalVariable;
+import ch.psi.fda.core.scripting.JythonParameterMappingID;
+import ch.psi.fda.core.sensors.ChannelAccessSensor;
+import ch.psi.fda.core.sensors.TimestampSensor;
+import ch.psi.fda.model.ModelManager;
+import ch.psi.fda.model.v1.Action;
+import ch.psi.fda.model.v1.ArrayDetector;
+import ch.psi.fda.model.v1.ArrayPositioner;
+import ch.psi.fda.model.v1.ChannelAction;
+import ch.psi.fda.model.v1.ChannelParameterMapping;
+import ch.psi.fda.model.v1.Configuration;
+import ch.psi.fda.model.v1.ContinuousDimension;
+import ch.psi.fda.model.v1.ContinuousPositioner;
+import ch.psi.fda.model.v1.Detector;
+import ch.psi.fda.model.v1.DetectorOfDetectors;
+import ch.psi.fda.model.v1.DiscreteStepDimension;
+import ch.psi.fda.model.v1.DiscreteStepPositioner;
+import ch.psi.fda.model.v1.Function;
+import ch.psi.fda.model.v1.FunctionPositioner;
+import ch.psi.fda.model.v1.Guard;
+import ch.psi.fda.model.v1.GuardCondition;
+import ch.psi.fda.model.v1.IDParameterMapping;
+import ch.psi.fda.model.v1.LinearPositioner;
+import ch.psi.fda.model.v1.ParameterMapping;
+import ch.psi.fda.model.v1.Positioner;
+import ch.psi.fda.model.v1.PseudoPositioner;
+import ch.psi.fda.model.v1.Recipient;
+import ch.psi.fda.model.v1.Region;
+import ch.psi.fda.model.v1.RegionPositioner;
+import ch.psi.fda.model.v1.ScalarDetector;
+import ch.psi.fda.model.v1.ScalerChannel;
+import ch.psi.fda.model.v1.Scan;
+import ch.psi.fda.model.v1.ScriptAction;
+import ch.psi.fda.model.v1.ScriptManipulation;
+import ch.psi.fda.model.v1.ShellAction;
+import ch.psi.fda.model.v1.SimpleScalarDetector;
+import ch.psi.fda.model.v1.Timestamp;
+import ch.psi.fda.model.v1.Variable;
+import ch.psi.fda.model.v1.VariableParameterMapping;
+import ch.psi.fda.serializer.SerializerTXT;
+import ch.psi.jcae.Channel;
+import ch.psi.jcae.ChannelDescriptor;
+import ch.psi.jcae.ChannelException;
+import ch.psi.jcae.ChannelService;
+import ch.psi.jcae.impl.type.DoubleTimestamp;
+import ch.psi.jcae.util.ComparatorAND;
+import ch.psi.jcae.util.ComparatorOR;
+import ch.psi.jcae.util.ComparatorREGEX;
+
+/**
+ * Data acquisition engine for performing scans
+ * Mapping is specific to scan model version 1.0
+ */
+public class Acquisition {
+
+ private static Logger logger = Logger.getLogger(Acquisition.class.getName());
+
+ private final AcquisitionConfiguration configuration;
+
+ private ActionLoop actionLoop;
+ private Manipulator manipulator;
+ private SerializerTXT serializer;
+
+ private List manipulations;
+ private volatile boolean active = false;
+
+ private NotificationAgent notificationAgent;
+
+ private Handler logHandler = null;
+
+ private File datafile;
+
+
+ private ChannelService cservice;
+ private List> channels = new ArrayList<>();
+ private List