diff --git a/opossum/examples/group_reverse.rs b/opossum/examples/group_reverse.rs
index 1a07c2625c033ef1b0cf8327a7449fdaba3ce999..db4310667fc72c2455863a4f2cbff8a6cffdf371 100644
--- a/opossum/examples/group_reverse.rs
+++ b/opossum/examples/group_reverse.rs
@@ -2,7 +2,7 @@ use std::path::Path;
 
 use num::Zero;
 use opossum::{
-    analyzers::{AnalyzerType, RayTraceConfig},
+    analyzers::AnalyzerType,
     error::OpmResult,
     lightdata::{DataEnergy, LightData},
     nodes::{Dummy, EnergyMeter, NodeGroup, Source},
@@ -22,7 +22,7 @@ fn main() -> OpmResult<()> {
     ))?;
 
     let mut group = NodeGroup::default();
-    group.set_expand_view(true).unwrap();
+    group.set_expand_view(true)?;
     let g_n1 = group.add_node(Dummy::new("node1"))?;
     let g_n2 = group.add_node(Dummy::new("node2"))?;
 
@@ -38,6 +38,6 @@ fn main() -> OpmResult<()> {
     scenery.connect_nodes(i_g, "in1", i_d, "in1", Length::zero())?;
 
     let mut doc = OpmDocument::new(scenery);
-    doc.add_analyzer(AnalyzerType::RayTrace(RayTraceConfig::default()));
+    doc.add_analyzer(AnalyzerType::Energy);
     doc.save_to_file(Path::new("./opossum/playground/group_reverse.opm"))
 }
diff --git a/opossum/src/nodes/dummy.rs b/opossum/src/nodes/dummy.rs
index 38c85e1858de047b32463f589fd2678fde278490..1ad3ee5c6e16e0920d200ac5795ce841e7308cc3 100644
--- a/opossum/src/nodes/dummy.rs
+++ b/opossum/src/nodes/dummy.rs
@@ -11,7 +11,6 @@ use crate::{
     lightdata::LightData,
     optic_node::OpticNode,
     optic_ports::{OpticPorts, PortType},
-    reporting::node_report::NodeReport,
     surface::{OpticalSurface, Plane, Surface},
     utils::geom_transformation::Isometry,
 };
@@ -132,14 +131,6 @@ impl AnalysisRayTrace for Dummy {
 }
 
 impl OpticNode for Dummy {
-    fn node_report(&self, uuid: &str) -> Option<NodeReport> {
-        Some(NodeReport::new(
-            &self.node_type(),
-            &self.name(),
-            uuid,
-            self.node_attr.properties().clone(),
-        ))
-    }
     fn node_attr(&self) -> &NodeAttr {
         &self.node_attr
     }
@@ -203,7 +194,7 @@ mod test {
     #[test]
     fn report() {
         let report = Dummy::default().node_report("123");
-        assert!(report.is_some());
+        assert!(report.is_none());
     }
     #[test]
     fn ports_inverted() {
diff --git a/opossum/src/nodes/node_group/mod.rs b/opossum/src/nodes/node_group/mod.rs
index 3181a7b224720e7564bcf5c8eecf9bbebd635978..c85f126a88c5aefbc26415217282dfc49cf81259 100644
--- a/opossum/src/nodes/node_group/mod.rs
+++ b/opossum/src/nodes/node_group/mod.rs
@@ -19,7 +19,6 @@ use crate::{
     SceneryResources,
 };
 use chrono::Local;
-use log::{info, warn};
 pub use optic_graph::OpticGraph;
 use petgraph::prelude::NodeIndex;
 use serde::{Deserialize, Serialize};
@@ -69,6 +68,7 @@ pub struct NodeGroup {
     #[serde(skip)]
     graph: OpticGraph,
     node_attr: NodeAttr,
+    #[serde(skip)]
     input_port_distances: BTreeMap<String, Length>,
     #[serde(skip)]
     accumulated_rays: Vec<Vec<Rays>>,
@@ -306,17 +306,6 @@ impl NodeGroup {
     pub const fn graph(&self) -> &OpticGraph {
         &self.graph
     }
-    /// Write node specific data files to the given `data_dir`.
-    /// # Errors
-    /// This function will return an error if the underlying `export_data` function of the corresponding
-    /// node returns an error.
-    // pub fn export_node_data(&self, data_dir: &Path) -> OpmResult<()> {
-    //     for node in self.graph.nodes() {
-    //         let uuid = node.uuid().as_simple().to_string();
-    //         node.optical_ref.borrow().export_data(data_dir, &uuid)?;
-    //     }
-    //     Ok(())
-    // }
     /// Generate a (top level) [`AnalysisReport`] containing the result of a previously preformed analysis.
     ///
     /// This [`AnalysisReport`] can then be used to either save it to disk or produce an HTML document from. In addition,
@@ -327,8 +316,6 @@ impl NodeGroup {
         let mut analysis_report = AnalysisReport::new(get_version(), Local::now());
         analysis_report.add_scenery(self);
         for node in self.graph.nodes() {
-            let node_name = &node.optical_ref.borrow().name();
-            info!("toplevel report data for node {node_name}");
             let uuid = node.uuid().as_simple().to_string();
             if let Some(node_report) = node.optical_ref.borrow().node_report(&uuid) {
                 analysis_report.add_node_report(node_report);
@@ -405,26 +392,6 @@ impl NodeGroup {
     pub fn clear_edges(&mut self) {
         self.graph.clear_edges();
     }
-    // fn export_data(&self, report_dir: &Path, _uuid: &str) -> OpmResult<()> {
-    //     for node in self.graph.nodes() {
-    //         let node_name = node.optical_ref.borrow().name();
-    //         info!("export data for node {node_name}");
-    //         let uuid = node.uuid().as_simple().to_string();
-    //         node.optical_ref.borrow().export_data(report_dir, &uuid)?;
-    //         let hitmaps = node.optical_ref.borrow().hit_maps();
-    //         for hitmap in &hitmaps {
-    //             let port_name = hitmap.0;
-    //             info!("   found hitmap for port {port_name}");
-    //             let file_path = PathBuf::from(report_dir).join(Path::new(&format!(
-    //                 "hitmap_{node_name}_{port_name}_{uuid}.svg"
-    //             )));
-    //             if !hitmap.1.is_empty() {
-    //                 hitmap.1.to_plot(&file_path, PltBackEnd::SVG)?;
-    //             }
-    //         }
-    //     }
-    //     Ok(())
-    // }
 }
 
 impl OpticNode for NodeGroup {
@@ -451,6 +418,7 @@ impl OpticNode for NodeGroup {
         if let Proptype::OpticGraph(g) = &self.node_attr.get_property("graph")? {
             self.graph = g.clone();
         }
+        self.graph.set_is_inverted(self.node_attr.inverted());
         Ok(())
     }
     fn node_report(&self, uuid: &str) -> Option<NodeReport> {
@@ -459,7 +427,6 @@ impl OpticNode for NodeGroup {
             let sub_uuid = node.uuid().as_simple().to_string();
             if let Some(node_report) = node.optical_ref.borrow().node_report(&sub_uuid) {
                 let node_name = &node.optical_ref.borrow().name();
-                info!("report data for node {node_name}");
                 if !(group_props.contains(node_name)) {
                     group_props
                         .create(node_name, "", None, node_report.into())