diff --git a/Tools/DirectIOART/CMakeLists.txt b/Tools/DirectIOART/CMakeLists.txt
index 356791473f5df3aa14172d3baddc15fbeeaadb50..b95edcddf22725940234575e2d011a1a86127847 100644
--- a/Tools/DirectIOART/CMakeLists.txt
+++ b/Tools/DirectIOART/CMakeLists.txt
@@ -12,5 +12,5 @@ atlas_depends_on_subdirs( PRIVATE
 # Install files from the package:
 atlas_install_scripts( test/*.sh test/*.py )
 
-### # Install joboptions
-### atlas_install_joboptions( share/*.py )
+# Install joboptions
+atlas_install_joboptions( share/*.py )
diff --git a/Tools/DirectIOART/generateARTtests.py b/Tools/DirectIOART/generateARTtests.py
index ff9527c59cceb1c4a7086d88508d1e425daf08fc..630a42904c86134df20790d510901105031ecee5 100755
--- a/Tools/DirectIOART/generateARTtests.py
+++ b/Tools/DirectIOART/generateARTtests.py
@@ -2,45 +2,144 @@
 
 import os
 
-HAMMERCLOUD_FILE = "mc15_13TeV.423202.Pythia8B_A14_CTEQ6L1_Jpsie3e13.merge.AOD.e3869_s2608_s2183_r6630_r6264"
+RDO_FILE = "mc16_13TeV:mc16_13TeV.361108.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Ztautau.recon.RDO.e3601_s3126_r9546"
+HAMMERCLOUD_FILE = "mc15_13TeV.423202.Pythia8B_A14_CTEQ6L1_Jpsie3e13.merge.AOD.e3869_s2608_s2183_r6630_r6264" #NOTE: needs update to mc16(?)
 PROJECTS = ["AthAnalysis", "AthDerivation", "AthSimulation", "Athena", "AnalysisBase"]
 
+RECO_TF_TURLS = {
+  "RDO" : (
+    {"ROOT"  : "root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc16_13TeV/90/96/RDO.11373415._000001.pool.root.1"}, # LRZ-LMU
+    {"DAVS"  : "davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc16_13TeV/90/96/RDO.11373415._000001.pool.root.1"  }, # LRZ-LMU
+    {"HTTPS" : "https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc16_13TeV/90/96/RDO.11373415._000001.pool.root.1" }, # LRZ-LMU
+  ),
+  "RAW" : (
+    {"ROOT"  : "" }, # LRZ-LMU
+    {"DAVS"  : "" }, # LRZ-LMU
+    {"HTTPS" : "" }, # LRZ-LMU
+  ),
+}
+
 TFILE_OPEN_TURLs = [
   {"ROOT":
-    ("root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # LRZ-LMU
-     "root://grid-dc.rzg.mpg.de:1094//pnfs/rzg.mpg.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # MPPMU
-     "root://dcache-atlas-xrootd.desy.de:1094//pnfs/desy.de/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # DESY-Hamburg
-     "root://lcg-se0.ifh.de:1094//pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # DESY-Zeuthen
-     "root://atlasxrootd-kit.gridka.de:1094//pnfs/gridka.de/atlas/disk-only/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Karlsruhe
-     "root://sedoor1.bfg.uni-freiburg.de:1094//pnfs/bfg.uni-freiburg.de/data/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Freiburg
-     "root://se-goegrid.gwdg.de:1094//pnfs/gwdg.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Goettingen
+    ("root://lcg-lrz-rootd.grid.lrz.de:1094/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",            # LRZ-LMU
+     "root://grid-dc.rzg.mpg.de:1094//pnfs/rzg.mpg.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                       # MPPMU
+     "root://dcache-atlas-xrootd.desy.de:1094//pnfs/desy.de/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                      # DESY-Hamburg
+     "root://lcg-se0.ifh.de:1094//pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                   # DESY-Zeuthen
+     "root://atlasxrootd-kit.gridka.de:1094//pnfs/gridka.de/atlas/disk-only/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                # Karlsruhe
+     "root://sedoor1.bfg.uni-freiburg.de:1094//pnfs/bfg.uni-freiburg.de/data/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",               # Freiburg
+     "root://se-goegrid.gwdg.de:1094//pnfs/gwdg.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                              # Goettingen
      "root://grid-se.physik.uni-wuppertal.de:1094//pnfs/physik.uni-wuppertal.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Wuppertal
     )
   },
   {"DAVS":
-    ("davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # LRZ-LMU
-     "davs://grid-dav.rzg.mpg.de:2880/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", #MPPMU
-     "davs://dcache-atlas-webdav.desy.de:2880/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # DESY-Hamburg
-     "davs://lcg-se0.ifh.de:2880/pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # DESY-Zeuthen
-     "davs://atlaswebdav-kit.gridka.de:2880/pnfs/gridka.de/atlas/disk-only/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Karlsruhe
-     "davs://webdav.bfg.uni-freiburg.de:2880/pnfs/bfg.uni-freiburg.de/data/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Freiburg
-     "davs://se-goegrid.gwdg.de:2880/pnfs/gwdg.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Goettingen
+    ("davs://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",             # LRZ-LMU
+     "davs://grid-dav.rzg.mpg.de:2880/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                           # MPPMU
+     "davs://dcache-atlas-webdav.desy.de:2880/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                         # DESY-Hamburg
+     "davs://lcg-se0.ifh.de:2880/pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                   # DESY-Zeuthen
+     "davs://atlaswebdav-kit.gridka.de:2880/pnfs/gridka.de/atlas/disk-only/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                # Karlsruhe
+     "davs://webdav.bfg.uni-freiburg.de:2880/pnfs/bfg.uni-freiburg.de/data/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                # Freiburg
+     "davs://se-goegrid.gwdg.de:2880/pnfs/gwdg.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                              # Goettingen
      "davs://grid-se.physik.uni-wuppertal.de:2881/pnfs/physik.uni-wuppertal.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Wuppertal
     )
   },
   {"HTTPS":
-    ("https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # LRZ-LMU
-     "https://grid-dav.rzg.mpg.de:2880/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # MPPMU
-     "https://dcache-atlas-webdav.desy.de:2880/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # DESY-Hamburg
-     "https://lcg-se0.ifh.de:2880/pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # DESY-Zeuthen
-     "https ://atlaswebdav-kit.gridka.de:2880/pnfs/gridka.de/atlas/disk-only/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Karlsruhe
-     "https://webdav.bfg.uni-freiburg.de:2880/pnfs/bfg.uni-freiburg.de/data/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Freiburg
-     "https://se-goegrid.gwdg.de:2880/pnfs/gwdg.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Goettingen
+    ("https://lcg-lrz-http.grid.lrz.de:443/pnfs/lrz-muenchen.de/data/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",             # LRZ-LMU
+     "https://grid-dav.rzg.mpg.de:2880/atlas/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                           # MPPMU
+     "https://dcache-atlas-webdav.desy.de:2880/dq2/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                         # DESY-Hamburg
+     "https://lcg-se0.ifh.de:2880/pnfs/ifh.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                                   # DESY-Zeuthen
+     "https ://atlaswebdav-kit.gridka.de:2880/pnfs/gridka.de/atlas/disk-only/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",               # Karlsruhe
+     "https://webdav.bfg.uni-freiburg.de:2880/pnfs/bfg.uni-freiburg.de/data/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                # Freiburg
+     "https://se-goegrid.gwdg.de:2880/pnfs/gwdg.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1",                              # Goettingen
      "https://grid-se.physik.uni-wuppertal.de:2881/pnfs/physik.uni-wuppertal.de/data/atlas/atlasdatadisk/rucio/mc15_13TeV/ed/68/AOD.05536542._000001.pool.root.1", # Wuppertal
     )
   },
 ]
 
+def write_RecoTF(opts):
+  # in case of "Athena"
+  if "Athena" in opts.athena_project:
+    # loop over turl list of RDO input files
+    for item in RECO_TF_TURLS["RDO"]:
+      name = os.path.join("test", "test_directioart_athena_recotf_with_rdo_" + item.keys()[0].lower() + ".sh")
+      print "\tGenerating ...",name
+      outfile = open(name,'w')
+      # generate test scripts
+      outstring = """#!/bin/bash\n
+# art-description: DirectIOART Athena Reco_tf.py inputFile:RDO protocol={protocol}
+# art-type: grid
+# art-output: *.pool.root
+# art-include: 21.0/Athena\n
+set -e\n
+Reco_tf.py --AMI q221 --inputRDOFile {turl} --outputRDO_TRIGFile art.pool.root\n
+echo \"art-result: $? DirectIOART_Athena_RecoTF_inputRDO_protocol_{protocol}\"""".format(turl=item.values()[0], protocol=item.keys()[0])
+      outfile.write(outstring)
+      outfile.close()
+      os.system("chmod +x " + name)
+      # if AthenaMP
+      if opts.mp:
+        name = os.path.join("test", "test_directioart_athenamp_recotf_with_rdo_" + item.keys()[0].lower() + ".sh")
+        print "\tGenerating ...",name
+        outfile = open(name,'w')
+        # generate test scripts
+        outstring = """#!/bin/bash\n
+# art-description: DirectIOART AthenaMP Reco_tf.py inputFile:RDO protocol={protocol}
+# art-type: grid
+# art-output: *.pool.root
+# art-include: 21.0/Athena\n
+set -e\n
+export ATHENA_PROC_NUMBER=2
+Reco_tf.py --AMI q221 --inputRDOFile {turl} --outputRDO_TRIGFile art.pool.root\n
+echo \"art-result: $? DirectIOART_AthenaMP_RecoTF_inputRDO_protocol_{protocol}\"""".format(turl=item.values()[0], protocol=item.keys()[0])
+        outfile.write(outstring)
+        outfile.close()
+        os.system("chmod +x " + name)
+    
+    # loop over turl list if RAW input files
+    # TODO
+  
+  # in case of "AthDerivation"
+  if "AthDerivation" in opts.athena_project:
+    # loop over turl list
+    for i in xrange(len(TFILE_OPEN_TURLs)):
+      # get values of dictionaries
+      for key, value in TFILE_OPEN_TURLs[i].items():
+        name = os.path.join("test", "test_directioart_athderivation_recotf_with_aod_" + key.lower() + ".sh")
+        print "\tGenerating ...",name
+        outfile = open(name,'w')
+        # generate test scripts
+        outstring = """#!/bin/bash\n
+# art-description: DirectIOART AthDerivation Reco_tf.py inputFile:RDO protocol={protocol} reductionConf:TEST1
+# art-type: grid
+# art-output: *.pool.root
+# art-include: 21.2/AthDerivation\n
+set -e\n
+Reco_tf.py --inputAODFile {turl} --outputDAODFile art.pool.root --reductionConf TEST1 --maxEvents 100\n
+echo \"art-result: $? DirectIOART_AthDerivation_RecoTF_inputAOD_protocol_{protocol}_TEST1\"""".format(turl=value[0], protocol=key)
+        outfile.write(outstring)
+        outfile.close()
+        os.system("chmod +x " + name)
+
+def write_AthAnalysis_TestAlg():
+  # loop over turl list
+  for i in xrange(len(TFILE_OPEN_TURLs)):
+    # get values of dictionaries
+    for key, value in TFILE_OPEN_TURLs[i].items():
+      name = os.path.join("test", "test_directioart_athanalysis_alg_" + key.lower() + ".sh")
+      print "\tGenerating ...",name
+      outfile = open(name,'w')
+      # generate tests scripts
+      outstring = """#!/bin/bash\n
+# art-description: DirectIOART AthAnalysis ParticleSelectionAlg protocol={protocol}
+# art-type: grid
+# art-output: *.pool.root
+# art-include: 21.2/AthAnalysis\n
+set -e\n
+athena --filesInput=\"{turl}\" DirectIOART/DirectIOARTAthAnalysisJobOptions.py\n
+echo \"art-result: $? DirectIOART_AthAnalysis_ParticleSelectionAlg_protocol_{protocol}\"""".format(turl=value[0], protocol=key)
+      outfile.write(outstring)
+      outfile.close()
+      os.system("chmod +x " + name)
+
 def writeTFileOpen():
   name = os.path.join("test", "test_directioart_tfileopen.py")
   print "\tGenerating ...",name
@@ -49,7 +148,16 @@ def writeTFileOpen():
   # generate frame of test scripts
   outstring = """#!/usr/bin/env python\n
 # art-description: DirectIOART TFile::Open
-# art-type: grid\n
+# art-type: grid
+# art-include master/Athena
+# art-include 21.0/Athena
+# art-include 21.0/AthSimulation
+# art-include 21.2/AthAnalysis
+# art-include 21.2/AthDerivation
+# art-include 21.2/AnalysisBase
+# art-include 21.2/AnalysisTop
+# art-include 21.3/Athena
+# art-include 21.9/Athena\n
 import ROOT
 import os\n"""
   # loop over turl list
@@ -87,14 +195,15 @@ def parse_options():
   import argparse
   parser = argparse.ArgumentParser()
   
-  parser.add_argument("athena_project", help="Specify the Athena release flavour (Default=AthAnalysis)", type=str, nargs="*" )
+  parser.add_argument("athena_project", help="Specify the Athena release flavour", type=str, nargs="*" )
   parser.add_argument("-o", "--tfile-open", help="Generate ART scripts for TFile::Open tests", action="store_true", dest="open_tests")
+  parser.add_argument("-m", "--mp", help="Generate ART tests for AthenaMP", action="store_true")
   
   options = parser.parse_args()
   return options
 
 def main():
-  #TODO: Extend to AthAnalysis & AthDerivation algorithms
+  #TODO: Extend to AnalysisBase test algorithms
   
   opts = parse_options()
   
@@ -106,9 +215,17 @@ def main():
       print "\tAthena project \"",opts.athena_project[i],"\" not intended for DirectIOART!"
       continue
   
+  if opts.mp and not "Athena" in opts.athena_project:
+    opts.mp = False
+  
   if opts.open_tests:
     writeTFileOpen()
-    
+  
+  if "AthAnalysis" in opts.athena_project:
+    write_AthAnalysis_TestAlg()
+  
+  if "Athena" in opts.athena_project or "AthDerivation" in opts.athena_project:
+    write_RecoTF(opts)
 
 if __name__ == "__main__":
   try:
diff --git a/Tools/DirectIOART/test/test_directioart_tfileopen.py b/Tools/DirectIOART/test/test_directioart_tfileopen.py
index 982d4bc4dfcec167e00bfd49e7e2d684b4deb31f..af0d1abf26999cdc6ad4c34c011f60683ba092eb 100755
--- a/Tools/DirectIOART/test/test_directioart_tfileopen.py
+++ b/Tools/DirectIOART/test/test_directioart_tfileopen.py
@@ -2,6 +2,15 @@
 
 # art-description: DirectIOART TFile::Open
 # art-type: grid
+# art-include master/Athena
+# art-include 21.0/Athena
+# art-include 21.0/AthSimulation
+# art-include 21.2/AthAnalysis
+# art-include 21.2/AthDerivation
+# art-include 21.2/AnalysisBase
+# art-include 21.2/AnalysisTop
+# art-include 21.3/Athena
+# art-include 21.9/Athena
 
 import ROOT
 import os