Self replicating machines