code: private void viewPos(final IVdmProject project) throws PartInitException
  	{
  		final IVdmModel model = project.getModel();
  
  		if (!model.isParseCorrect())
  		{
  			return;
  			// return new Status(Status.ERROR, IPoviewerConstants.PLUGIN_ID, "Project contains parse errors");
  		}
  
  		if (model == null || !model.isTypeCorrect())
  		{
  			VdmTypeCheckerUi.typeCheck(shell, project);
  		}
  		final Job showJob = new Job("Generating Proof Obligations")
  		{
  
  			@Override
  			protected IStatus run(IProgressMonitor monitor)
  			{
  				monitor.worked(IProgressMonitor.UNKNOWN);
  
  				try
  				{
  					if (!model.isParseCorrect() || !model.isTypeCorrect())
  					{
  						return new Status(Status.ERROR, IPoviewerConstants.PLUGIN_ID, "Project is not build correctly, build error");
  					}
  
  					final ProofObligationList pos = getProofObligations(model, project.getDialect());
  					pos.renumber();
  					showPOs(project, pos);
  
  				} catch (Throwable e)
  				{
  					e.printStackTrace();
  					return new Status(IStatus.ERROR, IPoviewerConstants.PLUGIN_ID, "Error showing PO's Model state: Parse="
  							+ model.isParseCorrect()
  							+ " TC="
  							+ model.isTypeCorrect(), e);
  				}
  				return new Status(IStatus.OK, "org.overture.ide.plugins.poviewer", "Ok");
  			}
  
  		};
  		showJob.schedule();
  
  	}
docs: protected abstract String getNature();