private void startRead(final boolean isLoadingSession) {
      if (isLoadingSession) {
        clearSession();
      }

      Progress.setMinimum(0);
      Progress.setMaximum(files.size());

      Runnable run = new Runnable() {
        @Override
        public void run() {
          Progress.setIndeterminate(false);

          int i = 0;
          int filesAlready = Data.getFiles().size();
          for (File file : files) {
            if (!stopRq) {
              setLoadingText(i, file);

              PFile f;
              if (isLoadingSession) {
                if (sessionFiles == null) {
                  f = new PFile(file, Data.getFiles().size(), fUpload.get(i),
                          fEdit.get(i), fName.get(i), fDesc.get(i),
                          fDate.get(i), fCats.get(i), fCoor.get(i));
                } else {
                  f = new PFile(file, Data.getFiles().size(), false, false,
                          sessionFiles.get(i).get("name"),
                          sessionFiles.get(i).get("desc"),
                          sessionFiles.get(i).get("date"),
                          sessionFiles.get(i).get("cats"), "");
                }
              } else {
                f = new PFile(file, Data.getFiles().size());
              }

              Data.addPanel(f);
              Progress.setValue(i + 1);
              ++i;
            }
          }
          Progress.setIndeterminate(true);
          stopRead();
          
          for (int j = filesAlready; j < Data.getFiles().size(); j++) {
            PFile file = Data.getFiles().get(j);
            file.generateThumbnail();
          }
        }
      };

      Thread t = new Thread(run);
      t.setName("FFileLoading");
      t.start();
    }