 }
 
 void process_message() {
-  String msg = deq_message();
-  int e_index;
+  String msg = deq_message(); // example "msg:graph_init"
+  String e_type = msg.substring(0, 3);
+  String e_part2 = msg.substring(4);
+  char e2[12];
+  int e_index = -1;
   int n0_index, n1_index;
+  #ifdef DUBUG_BUILD
+  debug("pm");
+  debug(e_type);
+  debug(e_part2);
+  #endif
   if (msg[0] == '\0')  {
     #ifdef DUBUG_BUILD
-    debug("no edge 1");
+    debug("no msg in pm");
     #endif
     set_run_state(0);
     return;
   }
-  e_index = get_edge("msg", msg, -1);
+  if (e_type == "msg") {
+    e_part2.toCharArray(e2, 11);
+    e_index = get_edge("msg", e2, -1);
+  }
+  if (e_type == "flo") {
+    e_part2.toCharArray(e2, 11);
+    n0_index = atoi(e2);
+    e_index = get_edge("flo", "from", n0_index);
+  }
   if (e_index < 0) {
-    e_index = get_edge("flo", msg, -1);
-  }
-  if (e_index < 0) {
-    #ifdef DUBUG_BUILD
-    debug("no edge 2");
+    #ifdef DUBUG_BUILD
+    debug("no edge in pm");
     #endif
     set_run_state(0);
     return;
   }
   else {
     #ifdef DUBUG_BUILD
-    debug("test of process edge (type) ");
+    debug("pm processing edge (type) ");
     debug(edges[e_index].type);
     #endif
-    n0_index = get_node("id", edges[e_index].from);
+    //n0_index = get_node("id", edges[e_index].from);
     n1_index = get_node("id", edges[e_index].to);
     run_node(n1_index);
   }

  if (graph_loaded) {
    run_state = new_state;
  }
  // next line... just for fun (remove later ;)
  //digitalWrite(led, (int)run_state);
  if (!previous_state && run_state) { // rising edge
    enq_message("graph_init");

    #ifdef DUBUG_BUILD
    debug("sent msg graph_init");

  for (i = 0; i < 10; i++) {
    t = edges[i].type;
    n = edges[i].name;
    if (t == e_type) {
      if ((n == msg || (msg == "*" && edges[i].from == from)) ||
          (msg == "from" && edges[i].from == from)) {
        return i;
      }
    }
  }
  return -1; 
