SelfIL(SoarAgent agent) {
    super(agent, IOConstants.SELF, agent.getSoarAgent().GetInputLink());
    this.output = agent.getRobotOutput();
    properties = agent.getProperties();

    areaId = IntWme.newInstance(getRoot(), IOConstants.AREA);
    headlight = StringWme.newInstance(getRoot(), IOConstants.HEADLIGHT);
    battery = FloatWme.newInstance(getRoot(), IOConstants.BATTERY);

    Identifier pose = getRoot().CreateIdWME(IOConstants.POSE);
    xyz.add(DistanceWme.newInstance(pose, IOConstants.X, properties));
    xyz.add(DistanceWme.newInstance(pose, IOConstants.Y, properties));
    xyz.add(DistanceWme.newInstance(pose, IOConstants.Z, properties));
    yaw = YawWme.newInstance(pose, IOConstants.YAW, properties);
    xyzVelocity.add(LinSpeedWme.newInstance(pose, IOConstants.X_VELOCITY, properties));
    xyzVelocity.add(LinSpeedWme.newInstance(pose, IOConstants.Y_VELOCITY, properties));
    xyzVelocity.add(LinSpeedWme.newInstance(pose, IOConstants.Z_VELOCITY, properties));
    yawVelocity = AngSpeedWme.newInstance(pose, IOConstants.YAW_VELOCITY, properties);

    update();
  }