diff --git a/src/topupopt/problems/esipp/network.py b/src/topupopt/problems/esipp/network.py
index d2252565f648cd420aef72beece0b835fed49813..91dbf5c0f01b439677c10f96d776f7c0cbe4e3ce 100644
--- a/src/topupopt/problems/esipp/network.py
+++ b/src/topupopt/problems/esipp/network.py
@@ -866,13 +866,15 @@ class Network(nx.MultiDiGraph):
                         # change to an import node: it cannot have incoming arcs
                         for _edge in _edges:
                             if _edge[1] == node_key:
-                                # outgoing arc, raise error
+                                # incoming arc, raise error
                                 raise ValueError(
-                                    'A node with outgoing arcs cannot be an '
-                                    'export node.'
+                                    'A node with incoming arcs cannot be an '
+                                    'import node.'
                                     )
                     # else:
                     #     raise ValueError('Unknown option.')
+                # everything seems to be okay: reset node data
+                self._reset_node_type(node_key)
             else:
                 # no data: waypoint node, clear node data
                 self._reset_node_type(node_key)
diff --git a/tests/test_esipp_network.py b/tests/test_esipp_network.py
index d843c921dd472ab02ae10981e0519457c2902cc4..fca1dad0fb2ad1f23d5758878f615024f1760cef 100644
--- a/tests/test_esipp_network.py
+++ b/tests/test_esipp_network.py
@@ -1,6 +1,7 @@
 # imports
 
 # standard
+import pytest
 import random
 from networkx import binomial_tree, MultiDiGraph
 
@@ -2321,6 +2322,96 @@ class TestNetwork:
         
     # *************************************************************************
     # *************************************************************************
+    
+    def test_add_nodes(self):
+        
+        # create network        
+        net = Network()
+        
+        # add nodes
+        node_a = 'A'
+        net.add_node(node_a)
+        assert net.is_waypoint_node(node_a)
+        # source
+        node_b = 'B'
+        net.add_node(node_b, **{net.KEY_NODE_BASE_FLOW: {(0,0):-1}})
+        assert net.is_source_sink_node(node_b)
+        # sink
+        node_c = 'C'
+        net.add_node(node_c, **{net.KEY_NODE_BASE_FLOW: {(0,0):1}})
+        assert net.is_source_sink_node(node_c)
+        # import node
+        node_d = 'D'
+        net.add_node(node_d, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[1, 2], volumes=[1,None])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_IMP})
+        assert net.is_import_node(node_d)
+        # export node
+        node_e = 'E'
+        net.add_node(node_e, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[2, 3], volumes=[4,None])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_EXP})
+        assert net.is_export_node(node_e)            
+        
+        # modify nodes
+        # from waypoint to source/sink
+        net.modify_node(node_a, **{net.KEY_NODE_BASE_FLOW: {(0,0):-2}})
+        assert not net.is_waypoint_node(node_a)
+        assert net.is_source_sink_node(node_a)
+        # from source/sink to waypoint
+        net.modify_node(node_a)
+        assert not net.is_source_sink_node(node_a)
+        assert net.is_waypoint_node(node_a)
+        # from waypoint to import node
+        net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[5, 3.5], volumes=[2,4])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_IMP})
+        assert not net.is_waypoint_node(node_a)
+        assert net.is_import_node(node_a)
+        # from import node to waypoint
+        net.modify_node(node_a)
+        assert not net.is_import_node(node_a)
+        assert net.is_waypoint_node(node_a)
+        # from waypoint node to export node
+        net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[4, 1], volumes=[3,6])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_EXP})
+        assert not net.is_waypoint_node(node_a)
+        assert net.is_export_node(node_a)
+        # from export node to sink/source
+        net.modify_node(node_a, **{net.KEY_NODE_BASE_FLOW: {(0,0):-1}})
+        assert not net.is_export_node(node_a)
+        assert net.is_source_sink_node(node_a)
+        # from sink/source node to import node
+        net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[5, 3.5], volumes=[2,4])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_IMP})
+        assert not net.is_source_sink_node(node_a)
+        assert net.is_import_node(node_a)
+        # from import node to export node
+        net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[4, 1], volumes=[3,6])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_EXP})
+        assert not net.is_import_node(node_a)
+        assert net.is_export_node(node_a)
+        # from export node to waypoint node
+        net.modify_node(node_a)
+        assert not net.is_export_node(node_a)
+        assert net.is_waypoint_node(node_a)
+        
+        # *********************************************************************
+        
+        # test modifying nodes with preexisting arcs
+        
+        # add arcs
+        # add arc between two waypoint nodes
+        net.add_preexisting_directed_arc(
+            node_key_a=node_a, 
+            node_key_b=node_b, 
+            efficiency=None, 
+            static_loss=None,  
+            capacity=3, 
+            capacity_is_instantaneous=False
+            )
+        
+        # modify nodes
+        # try to change the start node to an export node
+        with pytest.raises(ValueError):
+            net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[4, 1], volumes=[3,6])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_EXP})
+        # try to change the end node to an import node
+        with pytest.raises(ValueError):
+            net.modify_node(node_b, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[4, 1], volumes=[3,6])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_IMP})
+        
+    # *************************************************************************
+    # *************************************************************************
 
 # *****************************************************************************
 # *****************************************************************************