diff --git a/crab/.gitignore b/crab/.gitignore
index b25c15b81fae06e1c55946ac6270bfdb293870e8..71c6a9ce043f5fcf506c75248517e6d36dc517f4 100644
--- a/crab/.gitignore
+++ b/crab/.gitignore
@@ -1 +1,4 @@
 *~
+jobs_*.txt
+crab_projects/
+samples_desy_*
diff --git a/crab/launch_MEM.md b/crab/launch_MEM.md
deleted file mode 100644
index be07f34483572e709a43055cfe6789ba4b700436..0000000000000000000000000000000000000000
--- a/crab/launch_MEM.md
+++ /dev/null
@@ -1,7 +0,0 @@
-```
-voms-proxy-init --voms cms
-
-source /cvmfs/cms.cern.ch/crab3/crab.sh
-
-for year in 2016 2017 2018; do ./launch_MEM.py -i mem_inputs/${year} -o PNFS_DIR/${year} -t TAG_${year}; done; unset -v year;
-```
diff --git a/crab/samples_desy.cfg b/crab/samples_desy.cfg
deleted file mode 100644
index 48252e54e67de03a8174a243ffe21c247b5971e2..0000000000000000000000000000000000000000
--- a/crab/samples_desy.cfg
+++ /dev/null
@@ -1,138 +0,0 @@
-[general]
-
-workflows_list:
-###############
-  MEM_DL_DESY_2017
-
-[MEM_DL_DESY_2017]
-
-samples_list:
-#############
-  dy1050
-  dy50inf_ht0070to0100
-  dy50inf_ht0100to0200
-  dy50inf_ht0100to0200_ext1
-  dy50inf_ht0200to0400
-  dy50inf_ht0200to0400_ext1
-  dy50inf_ht0400to0600
-  dy50inf_ht0400to0600_ext1
-  dy50inf_ht0600to0800
-  dy50inf_ht0800to1200
-  dy50inf_ht1200to2500
-  dy50inf_ht2500toINFT
-  ee_run2017B
-  ee_run2017C
-  ee_run2017D
-  ee_run2017E
-  ee_run2017F
-  emu_run2017B
-  emu_run2017C
-  emu_run2017D
-  emu_run2017E
-  emu_run2017F
-  mumu_run2017B
-  mumu_run2017C
-  mumu_run2017D
-  mumu_run2017E
-  mumu_run2017F
-  se_run2017B
-  se_run2017C
-  se_run2017D
-  se_run2017E
-  se_run2017F
-  singleantitop_t
-  singleantitop_tw
-  singleantitop_tw_PSweights
-  singletop_s
-  singletop_s_PSweights
-  singletop_t
-  singletop_tw
-  singletop_tw_PSweights
-  smu_run2017B
-  smu_run2017C
-  smu_run2017D
-  smu_run2017E
-  smu_run2017F
-  tHW
-  tHq
-  ttbarH125tobbbar_0
-  ttbarH125tobbbar_1
-  ttbarH125tobbbar_2
-  ttbarH125tobbbar_2L_0
-  ttbarH125tobbbar_2L_1
-  ttbarH125tobbbar_2L_10
-  ttbarH125tobbbar_2L_11
-  ttbarH125tobbbar_2L_12
-  ttbarH125tobbbar_2L_13
-  ttbarH125tobbbar_2L_14
-  ttbarH125tobbbar_2L_2
-  ttbarH125tobbbar_2L_3
-  ttbarH125tobbbar_2L_4
-  ttbarH125tobbbar_2L_5
-  ttbarH125tobbbar_2L_6
-  ttbarH125tobbbar_2L_7
-  ttbarH125tobbbar_2L_8
-  ttbarH125tobbbar_2L_9
-  ttbarH125tobbbar_3
-  ttbarH125tobbbar_4
-  ttbarH125tononbbbar
-  ttbarWjetstolnu
-  ttbarWjetstolnu_PSweights
-  ttbarWjetstoqq
-  ttbarZtollnunu_0
-  ttbarZtollnunu_1
-  ttbarZtollnunu_2
-  ttbarZtollnunu_3
-  ttbarZtollnunu_4
-  ttbarZtoqq
-  ttbarbg_fromDilepton
-  ttbarbg_fromDilepton_PSweights_0
-  ttbarbg_fromDilepton_PSweights_1
-  ttbarbg_fromDilepton_matchdown
-  ttbarbg_fromDilepton_matchup
-  ttbarbg_fromDilepton_uetunedown
-  ttbarbg_fromDilepton_uetuneup
-  ttbarbg_fromHadronic
-  ttbarbg_fromHadronic_PSweights
-  ttbarbg_fromHadronic_matchdown
-  ttbarbg_fromHadronic_matchup
-  ttbarbg_fromHadronic_uetunedown
-  ttbarbg_fromHadronic_uetuneup
-  ttbarbg_fromLjets
-  ttbarbg_fromLjets_PSweights_0
-  ttbarbg_fromLjets_PSweights_1
-  ttbarbg_fromLjets_PSweights_2
-  ttbarbg_fromLjets_PSweights_3
-  ttbarbg_fromLjets_PSweights_4
-  ttbarbg_fromLjets_matchdown
-  ttbarbg_fromLjets_matchup
-  ttbarbg_fromLjets_uetunedown
-  ttbarbg_fromLjets_uetuneup
-  ttbarsignalplustau_fromDilepton_0
-  ttbarsignalplustau_fromDilepton_1
-  ttbarsignalplustau_fromDilepton_PSweights_0
-  ttbarsignalplustau_fromDilepton_PSweights_1
-  ttbarsignalplustau_fromDilepton_PSweights_2
-  ttbarsignalplustau_fromDilepton_PSweights_3
-  ttbarsignalplustau_fromDilepton_PSweights_4
-  ttbarsignalplustau_fromDilepton_PSweights_5
-  ttbarsignalplustau_fromDilepton_PSweights_6
-  ttbarsignalplustau_fromDilepton_PSweights_7
-  ttbarsignalplustau_fromDilepton_PSweights_8
-  ttbarsignalplustau_fromDilepton_PSweights_9
-  ttbarsignalplustau_fromDilepton_matchdown
-  ttbarsignalplustau_fromDilepton_matchup
-  ttbarsignalplustau_fromDilepton_uetunedown
-  ttbarsignalplustau_fromDilepton_uetuneup
-  ttgjets
-  ttgjets_ext1
-  wtolnu
-  wtolnu_ext1
-  wwtoall
-  wztoall
-  zztoall
-
-input_location:  dcache-cms-xrootd.desy.de__INPUTS__
-output_location: dcache-cms-xrootd.desy.de__OUTPUTS__
-classifier_db_location:
-additional_classifier_db_location:
diff --git a/crab/launch_MEM.py b/crab/utils/submit_mem.py
similarity index 97%
rename from crab/launch_MEM.py
rename to crab/utils/submit_mem.py
index 353d37c1c5c604dad11d9de2dc2ed398a8d2fa1d..027880a649deb06afc9cae884de7c38c324c0c61 100755
--- a/crab/launch_MEM.py
+++ b/crab/utils/submit_mem.py
@@ -121,7 +121,7 @@ if __name__ == '__main__':
 
    input_samples = []
    for i_inproot in sorted(glob.glob(opts.input+'/*.root')):
-       input_samples += [os.path.splitext(os.path.basename(input_samples))[0]]
+       input_samples += [os.path.splitext(os.path.basename(i_inproot))[0]]
    input_samples = sorted(list(set(input_samples)))
 
    if len(input_samples) == 0:
@@ -154,8 +154,8 @@ if __name__ == '__main__':
    # crab task inputs
    cmd_splitSample = 'python -B splitSample.py'
    cmd_splitSample += ' -n 10'
-   cmd_splitSample += ' --samples-cfg '+cfg_file
-   cmd_splitSample += ' --samples-dir '+cfg_file_woExt
+   cmd_splitSample += ' --samples-cfg '+cfg_file_name
+   cmd_splitSample += ' --samples-dir '+cfg_file_name_woExt
    cmd_splitSample += ' --era '+opts.era
 
    EXE(cmd_splitSample, verbose=opts.verbose, dry_run=opts.dry_run)
diff --git a/crab/utils/submit_mem_driver.sh b/crab/utils/submit_mem_driver.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6a271d00175d902c01996c26b0f24f51bb98aba6
--- /dev/null
+++ b/crab/utils/submit_mem_driver.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+voms-proxy-init --voms cms
+
+source /cvmfs/cms.cern.ch/crab3/crab.sh
+
+MEM_INPUTS=
+PNFS_DIR=
+PROD_TAG=
+
+for year in 2016 2017 2018; do
+
+  ./utils/submit_mem.py -i ${MEM_INPUTS}/${year} -s ${PNFS_DIR}/${PROD_TAG}_${year} -t ${PROD_TAG}_${year} -e ${year} # --no-submit
+
+done
+unset -v year
+
+unset -v MEM_INPUTS PNFS_DIR PROD_TAG