function timelineAgent(id, proxyAddress) {
  // execute super constructor
  eve.Agent.call(this, id);

  this.proxyAddress = proxyAddress;

  this.eventTypes = {};
  this.timelineEvents = [];

  this.timelineClient = undefined;
  this.inputClient = undefined;


  // extend the agent with RPC functionality
  this.rpc = this.loadModule('rpc', this.rpcFunctions, {timeout:2000}); // option 1

  // connect to all transports provided by the system
  this.connect(eve.system.transports.getAll());

}

// extend the eve.Agent prototype
timelineAgent.prototype = Object.create(eve.Agent.prototype);
timelineAgent.prototype.constructor = timelineAgent;

timelineAgent.prototype.rpcFunctions = {};

timelineAgent.prototype.rpcFunctions.close = function() {
  sessionClosed();
};

timelineAgent.prototype.connectToProxy = function() {
  this.rpc.request(this.proxyAddress, {method:'setTimelineClient',params:{}}).done(function () {
    connected = true;
  });
};

timelineAgent.prototype.rpcFunctions.addTimelineEvent = function(params,sender) {
  addToDataset(params);
};

timelineAgent.prototype.rpcFunctions.resetTimelineEvents = function(params,sender) {
  clearDataset();
};

timelineAgent.prototype.wakeProxy = function(httpAddress) {
  this.rpc.request(httpAddress, {method:'wakeUp',params:{}}).done();
};

timelineAgent.prototype.getTimelineEvents = function (params, sender) {
  var me = this;
  return new Promise(function(resolve,reject) {
    me.rpc.request(me.proxyAddress, {method: 'getTimelineEvents', params: {}})
      .then(function (reply) {
        resolve(reply);
      })
      .catch(function(err) {reject(err);});
  })
};