               meta.source = src
               meta.url = if res.redirect then res.redirect else res.url
               meta.found[src] = res.url
-              return meta if not all and res.redirect isnt false
+              suitable = not all and res.redirect isnt false
+
+      for sr in sources
+        if parallel
+          (() ->
+            src = sr
+            Meteor.setTimeout (() =>
+              _title src
+              done += 1), 10
+          )()
+        else
+          _title sr
+          return meta if suitable
+      while done isnt sources.length
+        if suitable
+          return meta
+        else
+          future = new Future();
+          Meteor.setTimeout (() -> future.return()), 500
+          future.wait()
 
   if not meta.url and journal and meta.journal and 'doaj' in sources # can check DOAJ for journal
     try

  meta.found = {}
  meta.checked = {identifiers:[],titles:[]}
  meta.original = meta.url

  if not meta.pmid
    lurl = meta.url.toLowerCase()

            meta.source = src
            meta.licence ?= res.best_oa_location?.license
            meta.journal = res.journal?.title?.split('(')[0].trim()
            suitable = not all and res.redirect isnt false

    for sr in sources
      if parallel
        (() ->
          src = sr
          Meteor.setTimeout (() ->
            _doi src
            done += 1) , 10
        )()
      else
        _doi sr
        return meta if suitable
    while done isnt sources.length
      if suitable
        return meta
      else
        future = new Future();
        Meteor.setTimeout (() -> future.return()), 500
        future.wait()

  if titles
    if not meta.title and meta.doi
