diff --git a/tests/SConscript b/tests/SConscript
index 41731c2..94b432c 100644
--- a/tests/SConscript
+++ b/tests/SConscript
@@ -30,9 +30,6 @@
 
 # vars is imported from arm_compute:
 variables = [
-    #FIXME: Remove before release!
-    BoolVariable("benchmark_examples", "Build benchmark examples programs", True),
-    BoolVariable("validate_examples", "Build benchmark examples programs", True),
     #FIXME Switch the following two options to False before releasing
     BoolVariable("validation_tests", "Build validation test programs", True),
     BoolVariable("benchmark_tests", "Build benchmark test programs", True),
@@ -78,16 +75,10 @@
 if env['internal_only']:
     test_env.Append(CPPDEFINES=['INTERNAL_ONLY'])
 
-test_env.Append(CPPPATH = ["#3rdparty/include"])
-test_env.Append(LIBPATH = ["#3rdparty/%s/%s" % (env['os'], env['arch'])])
-
 common_files = Glob('*.cpp')
 common_objects = [test_env.StaticObject(f) for f in common_files]
 
 files_benchmark = Glob('benchmark/*.cpp')
-#FIXME Delete before release
-if env['internal_only']:
-    files_benchmark += Glob('../3rdparty/tests/benchmark/*.cpp')
 
 # Add unit tests
 files_validation = Glob('validation/UNIT/*/*.cpp')
@@ -104,9 +95,6 @@
 
     files_benchmark += Glob('benchmark/CL/*/' + filter_pattern)
     files_benchmark += Glob('benchmark/CL/' + filter_pattern)
-    #FIXME Delete before release
-    if env['internal_only']:
-        files_benchmark += Glob('../3rdparty/tests/benchmark/CL/' + filter_pattern)
 
     files_validation += Glob('validation/CL/*/' + filter_pattern)
     files_validation += Glob('validation/CL/' + filter_pattern)
@@ -115,9 +103,6 @@
     filter_pattern = test_env['test_filter']
     files_benchmark += Glob('benchmark/NEON/*/' + filter_pattern)
     files_benchmark += Glob('benchmark/NEON/' + filter_pattern)
-    #FIXME Delete before release
-    if env['internal_only']:
-        files_benchmark += Glob('../3rdparty/tests/benchmark/NEON/' + filter_pattern)
 
     files_validation += Glob('validation/NEON/*/' + filter_pattern)
     files_validation += Glob('validation/NEON/' + filter_pattern)
@@ -156,76 +141,4 @@
     Depends(arm_compute_validation, arm_compute_lib)
 
     Default(arm_compute_validation)
-    Export('arm_compute_validation')
-
-    #FIXME: Remove before release!
-    if test_env['validate_examples']:
-        files_validate_examples = [ test_env.Object('validate_examples/RunExample.cpp') ] + [ x for x in common_objects if not "main.o" in str(x)]
-        arm_compute_validate_examples = []
-        if test_env['neon']:
-            for file in Glob("validate_examples/neon_*.cpp"):
-                example = "validate_" + os.path.basename(os.path.splitext(str(file))[0])
-                arm_compute_validate_examples += [ test_env.Program(example, [ test_env.Object(source=file, target=example) ] + files_validate_examples, LIBS = [ arm_compute_validation_framework]) ]
-        if test_env['opencl']:
-            cl_examples = []
-            files = Glob("validate_examples/cl_*.cpp")
-            if test_env['neon']:
-                files += Glob("validate_examples/neoncl_*.cpp")
-            for file in files:
-                example = "validate_" + os.path.basename(os.path.splitext(str(file))[0])
-                cl_examples += [ test_env.Program(example, [ test_env.Object(source=file, target=example) ] + files_validate_examples, LIBS = test_env["LIBS"] + [ arm_compute_validation_framework ]) ]
-            arm_compute_validate_examples += cl_examples
-            if test_env['opencl'] and test_env['neon']:
-                graph_utils = test_env.Object(source="../utils/GraphUtils.cpp", target="GraphUtils")
-                for file in Glob("validate_examples/graph_*.cpp"):
-                    example = "validate_" + os.path.basename(os.path.splitext(str(file))[0])
-                    if env['os'] in ['android', 'bare_metal'] or env['standalone']:
-                        prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils]+ files_validate_examples, LIBS = test_env["LIBS"] + [ arm_compute_validation_framework ], LINKFLAGS=test_env["LINKFLAGS"]+['-Wl,--whole-archive',arm_compute_lib,'-Wl,--no-whole-archive'])
-                        arm_compute_validate_examples += [ prog ]
-                    else:
-                        #-Wl,--allow-shlib-undefined: Ignore dependencies of dependencies
-                        prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils]+ files_validate_examples, LIBS = test_env["LIBS"] + ["arm_compute_graph", arm_compute_validation_framework], LINKFLAGS=test_env["LINKFLAGS"]+['-Wl,--allow-shlib-undefined'] )
-                        arm_compute_validate_examples += [ prog ]
-        arm_compute_validate_examples = install_bin(arm_compute_validate_examples)
-        Depends(arm_compute_validate_examples, arm_compute_validation_framework)
-        Depends(arm_compute_validate_examples, arm_compute_test_framework)
-        Depends(arm_compute_validate_examples, arm_compute_lib)
-        Default(arm_compute_validate_examples)
-        Export('arm_compute_validate_examples')
-
-#FIXME: Remove before release!
-if test_env['benchmark_examples']:
-    files_benchmark_examples = test_env.Object('benchmark_examples/RunExample.cpp')
-    graph_utils = test_env.Object(source="../utils/GraphUtils.cpp", target="GraphUtils")
-    graph_params = test_env.Object(source="../utils/CommonGraphOptions.cpp", target="CommonGraphOptions")
-    arm_compute_benchmark_examples = []
-    for examples_folder in [ "../examples", "../3rdparty/examples"]:
-        if test_env['neon']:
-            for file in Glob("%s/neon_*.cpp" % examples_folder):
-                example = "benchmark_" + os.path.basename(os.path.splitext(str(file))[0])
-                arm_compute_benchmark_examples += [ test_env.Program(example, [ test_env.Object(source=file, target=example) ] + files_benchmark_examples) ]
-        if test_env['opencl']:
-            cl_examples = []
-            files = Glob("%s/cl_*.cpp" % examples_folder)
-            if test_env['neon']:
-                files += Glob("%s/neoncl_*.cpp" % examples_folder)
-            for file in files:
-                example = "benchmark_" + os.path.basename(os.path.splitext(str(file))[0])
-                cl_examples += [ test_env.Program(example, [ test_env.Object(source=file, target=example) ] + files_benchmark_examples, LIBS = test_env["LIBS"]) ]
-            arm_compute_benchmark_examples += cl_examples
-
-        # Graph examples
-        for file in Glob("%s/graph_*.cpp" % examples_folder ):
-            example = "benchmark_" + os.path.basename(os.path.splitext(str(file))[0])
-            if env['os'] in ['android', 'bare_metal'] or env['standalone']:
-                prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils, graph_params]+ files_benchmark_examples, LIBS = test_env["LIBS"], LINKFLAGS=test_env["LINKFLAGS"]+['-Wl,--whole-archive',arm_compute_lib,'-Wl,--no-whole-archive'])
-                arm_compute_benchmark_examples += [ prog ]
-            else:
-                #-Wl,--allow-shlib-undefined: Ignore dependencies of dependencies
-                prog = test_env.Program(example, [ test_env.Object(source=file, target=example), graph_utils, graph_params]+ files_benchmark_examples, LIBS = test_env["LIBS"] + ["arm_compute_graph"], LINKFLAGS=test_env["LINKFLAGS"]+['-Wl,--allow-shlib-undefined'] )
-                arm_compute_benchmark_examples += [ prog ]
-    arm_compute_benchmark_examples = install_bin(arm_compute_benchmark_examples)
-    Depends(arm_compute_benchmark_examples, arm_compute_test_framework)
-    Depends(arm_compute_benchmark_examples, arm_compute_lib)
-    Default(arm_compute_benchmark_examples)
-    Export('arm_compute_benchmark_examples')
+    Export('arm_compute_validation')
\ No newline at end of file
