public Object lookup(String serviceName) throws UnavailableServiceException {
      
      logger.info("Looking up JNLP Service:"+serviceName);
      
      //Can't be null Service Name
      if(serviceName == null) {
         throw new UnavailableServiceException("serviceName is null");
      }
      
      //First determine which app is calling this
      SecurityManager sm = System.getSecurityManager();
      if((sm instanceof BootSecurityManager) == false) {
         throw new UnavailableServiceException("Can't obtain Service when not using BootSecurityManager");
      }
      
      //return their impl of the Service
      AppInstance app = ((BootSecurityManager)sm).getApplication();
      if((app.getAppDesc() instanceof JNLPAppDesc) == false) {
         throw new UnavailableServiceException("Calling application is not a JNLP Application");
      }
      
      //Get BasicService
      if(serviceName.equals("javax.jnlp.BasicService")) {
         return new BasicServiceImpl((JNLPAppDesc)app.getAppDesc());
      }
      
      //Get FileOpenService
      if(serviceName.equals("javax.jnlp.FileOpenService")) {
         return (FileOpenService)new FileOpenServiceImpl();
      }
      
      //Get FileSaveService
      if(serviceName.equals("javax.jnlp.FileSaveService")) {
         return new FileSaveServiceImpl();
      }
      
      //Get ClipBoard Service
      if(serviceName.equals("javax.jnlp.ClipboardService")) {
         return new ClipboardServiceImpl(app);
      }
      
       //Get Print Service
      if(serviceName.equals("javax.jnlp.PrintService")) {
         return new PrintServiceImpl(app);
      }
      
      throw new UnavailableServiceException(serviceName);
   }