diff --git a/ompi/communicator/comm_init.c b/ompi/communicator/comm_init.c
index bdd3499a801f208440396302407bc447bedd8584..3766fb2380dc264a5d5ae78a133701809971d1bd 100644
--- a/ompi/communicator/comm_init.c
+++ b/ompi/communicator/comm_init.c
@@ -33,6 +33,10 @@
 #include "ompi_config.h"
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <unistd.h>
 
 #include "opal/util/bit_ops.h"
 #include "opal/util/info_subscriber.h"
@@ -49,6 +53,10 @@
 #include "ompi/dpm/dpm.h"
 #include "ompi/memchecker.h"
 
+#define SOCKET_PATH "/home/beach/Dokumente/Uni/Informatik_BA/Bachelorarbeit_MPI/sockets_mpi_test/socket"
+#define FD_STDIN 0
+#define BUFFLEN 64
+
 /*
 ** Table for Fortran <-> C communicator handle conversion
 ** Also used by P2P code to lookup communicator based
@@ -82,6 +90,46 @@ OBJ_CLASS_INSTANCE(ompi_communicator_t, opal_infosubscriber_t,
    shortcut for finalize and abort. */
 int ompi_comm_num_dyncomm=0;
 
+static void errorExit(char* msg) {
+    perror(msg);
+    exit(1);
+}
+
+// TODO: Change int return to size_t!
+static int getProcessAgentRank(uint32_t jobid, size_t size) {
+    struct sockaddr_un strAddr;
+    socklen_t lenAddr;
+    int fdSock;
+        
+    if ((fdSock=socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
+        errorExit("socket");
+    }
+
+    strAddr.sun_family=AF_LOCAL;     /* Unix domain */
+    strcpy(strAddr.sun_path, SOCKET_PATH);
+    lenAddr=sizeof(strAddr.sun_family)+strlen(strAddr.sun_path);
+    if (connect(fdSock, (struct sockaddr*)&strAddr, lenAddr) !=0 ) {
+        errorExit("connect");
+    }
+
+    pid_t pid = getpid();
+
+    char info_to_send[BUFFLEN];
+    snprintf(info_to_send, BUFFLEN+1, "Spawned - PID: %d, jobID: %u, size: %zu", pid, jobid, size);
+    if (send(fdSock, info_to_send, BUFFLEN+1, 0) < 0) {
+        errorExit("send");
+    }
+
+    char rank_to_recv[BUFFLEN];
+    recv(fdSock, rank_to_recv, BUFFLEN+1, 0);
+    int received_rank = (int)strtol(rank_to_recv, NULL, 0);
+    printf("Received from server: %d\n", received_rank);
+
+    close(fdSock);
+
+    return received_rank;
+}
+
 /*
  * Initialize comm world/self/null/parent.
  */
@@ -115,8 +163,12 @@ int ompi_comm_init(void)
 
     for (size_t i = 0 ; i < size ; ++i) {
         opal_process_name_t name = {.vpid = i, .jobid = OMPI_PROC_MY_NAME->jobid};
+        /* get desired rank from agent (must be within size!)*/
+        // TODO: Change int to size_t
+        size_t desired_rank = getProcessAgentRank(name.jobid, size);
+        printf("INIT Loop Rank: %zu\n", desired_rank);
         /* look for existing ompi_proc_t that matches this name */
-        group->grp_proc_pointers[i] = (ompi_proc_t *) ompi_proc_lookup (name);
+        group->grp_proc_pointers[desired_rank] = (ompi_proc_t *) ompi_proc_lookup (name);
         if (NULL == group->grp_proc_pointers[i]) {
             /* set sentinel value */
             group->grp_proc_pointers[i] = (ompi_proc_t *) ompi_proc_name_to_sentinel (name);