@Override
  public void refreshStatus() {
    super.refreshStatus();

    // refresh coordinates from system
    String cooString = this.getSystemProperty(CP_COORDINATE);

    InMemoSharkKB imkb = null;
    imkb = new InMemoSharkKB();

    XMLSerializer xs = new XMLSerializer();
    try {
      // create in memory copy and use it
      this.setContextCoordinates(xs.deserializeContextCoordinates(imkb, cooString));
    } catch (SharkKBException ex) {
      L.w(
          "cannot deserialize context coordinates from persistent storage: " + ex.getMessage(),
          this);
    }

    // info folder
    String foldernames = this.getSystemProperty(INFO_FOLDERNAME_PROPERTY);

    if (foldernames != null) {
      this.infoFolder = Util.string2Vector(foldernames, DELIMITER);

      if (this.infoFolder != null) {
        // recreate Information
        Enumeration<String> infoFoldernameEnum = this.infoFolder.elements();
        while (infoFoldernameEnum.hasMoreElements()) {
          String infoFoldername = infoFoldernameEnum.nextElement();

          // create property holder
          FSPropertyHolder fsph = new FSPropertyHolder(infoFoldername);

          // create cp with this propery holder
          FSInformation fsInfo;
          try {
            fsInfo = new FSInformation(fsph);
            fsInfo.refreshStatus();
            // add it to memory
            super.putInformation(fsInfo);
          } catch (SharkKBException ex) {
            //
          }
        }
      }
    } else {
      L.w(
          "strange: there was a cp read from file without information - that cp shouldn't exist: TODO",
          this);
    }
  }
  /**
   * make a copy in this fs implementation
   *
   * @param info
   */
  @Override
  public void addInformation(Information info) {
    FSInformation infoCopy = this.addInformation();

    Util.copyPropertiesFromPropertyHolderToPropertyHolder(info, infoCopy);
    OutputStream writeAccess = infoCopy.getOutputStream();

    InputStream readAccess = null;
    try {
      readAccess = info.getInputStream();
    } catch (SharkKBException e) {
    }

    info.streamContent(writeAccess);

    try {
      // close stream
      writeAccess.close();
    } catch (IOException ex) {
      L.d("cannot write fileoutputstream - strange", this);
    }

    /* information might have name and content-type
     * It looks very strange and actually it is:
     *
     * But.. Info becomes aware of its name and content-type
     * by resetting.
     */
    String value = info.getName();
    try {
      infoCopy.setName(value);
    } catch (SharkKBException ex) {
      // this error can not be thrown, because the name was already
      // checked when the name of the infoCopy was set and therefore it can not contain false
      // characters
    }

    value = info.getContentType();
    infoCopy.setContentType(value);
  }
  /** write status into system properties */
  @Override
  public void persist() {
    super.persist();

    XMLSerializer xs = new XMLSerializer();
    try {
      String cooString = xs.serializeSharkCS(this.getContextCoordinates());

      // save
      this.setSystemProperty(CP_COORDINATE, cooString);

    } catch (SharkKBException ex) {
      L.w(ex.getMessage(), this);
    }

    if (this.infoFolder != null) {
      // info folder
      String foldernames = Util.enumeration2String(this.infoFolder.elements(), DELIMITER);

      if (foldernames != null && foldernames.length() > 0) {
        this.setSystemProperty(INFO_FOLDERNAME_PROPERTY, foldernames);
      }
    }
  }