             rs = if src is 'doaj' then API.use[src].articles[which](metadata[which]) else if src is 'epmc' then API.use.europepmc[which](metadata[which]) else API.use[src][which] metadata[which]
             res.checked.push(src) if src not in res.checked
             mt = rs.title ? rs.dctitle ? rs.bibjson?.title ? rs.metadata?['oaf:result']?.title?.$
-            if rs?.url and (which isnt 'title' or (mt and mt.length <= metadata.title.length*1.2 and mt.length >= metadata.title.length*.8 and metadata.title.toLowerCase().replace(/ /g,'').indexOf(mt.toLowerCase().replace(' ','').replace(' ','').replace(' ','').split(' ')[0]) isnt -1))
+            if (rs?.url or rs?.open) and (which isnt 'title' or (mt and mt.length <= metadata.title.length*1.2 and mt.length >= metadata.title.length*.8 and metadata.title.toLowerCase().replace(/ /g,'').indexOf(mt.toLowerCase().replace(' ','').replace(' ','').replace(' ','').split(' ')[0]) isnt -1))
               if rs.redirect isnt false
-                res.redirect = if rs.redirect then rs.redirect else rs.url
+                res.redirect = if rs.redirect then rs.redirect else if rs.open then rs.open else rs.url
                 res.url = res.redirect
+                res.open = res.url
                 res.found[src] ?= res.url
               metadata.licence ?= rs.licence
               metadata.licence ?= rs.best_oa_location?.license if rs.best_oa_location?.license

  res.found = {}

  API.log msg: 'OAB finding academic content', level: 'debug', metadata: JSON.stringify metadata

  # special cases for instantill/shareyourpaper/other demos - dev and live demo accounts that always return a fixed answer
  if (options.plugin is 'instantill' or options.plugin is 'shareyourpaper') and (metadata.doi is '10.1234/567890' or (metadata.doi? and metadata.doi.indexOf('10.1234/oab-syp-') is 0) or metadata.title is 'Engineering a Powerfully Simple Interlibrary Loan Experience with InstantILL') and options.from in ['qZooaHWRz9NLFNcgR','eZwJ83xp3oZDaec86'] 

    # if we have a url or content but no doi or title yet, try scraping the url/content
    if (not _got() or (res.find and not res.url)) and not metadata.doi and not metadata.title and ((options.url and 'scrape' in res.sources) or content)
      res.checked.push 'scrape' if not content? # scrape the page if we have to - this is slow, so we hope not to do this much
      _get metadata, API.service.oab.scrape options.url, content
      _get_formatted_crossref() # try crossref / epmc / reverse if we found useful metadata now
      _get_formatted_europepmc() if 'epmc' not in res.checked # don't bother if we were already able to look, e.g. by pmcid or pmid
      _get_reversed_crossref()
