diff --git a/pgadmin/slony/dlgRepCluster.cpp b/pgadmin/slony/dlgRepCluster.cpp
index 1ca47c7..058ba47 100644
--- a/pgadmin/slony/dlgRepCluster.cpp
+++ b/pgadmin/slony/dlgRepCluster.cpp
@@ -323,6 +323,7 @@ int dlgRepCluster::Go(bool modal)
 		//NOTE: We are not supporting Slony versions less than 1.2.0
 
 		wxString tempScript;
+		bool isSlonyVersionBefore2_2_0 = false;
 		AddScript(tempScript, wxT("slony1_funcs.sql"));
 
 		if (tempScript.Contains(wxT("@MODULEVERSION@")) && slonyVersion.IsEmpty())
@@ -336,6 +337,25 @@ int dlgRepCluster::Go(bool modal)
 				wxLogError(_("Couldn't test for the Slony version. Assuming 1.2.0"));
 				slonyVersion = wxT("1.2.0");
 			}
+			else
+				isSlonyVersionBefore2_2_0 = true;
+		}
+
+		if (!isSlonyVersionBefore2_2_0)
+		{
+			AddScript(tempScript, wxT("slony1_funcs.2.2.0.sql"));
+			if (tempScript.Contains(wxT("@MODULEVERSION@")) && slonyVersion.IsEmpty())
+			{
+				this->database->ExecuteVoid(wxT("CREATE OR REPLACE FUNCTION pgadmin_slony_version() returns text as '$libdir/slony1_funcs.2.2.0', '_Slony_I_2_2_0_getModuleVersion' LANGUAGE C"));
+				slonyVersion = this->database->ExecuteScalar(wxT("SELECT pgadmin_slony_version();"));
+				this->database->ExecuteVoid(wxT("DROP FUNCTION pgadmin_slony_version()"));
+
+				if (slonyVersion.IsEmpty())
+				{
+					wxLogError(_("Couldn't test for the Slony version. Assuming 1.2.0"));
+					slonyVersion = wxT("1.2.0");
+				}
+			}
 		}
 
 		//Here we are finding the exact slony scripts version, which is based on Slony Version and PG Version.
@@ -435,22 +455,43 @@ int dlgRepCluster::Go(bool modal)
 				}
 			}
 
+			wxString slonyBaseVersionFilename;
+			wxString slonyFuncsVersionFilename;
 
-			wxString slonyBaseVersionFilename = wxT("slony1_base.") + scriptVersion + wxT(".sql");
-			wxString slonyFuncsVersionFilename = wxT("slony1_funcs.") + scriptVersion + wxT(".sql");
+			if (SlonyMaximumVersion(wxT("2.2"), 0))
+			{
+				slonyBaseVersionFilename = wxT("slony1_base.") + scriptVersion + wxT(".2.2.0.sql");
+				slonyFuncsVersionFilename = wxT("slony1_funcs.") + scriptVersion + wxT(".2.2.0.sql");
+			}
+			else
+			{
+				slonyBaseVersionFilename = wxT("slony1_base.") + scriptVersion + wxT(".sql");
+				slonyFuncsVersionFilename = wxT("slony1_funcs.") + scriptVersion + wxT(".sql");
+			}
 
 			wxString xxidVersionFilename;
 
 			if (!xxidVersion.IsEmpty())
 				xxidVersionFilename = wxT("xxid.") + xxidVersion + wxT(".sql");
 
-			if (((!xxidVersion.IsEmpty() && !AddScript(createScript, xxidVersionFilename)) ||
-			        !AddScript(createScript, wxT("slony1_base.sql")) ||
+			if (SlonyMaximumVersion(wxT("2.2"), 0))
+			{
+				if (((!xxidVersion.IsEmpty() && !AddScript(createScript, xxidVersionFilename)) ||
+			        !AddScript(createScript, wxT("slony1_base.2.2.0.sql")) ||
 			        !AddScript(createScript, slonyBaseVersionFilename) ||
-			        !AddScript(createScript, wxT("slony1_funcs.sql")) ||
+			        !AddScript(createScript, wxT("slony1_funcs.2.2.0.sql")) ||
 			        !AddScript(createScript, slonyFuncsVersionFilename)))
 				createScript = wxEmptyString;
-
+			}
+			else
+			{
+				if (((!xxidVersion.IsEmpty() && !AddScript(createScript, xxidVersionFilename)) ||
+						!AddScript(createScript, wxT("slony1_base.sql")) ||
+						!AddScript(createScript, slonyBaseVersionFilename) ||
+						!AddScript(createScript, wxT("slony1_funcs.sql")) ||
+						!AddScript(createScript, slonyFuncsVersionFilename)))
+					createScript = wxEmptyString;
+			}
 		}
 
 		// Populate the server combo box
@@ -1025,6 +1066,14 @@ wxString dlgRepCluster::GetSql()
 				}
 			}
 			sql = ReplaceString(sql, wxT("@MODULEVERSION@"), slonyVersion);
+
+			// if slony version is greater then equal to 2.2 then replcace @FUNCVERSION to 2_2_0
+			if (sql.Contains(wxT("@FUNCVERSION@")) && SlonyMaximumVersion(wxT("2.2"), 0))
+			{
+				wxString slonyFuncVersion = slonyVersion;
+				slonyFuncVersion.Replace(wxT("."),wxT("_"));
+				sql = ReplaceString(sql, wxT("@FUNCVERSION@"), slonyFuncVersion);
+			}
 		}
 
 		sql += wxT("\n")
@@ -1064,15 +1113,11 @@ wxString dlgRepCluster::GetSql()
 			    NumToStr(adminNode) + wxT(", ") +
 			    qtDbString(txtAdminNodeName->GetValue());
 
-			if (chkJoinCluster->GetValue())
-			{
-				if (StrToDouble(remoteVersion) >= 1.1)
-					sql += wxT(", false");
-			}
-			else
+			// storeNode API contains three argument in slony version 1.1 and 1.2 (storeNode(int4,text,boolean)),
+			// slony version 2.0 onwards, storeNode API contains only two arguments e.g. storeNode(int4,text)
+			if (StrToDouble(remoteVersion) >= 1.1 && StrToDouble(remoteVersion) < 2.0)
 			{
-				if (createScript.Find(wxT("storeNode (int4, text)")) < 0)
-					sql += wxT(", false");
+				sql += wxT(", false");
 			}
 
 			sql += wxT(");\n")
