diff --git a/examples/pa_doublepass_graph.rs b/examples/pa_doublepass_graph.rs
index e8fe55421cdfb27b6617f03fa9267d3e2d0c159e..b6bf1e32e164467e0a8028cb9a9e4449419bb8cc 100644
--- a/examples/pa_doublepass_graph.rs
+++ b/examples/pa_doublepass_graph.rs
@@ -8,7 +8,7 @@ use std::io::Write;
 fn main() {
     let mut scenery = OpticScenery::new();
     scenery.set_description("PreAmp Doublepass section".into());
-    let n0 = scenery.add_element("LightSource", NodeSource);
+    let n0 = scenery.add_element("LightSource", NodeSource::default());
     let n1 = scenery.add_element("TFP", NodeDummy);
     let n2 = scenery.add_element("19mm amp", NodeDummy);
     let n3 = scenery.add_element("Faraday", NodeDummy);
@@ -38,7 +38,7 @@ fn main() {
     let g_n1 = group.add_node(OpticNode::new("Beamsplitter", NodeDummy));
     let g_n2 = group.add_node(OpticNode::new("Lens", NodeDummy));
     let g_n3 = group.add_node(OpticNode::new("Lens2", NodeDummy));
-    let g_n4  = group.add_node(OpticNode::new("Det", NodeDetector));
+    let g_n4  = group.add_node(OpticNode::new("Det", NodeDetector::default()));
 
     group.connect_nodes(g_n1, "rear", g_n2, "front").unwrap();
     group.connect_nodes(g_n2, "rear", g_n3, "front").unwrap();
diff --git a/examples/source_detector_test.rs b/examples/source_detector_test.rs
new file mode 100644
index 0000000000000000000000000000000000000000..2e2c6e9f4c6379843ecd78856f80c81439dad003
--- /dev/null
+++ b/examples/source_detector_test.rs
@@ -0,0 +1,26 @@
+use std::fs::File;
+use std::io::Write;
+
+use opossum::{
+    lightdata::{LightData, LightDataEnergy},
+    nodes::{NodeDetector, NodeSource},
+    optic_scenery::OpticScenery,
+};
+
+fn main() {
+    let mut scenery = OpticScenery::new();
+    scenery.set_description("src - detector demo".into());
+
+    let i_s = scenery.add_element(
+        "Source",
+        NodeSource::new(LightData::Energy(LightDataEnergy { energy: 1.0 })),
+    );
+    let i_d = scenery.add_element("Detector", NodeDetector::default());
+
+    scenery.connect_nodes(i_s, "out1", i_d, "in1").unwrap();
+
+    let path = "src_detector.dot";
+    let mut output = File::create(path).unwrap();
+    write!(output, "{}", scenery.to_dot()).unwrap();
+    println!("{:?}", scenery.node_ref(i_s).unwrap());
+}
diff --git a/examples/uopa_graph.rs b/examples/uopa_graph.rs
index 4712d48c5f467277b82701b3fc23d929c91a6541..f1f7c4b5ce239f35ed25cf1814d655e46d9cf95d 100644
--- a/examples/uopa_graph.rs
+++ b/examples/uopa_graph.rs
@@ -43,9 +43,9 @@ fn main() {
     );
     scenery.connect_nodes(pump_compressor_node, "rear", pump_shg_node, "front");
     scenery.connect_nodes(pump_shg_node, "rear", pump_splitter_node, "front");
-    scenery.connect_nodes(pump_splitter_node, "transmitted", uOPA_1_node, "front").unwrap();
+    scenery.connect_nodes(pump_splitter_node, "out1_trans1_refl2", uOPA_1_node, "front").unwrap();
     scenery.connect_nodes(uOPA_1_node, "rear", uOPA_2_node, "front");
-    scenery.connect_nodes(pump_splitter_node, "reflected", uOPA_2_node, "front").unwrap();
+    scenery.connect_nodes(pump_splitter_node, "out2_trans2_refl1", uOPA_2_node, "front").unwrap();
 
     let mut scenery_2 = OpticScenery::new();
     scenery_2.set_description("PHELIX uOPA Pump Pre-Amplifier".into());
diff --git a/src/lightdata.rs b/src/lightdata.rs
index e7cb72e2b725579ea06d300f92b5169ce6864279..001378639d200f7abf1654edc24b297368e75a0a 100644
--- a/src/lightdata.rs
+++ b/src/lightdata.rs
@@ -7,7 +7,7 @@ pub enum LightData {
 
 #[derive(Debug, PartialEq, Clone)]
 pub struct LightDataEnergy {
-    energy: f32,
+    pub energy: f32,
 }
 
 #[derive(Debug, PartialEq, Clone)]
diff --git a/src/nodes/node_beam_splitter.rs b/src/nodes/node_beam_splitter.rs
index b0a5b6f3253064e0c5488673d61ca0becf9b2dfe..206b2f4a1a8d4a49523795ff498751db02dc874d 100644
--- a/src/nodes/node_beam_splitter.rs
+++ b/src/nodes/node_beam_splitter.rs
@@ -1,5 +1,6 @@
 use crate::{optic_node::{Optical, Dottable}, optic_ports::OpticPorts};
 
+#[derive(Debug)]
 pub struct NodeBeamSplitter;
 
 impl Optical for NodeBeamSplitter {
diff --git a/src/nodes/node_detector.rs b/src/nodes/node_detector.rs
index 81f1aacadbcd585f1bdc37a8b3a6c8ec1fb63e01..e0183483d749e6f8b706ff37b97879f7dcf916a3 100644
--- a/src/nodes/node_detector.rs
+++ b/src/nodes/node_detector.rs
@@ -1,6 +1,12 @@
+use std::fmt::Display;
+
 use crate::{optic_node::{Optical, Dottable}, optic_ports::OpticPorts};
+use crate::lightdata::LightData;
 
-pub struct NodeDetector;
+#[derive(Debug, Default)]
+pub struct NodeDetector {
+  light_data: Option<LightData>
+}
 
 impl Optical for NodeDetector {
   fn node_type(&self) -> &str {
@@ -14,6 +20,17 @@ impl Optical for NodeDetector {
   
 }
 
+impl Display for NodeDetector {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+      write!(f, "Detector: ").unwrap();
+      if self.light_data.is_none() {
+        write!(f,"no data available")
+      } else {
+        write!(f, "{:?}", self.light_data)
+      }
+    }
+}
+
 impl Dottable for NodeDetector{
     fn node_color(&self) -> &str {
         "lemonchiffon"
diff --git a/src/nodes/node_dummy.rs b/src/nodes/node_dummy.rs
index 42b26352180daba3c4be444b34020f5c3131c647..065bf31ea1a81854a728f55d2e43ffb9808f0b2b 100644
--- a/src/nodes/node_dummy.rs
+++ b/src/nodes/node_dummy.rs
@@ -1,6 +1,7 @@
 use crate::optic_node::{Optical,Dottable};
 use crate::optic_ports::OpticPorts;
 
+#[derive(Debug)]
 /// A fake / dummy component without any functions. It is mainly used for development and debugging purposes.
 pub struct NodeDummy;
 
diff --git a/src/nodes/node_group.rs b/src/nodes/node_group.rs
index e578de7cbff89b9032502f6c6e129606e688b844..72184bb2645be31651b6af39293b4bc617893455 100644
--- a/src/nodes/node_group.rs
+++ b/src/nodes/node_group.rs
@@ -7,7 +7,7 @@ use crate::light::Light;
 
 type Result<T> = std::result::Result<T, OpossumError>;
 
-#[derive(Default)]
+#[derive(Default, Debug)]
 pub struct NodeGroup {
     g: DiGraph<OpticNode, Light>,
 }
diff --git a/src/nodes/node_reference.rs b/src/nodes/node_reference.rs
index 2603b4b809ad0349d31e09e41bd6d9ea6a3ce1f0..18c74f1aae37133a6825804251ca2c20f2a657b8 100644
--- a/src/nodes/node_reference.rs
+++ b/src/nodes/node_reference.rs
@@ -3,6 +3,7 @@ use std::rc::{Weak, Rc};
 use crate::optic_node::{OpticNode, Optical, Dottable};
 use crate::optic_ports::OpticPorts;
 
+#[derive(Debug)]
 /// A virtual component referring to another existing component. This node type is necessary in order to model resonators (loops) or double-pass systems.
 pub struct NodeReference {
     reference: Weak<OpticNode>,
diff --git a/src/nodes/node_source.rs b/src/nodes/node_source.rs
index def2f73ca307bea49cdb4ef38266a44119067747..9a61865920a095310437b49a10e6136118a354e1 100644
--- a/src/nodes/node_source.rs
+++ b/src/nodes/node_source.rs
@@ -1,21 +1,42 @@
-use crate::{optic_node::{Optical, Dottable}, optic_ports::OpticPorts};
+use crate::{
+    lightdata::LightData,
+    optic_node::{Dottable, Optical},
+    optic_ports::OpticPorts,
+};
 
-pub struct NodeSource;
+#[derive(Debug, Default)]
+pub struct NodeSource {
+    light_data: Option<LightData>,
+}
+
+impl NodeSource {
+    pub fn new(light: LightData) -> Self {
+        NodeSource {
+            light_data: Some(light),
+        }
+    }
 
+    pub fn light_data(&self) -> Option<&LightData> {
+        self.light_data.as_ref()
+    }
+
+    pub fn set_light_data(&mut self, light_data: LightData) {
+        self.light_data = Some(light_data);
+    }
+}
 impl Optical for NodeSource {
-  fn node_type(&self) -> &str {
-      "light source"
-  }
-  fn ports(&self) -> OpticPorts {
-      let mut ports=OpticPorts::new();
-      ports.add_output("out1").unwrap();
-      ports
-  }
-  
+    fn node_type(&self) -> &str {
+        "light source"
+    }
+    fn ports(&self) -> OpticPorts {
+        let mut ports = OpticPorts::new();
+        ports.add_output("out1").unwrap();
+        ports
+    }
 }
 
-impl Dottable for NodeSource{
-  fn node_color(&self) -> &str {
-    "slateblue"
-  }
+impl Dottable for NodeSource {
+    fn node_color(&self) -> &str {
+        "slateblue"
+    }
 }
diff --git a/src/optic_node.rs b/src/optic_node.rs
index 7f514a0d7c32578f007658668a4b076982afeb26..b3441499fe18019e9038429135c1e7f1f59b3a45 100644
--- a/src/optic_node.rs
+++ b/src/optic_node.rs
@@ -65,7 +65,7 @@ impl OpticNode {
 
 impl Debug for OpticNode {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        write!(f, "{}", self.name)
+        write!(f, "{} - {:?}", self.name, self.node)
     }
 }
 
@@ -199,8 +199,8 @@ pub trait Dottable {
     }
 }
 
-pub trait OpticComponent: Optical + Dottable {}
-impl<T: Optical + Dottable> OpticComponent for T {}
+pub trait OpticComponent: Optical + Dottable + Debug {}
+impl<T: Optical + Dottable + Debug> OpticComponent for T {}
 
 
 #[cfg(test)]