diff --git a/MeshLib/MeshSearch/NodeSearch.cpp b/MeshLib/MeshSearch/NodeSearch.cpp
index 81efa477843fe4a1fecdb72297ed2b8fedae32dc..32da085f6d50d68d7844f382bc713a9bb5062916 100644
--- a/MeshLib/MeshSearch/NodeSearch.cpp
+++ b/MeshLib/MeshSearch/NodeSearch.cpp
@@ -24,40 +24,44 @@ NodeSearch::NodeSearch(const MeshLib::Mesh &mesh)
 {
 }
 
-std::size_t NodeSearch::searchByElementIDs(const std::vector<std::size_t> &elements, bool only_match_all_connected_elements)
+std::vector<std::size_t> NodeSearch::searchByElementIDsMatchAllConnectedElements(const std::vector<std::size_t> &elements)
 {
 	std::vector<std::size_t> connected_nodes;
-	if (only_match_all_connected_elements)
-	{
-		std::vector<std::size_t> node_marked_counts(_mesh.getNNodes(), 0); //this approach is not optimum for memory size
-		std::for_each(elements.begin(), elements.end(),
-			[&](std::size_t eid)
-			{
-				auto* e = _mesh.getElement(eid);
-				for (unsigned i=0; i<e->getNBaseNodes(); i++) {
-					node_marked_counts[e->getNodeIndex(i)]++;
-				}
-			});
-		for (std::size_t i=0; i<node_marked_counts.size(); i++)
+
+	std::vector<std::size_t> node_marked_counts(_mesh.getNNodes(), 0); //this approach is not optimum for memory size
+	std::for_each(elements.begin(), elements.end(),
+		[&](std::size_t eid)
 		{
-			if (node_marked_counts[i] == _mesh.getNode(i)->getElements().size())
-				connected_nodes.push_back(i);
-		}
-	} else {
-		std::for_each(elements.begin(), elements.end(),
-			[&](std::size_t eid)
-			{
-				auto* e = _mesh.getElement(eid);
-				for (unsigned i=0; i<e->getNBaseNodes(); i++) {
-					connected_nodes.push_back(e->getNodeIndex(i));
-				}
-			});
-		std::sort(connected_nodes.begin(), connected_nodes.end());
-		auto it = std::unique(connected_nodes.begin(), connected_nodes.end());
-		connected_nodes.resize(std::distance(connected_nodes.begin(),it));
+			auto* e = _mesh.getElement(eid);
+			for (unsigned i=0; i<e->getNBaseNodes(); i++) {
+				node_marked_counts[e->getNodeIndex(i)]++;
+			}
+		});
+	for (std::size_t i=0; i<node_marked_counts.size(); i++)
+	{
+		if (node_marked_counts[i] == _mesh.getNode(i)->getElements().size())
+			connected_nodes.push_back(i);
 	}
-	this->updateUnion(connected_nodes);
-	return connected_nodes.size();
+	return connected_nodes;
+}
+
+std::vector<std::size_t> NodeSearch::searchByElementIDsNotMatchAllConnectedElements(const std::vector<std::size_t> &elements)
+{
+	std::vector<std::size_t> connected_nodes;
+
+	std::for_each(elements.begin(), elements.end(),
+		[&](std::size_t eid)
+		{
+			auto* e = _mesh.getElement(eid);
+			for (unsigned i=0; i<e->getNBaseNodes(); i++) {
+				connected_nodes.push_back(e->getNodeIndex(i));
+			}
+		});
+	std::sort(connected_nodes.begin(), connected_nodes.end());
+	auto it = std::unique(connected_nodes.begin(), connected_nodes.end());
+	connected_nodes.resize(std::distance(connected_nodes.begin(),it));
+
+	return connected_nodes;
 }
 
 std::size_t NodeSearch::searchUnused()
diff --git a/MeshLib/MeshSearch/NodeSearch.h b/MeshLib/MeshSearch/NodeSearch.h
index 8a8df377faf2451ba521535ec333c3d7539b65fc..77d2a5a5cfc8316d44930e7594749036f4ee9f99 100644
--- a/MeshLib/MeshSearch/NodeSearch.h
+++ b/MeshLib/MeshSearch/NodeSearch.h
@@ -30,12 +30,24 @@ public:
 	const std::vector<std::size_t>& getSearchedNodeIDs() const {return _marked_nodes; }
 
 	/// Marks all nodes connecting to any of the given elements
-	std::size_t searchByElementIDs(const std::vector<std::size_t> &element_ids, bool only_match_all_connected_elements = false);
+	std::size_t searchByElementIDs(const std::vector<std::size_t> &element_ids, bool only_match_all_connected_elements = false)
+	{
+		std::vector<std::size_t> connected_nodes =
+			(only_match_all_connected_elements
+				? searchByElementIDsMatchAllConnectedElements(element_ids)
+				: searchByElementIDsNotMatchAllConnectedElements(element_ids));
+
+		this->updateUnion(connected_nodes);
+		return connected_nodes.size();
+	}
 
 	/// Marks all unused nodes
 	std::size_t searchUnused();
 
 private:
+	std::vector<std::size_t> searchByElementIDsMatchAllConnectedElements(const std::vector<std::size_t> &element_ids);
+	std::vector<std::size_t> searchByElementIDsNotMatchAllConnectedElements(const std::vector<std::size_t> &element_ids);
+
 	/// Updates the vector of marked items with values from vec.
 	void updateUnion(const std::vector<std::size_t> &vec);