initial forking implementation