diff --git a/jenkins/branch/autest.pipeline b/jenkins/branch/autest.pipeline
index 00d73a4..cbc12d3 100644
--- a/jenkins/branch/autest.pipeline
+++ b/jenkins/branch/autest.pipeline
@@ -7,6 +7,7 @@
 			label 'branch'
 		}
 	}
+
 	environment {
 		CCACHE_DIR = "/tmp/ccache"
 	}
@@ -15,10 +16,27 @@
 		stage('Initialization') {
 			steps {
 				script {
-					currentBuild.displayName = "#${BUILD_NUMBER} ${GITHUB_BRANCH}"
 					if (env.SHA1) {
 						currentBuild.description = env.SHA1
 					}
+					if (env.AUTEST_SHARD) {
+						String[] arr = env.AUTEST_SHARD.split('of')
+						if (2 == arr.length) {
+							shard = arr[0] as int
+							shardcnt = arr[1] as int
+							if (shard < shardcnt) {
+								env.SHARD = shard
+								env.SHARDCNT = shardcnt
+								currentBuild.displayName = "#${BUILD_NUMBER} ${GITHUB_BRANCH} ${AUTEST_SHARD}"
+							}
+						}
+					}
+
+					if (!env.SHARD || ! env.SHARDCNT) {
+						currentBuild.displayName = "#${BUILD_NUMBER} ${GITHUB_BRANCH}"
+						env.SHARD = 0
+						env.SHARDCNT = 0
+					}
 				}
 			}
 		}
@@ -79,14 +97,35 @@
 			steps {
 				echo 'Starting AuTest'
 				dir('src/tests') {
-					sh '''
-						set +e
+
+					sh '''#!/bin/bash -x
+						#set +e
 						# We want to pick up the OpenSSL-QUIC version of curl in /opt/bin.
 						# The HTTP/3 AuTests depend upon this, so update the PATH accordingly.
 						export PATH=/opt/bin:${PATH}
 
 						mkdir -p ${WORKSPACE}/output/${GITHUB_BRANCH}
-						./autest.sh --ats-bin /tmp/ats/bin/ --sandbox /tmp/sandbox || true
+
+						if [ ${SHARDCNT} -le 0 ]; then
+							./autest.sh --ats-bin /tmp/ats/bin/ --sandbox /tmp/sandbox || true
+						else
+							testsall=( $( find . -iname "*.test.py" | awk -F'/' '{print $NF}' | awk -F'.' '{print $1}' ) )
+
+							testsall=( $(
+								for el in  "${testsall[@]}" ; do
+									echo $el
+								done | sort) )
+							ntests=${#testsall[@]}
+
+							shardsize=$((${ntests} / ${SHARDCNT}))
+							[ 0 -ne $((${ntests} % ${shardsize})) ] && shardsize=$((${shardsize} + 1))
+							shardbeg=$((${shardsize} * ${SHARD}))
+							sliced=${testsall[@]:${shardbeg}:${shardsize}}
+							./autest.sh --ats-bin /tmp/ats/bin/ --sandbox /tmp/sandbox -f ${sliced[@]} || true
+
+							exit
+						fi
+
 						if [ -n "$(ls -A /tmp/sandbox/)" ]; then
 							cp -rf /tmp/sandbox/ ${WORKSPACE}/output/${GITHUB_BRANCH}/
 							sudo chmod -R 777 ${WORKSPACE}
diff --git a/jenkins/branch/branch_build.pipeline b/jenkins/branch/branch_build.pipeline
index 1f816f1..62cd3b2 100644
--- a/jenkins/branch/branch_build.pipeline
+++ b/jenkins/branch/branch_build.pipeline
@@ -8,7 +8,7 @@
 	Jenkins.instance.getAllItems(Job.class).each {
 		if (it.class == org.jenkinsci.plugins.workflow.job.WorkflowJob && it.isBuildable()) {
 			def jobname = it.fullName
-			if (0 == jobname.indexOf(env.GITHUB_BRANCH + '/os-')) {
+			if (0 == jobname.indexOf(env.JOB_DIR + '/os-')) {
 				jobnames.add(jobname)
 			}
 		}
@@ -41,6 +41,7 @@
 		parameters: [
 			string(name: 'GITHUB_URL', value: GITHUB_URL),
 			string(name: 'GITHUB_BRANCH', value: GITHUB_BRANCH),
+			string(name: 'JOB_DIR', value: JOB_DIR),
 			string(name: 'SHA1', value: SHA1),
 		]
 	)
@@ -50,6 +51,24 @@
 	return result
 }
 
+String autestJob(String ghcontext, String jobName, String shard) {
+	echo "Autest Build of: " + jobName + " " + shard
+	if (DUMMY) { jobName = "Branch_Builds/dummy" }
+	def jobBuild = build(job: jobName, propagate: false,
+		parameters: [
+			string(name: 'GITHUB_URL', value: GITHUB_URL),
+			string(name: 'GITHUB_BRANCH', value: GITHUB_BRANCH),
+			string(name: 'JOB_DIR', value: JOB_DIR),
+			string(name: 'SHA1', value: SHA1),
+			string(name: 'AUTEST_SHARD', value: shard),
+		]
+	)
+	def result = jobBuild.getResult()
+	echo "Build of " + jobName + " returned result: " + result
+	if ('FAILURE' == result) { error("${jobName} failed") }
+	return result
+}
+
 def shaForBranch(url, branch) {
 	sha1 = sh (
 		script: "set -- `git ls-remote -h $url refs/heads/$branch`; echo \${1}",
@@ -66,6 +85,15 @@
 			agent { label 'master' }
 			steps {
 				script {
+					if (! env.AUTEST_SHARDS) {
+						env.AUTEST_SHARDS = 4
+					}
+					if (! env.JOB_DIR) {
+						def bparts = env.JOB_NAME.split('/')
+						bparts = bparts - bparts.last()
+						env.JOB_DIR = bparts.join('/')
+					}
+
 					if (! env.GITHUB_BRANCH) {
 						def bparts = env.JOB_NAME.split('/')
 						if (2 != bparts.length) {
@@ -81,6 +109,7 @@
 					currentBuild.description = env.SHA1
 
 					sh 'printenv'
+
 				}
 			}
 		}
@@ -90,28 +119,28 @@
 				stage('In Tree') {
 					steps {
 						script {
-							buildJob('in_tree', env.GITHUB_BRANCH + '/in_tree')
+							buildJob('in_tree', env.JOB_DIR + '/in_tree')
 						}
 					}
 				}
 				stage('Out Of Tree') {
 					steps {
 						script {
-							buildJob('out_of_tree', env.GITHUB_BRANCH + '/out_of_tree')
+							buildJob('out_of_tree', env.JOB_DIR + '/out_of_tree')
 						}
 					}
 				}
 				stage('RAT') {
 					steps {
 						script {
-							buildJob('rat', env.GITHUB_BRANCH + '/rat')
+							buildJob('rat', env.JOB_DIR + '/rat')
 						}
 					}
 				}
 				stage('clang format') {
 					steps {
 						script {
-							buildJob('clang_format', env.GITHUB_BRANCH + '/clang_format')
+							buildJob('clang_format', env.JOB_DIR + '/clang_format')
 						}
 					}
 				}
@@ -121,7 +150,7 @@
 		stage('Snapshot') {
 			steps {
 				script {
-					//buildJob('snapshot', env.GITHUB_BRANCH + '/snapshot')
+					//buildJob('snapshot', env.JOB_DIR + '/snapshot')
 					echo "Skipping snapshot"
 				}
 			}
@@ -142,35 +171,46 @@
 				stage('clang analyzer') {
 					steps {
 						script {
-							buildJob('clang-analyzer', env.GITHUB_BRANCH + '/clang_analyzer')
+							buildJob('clang-analyzer', env.JOB_DIR + '/clang_analyzer')
 						}
 					}
 				}
 				stage('autests') {
 					steps {
 						script {
-							buildJob('autest', env.GITHUB_BRANCH + '/autest')
+							if (env.AUTEST_SHARDS) {
+								def nshards = env.AUTEST_SHARDS as int
+								def jobs = [:]
+								for (ind = 0 ; ind < nshards ; ind++) {
+									index = ind
+									String shard = index + "of" + env.AUTEST_SHARDS
+									jobs[shard] = { autestJob('autest', env.JOB_DIR + '/autest', shard) }
+								}
+								parallel jobs
+							} else {
+								buildJob('autest', env.JOB_DIR + '/autest')
+							}
 						}
 					}
 				}
 				stage('docs') {
 					steps {
 						script {
-							buildJob('docs', env.GITHUB_BRANCH + '/docs')
+							buildJob('docs', env.JOB_DIR + '/docs')
 						}
 					}
 				}
 				stage('cache_tests') {
 					steps {
 						script {
-							buildJob('cache-tests', env.GITHUB_BRANCH + '/cache-tests')
+							buildJob('cache-tests', env.JOB_DIR + '/cache-tests')
 						}
 					}
 				}
 				stage('coverage') {
 					steps {
 						script {
-							buildJob('coverage', env.GITHUB_BRANCH + '/coverage')
+							buildJob('coverage', env.JOB_DIR + '/coverage')
 						}
 					}
 				}
diff --git a/jenkins/branch/distro_builds.pipeline b/jenkins/branch/distro_builds.pipeline
index 350b9f6..21067df 100644
--- a/jenkins/branch/distro_builds.pipeline
+++ b/jenkins/branch/distro_builds.pipeline
@@ -12,7 +12,7 @@
 		}
 	}
 
-	String jjob = env.GITHUB_BRANCH + '/os_build'
+	String jjob = env.JOB_DIR + '/os_build'
 
 	def builders = [:]
 
@@ -68,6 +68,12 @@
 			agent { label 'master' }
 			steps {
 				script {
+					if (! env.JOB_DIR) {
+						def bparts = env.JOB_NAME.split('/')
+						bparts.pop()
+						env.JOB_DIR = bparts.join('/')
+					}
+
 					if (! env.DISTRO) {
 						def dparts = env.JOB_BASE_NAME.split("_|-")
 						if (3 != dparts.length) {
@@ -75,6 +81,7 @@
 						}
 						env.DISTRO = [ dparts[1], dparts[2] ].join(':')
 					}
+
 					if (! env.GITHUB_BRANCH) {
 						def bparts = env.JOB_NAME.split('/')
 						if (2 != bparts.length) {
