remove_parent(current);
                remove_parent(leader);
 
-               switch_exec_pids(leader, current);
+
+               /* Become a process group leader with the old leader's pid.
+                * Note: The old leader also uses thispid until release_task
+                *       is called.  Odd but simple and correct.
+                */
+               detach_pid(current, PIDTYPE_PID);
+               current->pid = leader->pid;
+               attach_pid(current, PIDTYPE_PID,  current->pid);
+               attach_pid(current, PIDTYPE_PGID, current->signal->pgrp);
+               attach_pid(current, PIDTYPE_SID,  current->signal->session);
+               list_add_tail(¤t->tasks, &init_task.tasks);
 
                current->parent = current->real_parent = leader->real_parent;
                leader->parent = leader->real_parent = child_reaper;
                        __ptrace_link(current, parent);
                }
 
-               list_del(¤t->tasks);
-               list_add_tail(¤t->tasks, &init_task.tasks);
                current->exit_signal = SIGCHLD;
 
                BUG_ON(leader->exit_state != EXIT_ZOMBIE);
 
 
 extern int alloc_pidmap(void);
 extern void FASTCALL(free_pidmap(int));
-extern void switch_exec_pids(struct task_struct *leader, struct task_struct *thread);
 
 #define do_each_task_pid(who, type, task)                              \
        if ((task = find_task_by_pid_type(type, who))) {                \
 
 
 EXPORT_SYMBOL(find_task_by_pid_type);
 
-/*
- * This function switches the PIDs if a non-leader thread calls
- * sys_execve() - this must be done without releasing the PID.
- * (which a detach_pid() would eventually do.)
- */
-void switch_exec_pids(task_t *leader, task_t *thread)
-{
-       __detach_pid(leader, PIDTYPE_PID);
-       __detach_pid(leader, PIDTYPE_TGID);
-       __detach_pid(leader, PIDTYPE_PGID);
-       __detach_pid(leader, PIDTYPE_SID);
-
-       __detach_pid(thread, PIDTYPE_PID);
-       __detach_pid(thread, PIDTYPE_TGID);
-
-       leader->pid = leader->tgid = thread->pid;
-       thread->pid = thread->tgid;
-
-       attach_pid(thread, PIDTYPE_PID, thread->pid);
-       attach_pid(thread, PIDTYPE_TGID, thread->tgid);
-       attach_pid(thread, PIDTYPE_PGID, thread->signal->pgrp);
-       attach_pid(thread, PIDTYPE_SID, thread->signal->session);
-       list_add_tail(&thread->tasks, &init_task.tasks);
-
-       attach_pid(leader, PIDTYPE_PID, leader->pid);
-       attach_pid(leader, PIDTYPE_TGID, leader->tgid);
-       attach_pid(leader, PIDTYPE_PGID, leader->signal->pgrp);
-       attach_pid(leader, PIDTYPE_SID, leader->signal->session);
-}
-
 /*
  * The pid hash table is scaled according to the amount of memory in the
  * machine.  From a minimum of 16 slots up to 4096 slots at one gigabyte or