diff --git a/test.cpp b/test.cpp
index 6dc9f22f82ee18759ef8e04ebe58859097474f6b..67c7a33472de053bfe511bf0a1935652a23e59fc 100644
--- a/test.cpp
+++ b/test.cpp
@@ -302,6 +302,16 @@ bool testTranslate()
 	free(cdc);
 	free(relaxis);
 
+	model = "rc-rc-rc";
+	cdc = kiss_eis_to_cdc(model);
+	relaxis = kiss_eis_to_relaxis(model);
+	std::cout<<"Eis: "<<model<<'\n';
+	std::cout<<"CDC: "<<cdc<<'\n';
+	std::cout<<"RelaxIS: "<<relaxis<<'\n';
+
+	free(cdc);
+	free(relaxis);
+
 	return true;
 }
 
diff --git a/translators.cpp b/translators.cpp
index 9df37e5d9d40f10ca9e3e1c05cba683c1221df73..03d337b12a9250cb95cfbb6869b1706f28e9c13e 100644
--- a/translators.cpp
+++ b/translators.cpp
@@ -200,6 +200,48 @@ static void replaceBraket(std::string& in, size_t start, size_t num)
 
 }
 
+static bool removeUnnededBracket(std::string& in, size_t start_index)
+{
+	size_t level = 0;
+	for(size_t i = start_index; i < in.size(); ++i)
+	{
+		if(in[i] == '(')
+		{
+			++level;
+		}
+		else if(level == 0)
+		{
+			if(in[i] == '-')
+				break;
+			else if(in[i] == ')')
+			{
+				if(i - start_index > 2)
+				{
+					in.erase(i, 1);
+					in.erase(start_index, 1);
+					return true;
+				}
+				break;
+			}
+		}
+		else if(in[i] == ')')
+		{
+			--level;
+		}
+	}
+
+	return false;
+}
+
+static void removeUnnededBrackets(std::string& in)
+{
+	for(size_t i = 0; i < in.size(); ++i)
+	{
+		if(in[i] == '(' && removeUnnededBracket(in, i) && i > 0)
+			--i;
+	}
+}
+
 char* kiss_eis_to_relaxis(const char* in)
 {
 	char* workcstr = kiss_eis_to_cdc(in);
@@ -222,6 +264,8 @@ char* kiss_eis_to_relaxis(const char* in)
 				out.pop_back();
 			out.push_back(')');
 			--level;
+			if(level % 2 == 0)
+				out.push_back('-');
 		}
 		else
 		{
@@ -241,6 +285,8 @@ char* kiss_eis_to_relaxis(const char* in)
 	if(out.back() == '-')
 		out.pop_back();
 
+	removeUnnededBrackets(out);
+
 	return strdup(out.c_str());
 }