diff --git a/libs/Objects/include/Objects/Regex.h b/libs/Objects/include/Objects/Regex.h
index 4dbe6442..e0bf69b2 100644
--- a/libs/Objects/include/Objects/Regex.h
+++ b/libs/Objects/include/Objects/Regex.h
@@ -22,6 +22,7 @@ class Regex : public AlgExpression {
 	Regex* expr(const std::vector<Lexeme>&, int, int) override;
 	Regex* scan_minus(const std::vector<Lexeme>&, int, int);
 
+	Regex update_epsilons() const;
 	bool equals(const AlgExpression* other) const override;
 
 	// Множество префиксов длины len
diff --git a/libs/Objects/src/Regex.cpp b/libs/Objects/src/Regex.cpp
index 3bd63734..352f49db 100644
--- a/libs/Objects/src/Regex.cpp
+++ b/libs/Objects/src/Regex.cpp
@@ -29,14 +29,14 @@ Regex::Regex(const string& str) {
 }
 
 Regex::Regex(const Symbol& s) {
-if (s.is_epsilon())
- {type = Type::eps;
- }
-else
- {type = Type::symb;
-  symbol = s;
-  alphabet = {s};
- }
+	if (s.is_epsilon()) {
+		type = Type::eps;
+	}
+	else {
+		type = Type::symb;
+	 	symbol = s;
+		alphabet = {s};
+	}
 }
 
 Regex::Regex(const string& str, const std::shared_ptr<Language>& new_language) : Regex(str) {
@@ -1167,6 +1167,37 @@ FiniteAutomaton Regex::to_antimirov(iLogTemplate* log) const {
 	return fa;
 }
 
+Regex Regex::update_epsilons() const {
+   Regex result;
+   Symbol s;
+   switch (type) {
+			case Type::eps:
+				result.type = Type::eps;
+				break;
+			case Type::symb:
+				s = Symbol(symbol);
+				s.delinearize();
+				if (s.is_epsilon()) {
+					result.type = Type::eps;
+					break;
+				}
+				else {
+					result = Regex(symbol);
+					break;
+				}
+			default:
+				Regex r1 = *Regex::cast(term_l);
+				if (term_r!=nullptr) {
+					Regex r2 = *Regex::cast(term_r);
+					result = Regex(type, &r1.update_epsilons(), &r2.update_epsilons()); 
+				} else
+					result = Regex(type, &r1.update_epsilons(), nullptr);
+
+		}
+		return result;
+	}
+
+
 Regex Regex::deannote(iLogTemplate* log) const {
 	Regex temp_copy(*this);
 	vector<Regex*> list = Regex::cast(temp_copy.preorder_traversal());
@@ -1177,11 +1208,12 @@ Regex Regex::deannote(iLogTemplate* log) const {
 			deannoted_alphabet.insert(i->symbol);
 	}
 	temp_copy.set_language(deannoted_alphabet);
+	Regex ttt = temp_copy.update_epsilons();
 	if (log) {
 		log->set_parameter("oldregex", *this);
-		log->set_parameter("result", temp_copy);
+		log->set_parameter("result", ttt);
 	}
-	return temp_copy;
+	return ttt;
 }
 
 bool Regex::is_one_unambiguous(iLogTemplate* log) const {