diff --git a/alib2std/src/extensions/linear_set.hpp b/alib2std/src/extensions/linear_set.hpp
index e3dda1d76badbfcafe8e9affe97f5496ee959f46..a3070351801c58e268634f317e0bebc8d7a08c3f 100644
--- a/alib2std/src/extensions/linear_set.hpp
+++ b/alib2std/src/extensions/linear_set.hpp
@@ -29,7 +29,7 @@ class linear_set {
 
 	void sort_unique ( ) {
 		std::sort ( m_data.begin ( ), m_data.end ( ), m_comp );
-		m_data.resize ( std::distance ( m_data.begin ( ), std::unique ( m_data.begin ( ), m_data.end ( ), std::bind ( &linear_set<int>::eq, std::ref( * this ), std::placeholders::_1, std::placeholders::_2 ) ) ) );
+		m_data.resize ( std::distance ( m_data.begin ( ), std::unique ( m_data.begin ( ), m_data.end ( ), std::bind ( &linear_set < T >::eq, std::ref( * this ), std::placeholders::_1, std::placeholders::_2 ) ) ) );
 	}
 
 public:
@@ -136,8 +136,16 @@ public:
 		return m_data.erase ( position );
 	}
 
+	size_t erase (const T& val) {
+		const_iterator position = lower_bound ( val );
+		if ( position != end ( ) && eq ( * position, val ) )
+			return m_data.erase ( position ), 1;
+		else
+			return 0;
+	}
+
 	iterator erase (const_iterator first, const_iterator last) {
-		return m_data.erace ( first, last );
+		return m_data.erase ( first, last );
 	}
 
 	const_iterator find (const T& val) const {