diff --git a/pgadmin/dlg/dlgEventTrigger.cpp b/pgadmin/dlg/dlgEventTrigger.cpp
new file mode 100644
index 0000000..56bf2dc
--- /dev/null
+++ b/pgadmin/dlg/dlgEventTrigger.cpp
@@ -0,0 +1,265 @@
+//////////////////////////////////////////////////////////////////////////
+//
+// pgAdmin III - PostgreSQL Tools
+//
+// Copyright (C) 2002 - 2013, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+// dlgEventTrigger.cpp - PostgreSQL Trigger Property
+//
+//////////////////////////////////////////////////////////////////////////
+
+// wxWindows headers
+#include <wx/wx.h>
+
+// App headers
+#include "pgAdmin3.h"
+#include "utils/misc.h"
+#include "frm/frmMain.h"
+#include "utils/pgDefs.h"
+
+#include "dlg/dlgEventTrigger.h"
+#include "schema/pgEventTrigger.h"
+#include "ctl/ctlSeclabelPanel.h"
+
+// pointer to controls
+#define chkEnable		CTRL_CHECKBOX("chkEnable")
+#define rdbEnableStatus CTRL_RADIOBOX("rdbEnableStatus")
+#define cbFunction		CTRL_COMBOBOX2("cbFunction")
+#define rdbEvents		CTRL_RADIOBOX("rdbEvents")
+#define txtWhen			CTRL_TEXT("txtWhen")
+#define cbOwner			CTRL_COMBOBOX2("cbOwner")
+
+BEGIN_EVENT_TABLE(dlgEventTrigger, dlgProperty)
+	EVT_CHECKBOX(XRCID("chkEnable"),				dlgEventTrigger::OnChangeEnable)
+	EVT_RADIOBOX(XRCID("rdbEnableStatus"),			dlgProperty::OnChange)
+	EVT_COMBOBOX(XRCID("cbFunction"),				dlgProperty::OnChange)
+	EVT_RADIOBOX(XRCID("rdbEvents"),				dlgProperty::OnChange)
+	EVT_TEXT(XRCID("txtWhen"),						dlgProperty::OnChange)
+END_EVENT_TABLE();
+
+dlgEventTrigger::dlgEventTrigger(pgaFactory *factory, frmMain *frame, pgEventTrigger *node, pgObject *parent)
+	: dlgProperty(factory, frame, wxT("dlgEventTrigger"))
+{
+	seclabelPage = new ctlSeclabelPanel(nbNotebook);
+	eventTrigger = node;
+}
+
+dlgProperty *pgEventTriggerFactory::CreateDialog(frmMain *frame, pgObject *node, pgObject *parent)
+{
+	return new dlgEventTrigger(this, frame, (pgEventTrigger *)node, parent);
+}
+
+
+wxString dlgEventTrigger::GetSql()
+{
+
+	wxString sql = wxEmptyString;
+	wxString name = GetName();
+
+	if (eventTrigger)
+	{
+		if (!GetName().IsEmpty() && GetName() != eventTrigger->GetName())
+			sql = wxT("ALTER EVENT TRIGGER ") + eventTrigger->GetQuotedFullIdentifier() + wxT("\nRENAME TO ") + qtIdent(GetName()) + wxT(";\n\n");
+
+		if (!cbOwner->GetValue().IsEmpty() && cbOwner->GetValue() != eventTrigger->GetOwner())
+			sql += wxT("ALTER EVENT TRIGGER ") + eventTrigger->GetQuotedFullIdentifier() + wxT("\nOWNER TO ") + cbOwner->GetValue() + wxT(";\n\n");
+
+		if (rdbEnableStatus->GetSelection() != 0 && chkEnable->GetValue())
+			sql += wxT("ALTER EVENT TRIGGER ") + qtIdent(name) + ((rdbEnableStatus->GetSelection() == 1) ? wxT(" ENABLE REPLICA ;\n\n") : wxT(" ENABLE ALWAYS ;\n\n"));
+		
+		else if (!chkEnable->GetValue())
+			sql += wxT("ALTER EVENT TRIGGER ") + qtIdent(name) + wxT(" DISABLE ;\n\n");
+
+	}
+
+	if (!eventTrigger || 
+	         (
+				 cbFunction->GetValue() != (eventTrigger->GetFunction()) ||
+				 rdbEvents->GetStringSelection().Lower() != (eventTrigger->GetEventName().Lower()) ||
+				 txtWhen->GetValue() != (eventTrigger->GetWhen())
+	         )
+	    )
+	{
+		if (eventTrigger)
+			sql  = wxT("DROP EVENT TRIGGER IF EXISTS ") + ((eventTrigger) ? qtIdent(eventTrigger->GetName()) : qtIdent(GetName())) + wxT(";\n\n");
+
+		sql += wxT("CREATE EVENT TRIGGER ") + qtIdent(name) + wxT(" ON ");
+
+		if (rdbEvents->GetSelection() == 0)
+			sql += wxT(" DDL_COMMAND_START ");
+		else if (rdbEvents->GetSelection() == 1)
+			sql += wxT(" DDL_COMMAND_END ");
+		else
+			sql += wxT(" SQL_DROP ");
+	
+		if (!txtWhen->IsEmpty())
+			sql += wxT("\nWHEN TAG IN (") + txtWhen->GetValue() + wxT(")");
+
+		if (!cbFunction->GetValue().IsEmpty())
+			sql += wxT("\nEXECUTE PROCEDURE ") + (cbFunction->GetValue()) + wxT("();\n\n");
+
+		if (rdbEnableStatus->GetSelection() != 0 && chkEnable->GetValue())
+			sql += wxT("ALTER EVENT TRIGGER ") + qtIdent(name) + ((rdbEnableStatus->GetSelection() == 1) ? wxT(" ENABLE REPLICA ;\n\n") : wxT(" ENABLE ALWAYS ;\n\n"));
+		
+		else if (!chkEnable->GetValue())
+			sql += wxT("ALTER EVENT TRIGGER ") + qtIdent(name) + wxT(" DISABLE ;\n\n");
+
+		if (!eventTrigger && !cbOwner->GetValue().IsEmpty())
+			sql += wxT("ALTER EVENT TRIGGER ") + qtIdent(GetName()) + wxT("\nOWNER TO ") + cbOwner->GetValue() + wxT(";\n\n");
+
+	}
+
+	AppendComment(sql, wxT("EVENT TRIGGER ") + qtIdent(GetName()), eventTrigger);
+
+	if (seclabelPage)
+			sql += seclabelPage->GetSqlForSecLabels(wxT("EVENT TRIGGER"), qtIdent(name));
+
+	return sql;
+}
+
+pgObject *dlgEventTrigger::CreateObject(pgCollection *pgcol)
+{
+	pgObject *obj = eventTriggerFactory.CreateObjects(pgcol, 0,
+	                wxT(" \n AND e.evtname = ") + qtDbString(GetName()));
+	return obj;
+}
+
+pgObject *dlgEventTrigger::GetObject()
+{
+	return eventTrigger;
+}
+
+int dlgEventTrigger::Go(bool modal)
+{
+	// cbFunction->Append(wxEmptyString);
+	
+		seclabelPage->SetConnection(connection);
+		seclabelPage->SetObject(eventTrigger);
+		this->Connect(EVT_SECLABELPANEL_CHANGE, wxCommandEventHandler(dlgEventTrigger::OnChange));
+
+	if (eventTrigger)
+	{
+		// Edit mode
+		chkEnable->SetValue(eventTrigger->GetEnabled());
+
+		if (eventTrigger->GetEnableStatus() == wxT("enabled"))
+			rdbEnableStatus->SetSelection(0);
+
+		else if(eventTrigger->GetEnableStatus() == wxT("replica"))
+			rdbEnableStatus->SetSelection(1);
+
+		else if(eventTrigger->GetEnableStatus() == wxT("always"))
+			rdbEnableStatus->SetSelection(2);
+
+		else
+			rdbEnableStatus->Disable();
+
+		if(eventTrigger->GetEventName() == wxT("ddl_command_start"))
+			rdbEvents->SetSelection(0);
+
+		else if(eventTrigger->GetEventName() == wxT("ddl_command_end"))
+			rdbEvents->SetSelection(1);
+
+		else
+			rdbEvents->SetSelection(2);
+
+		cbFunction->SetValue(eventTrigger->GetFunction());
+		cbOwner->SetValue(eventTrigger->GetOwner());
+		(!eventTrigger->GetWhen().IsEmpty()) ? txtWhen->SetValue(eventTrigger->GetWhen()) : txtWhen->SetValue(wxEmptyString);
+	}
+
+	else
+	{
+		// Create mode
+		chkEnable->SetValue(true);
+		rdbEnableStatus->Disable();
+	}
+
+	pgSet *funcSet = connection->ExecuteSet(
+		                wxT("SELECT quote_ident(nspname) || '.' || quote_ident(proname)\n")
+		                wxT(" FROM pg_proc p, pg_namespace n, pg_language l\n")
+		                wxT(" WHERE p.pronamespace = n.oid AND p.prolang = l.oid AND p.pronargs = 0 AND l.lanname != 'sql' AND prorettype::regtype::text = 'event_trigger'\n")
+		                wxT(" ORDER BY nspname ASC, proname ASC "));
+	if (funcSet)
+	{
+		while (!funcSet->Eof())
+		{
+			cbFunction->Append(funcSet->GetVal(0));
+			funcSet->MoveNext();
+		}
+		delete funcSet;
+	}
+
+	pgSet *userSet = connection->ExecuteSet(
+					wxT("SELECT usename ")
+					wxT("FROM	pg_user ")
+					wxT("WHERE  usesuper IS TRUE"));
+	if (userSet)
+	{
+		while (!userSet->Eof())
+		{
+			cbOwner->Append(userSet->GetVal(0));
+			userSet->MoveNext();
+		}
+		delete userSet;
+	}
+
+
+	return  dlgProperty::Go(modal);
+}
+
+void dlgEventTrigger::CheckChange()
+{
+	
+	bool enable = true;
+
+	wxString function = cbFunction->GetValue();
+	wxString name = GetName();
+	wxString owner = cbOwner->GetValue();
+
+	(chkEnable->GetValue()) ? rdbEnableStatus->Enable() : rdbEnableStatus->Disable();
+
+	CheckValid(enable, !name.IsEmpty(), _("Please specify event trigger name."));
+	CheckValid(enable, !owner.IsEmpty(), _("Please specify owner of event trigger."));
+	CheckValid(enable, !function.IsEmpty(), _("Please specify event trigger function."));
+
+	if (eventTrigger)
+	{
+		EnableOK(enable &&
+					 (txtComment->GetValue() != eventTrigger->GetComment() ||
+					  txtName->GetValue() != eventTrigger->GetName() ||
+					  txtWhen->GetValue() != eventTrigger->GetWhen() ||
+					  chkEnable->GetValue() != eventTrigger->GetEnabled() ||
+					  rdbEvents->GetStringSelection().Lower() != eventTrigger->GetEventName().Lower() ||
+					  rdbEnableStatus->GetStringSelection().Lower() != eventTrigger->GetEnableStatus().Lower() ||
+					  !function.IsEmpty()||
+					  !owner.IsEmpty()
+					  )
+				);
+	}
+	else
+	{
+		EnableOK(enable);
+	}
+
+
+}
+
+bool dlgEventTrigger::IsUpToDate()
+{
+	if (eventTrigger && !eventTrigger->IsUpToDate())
+		return false;
+	else
+		return true;
+}
+
+void dlgEventTrigger::OnChange(wxCommandEvent &ev)
+{
+	CheckChange();
+}
+
+void dlgEventTrigger::OnChangeEnable(wxCommandEvent &ev)
+{
+	CheckChange();
+}
diff --git a/pgadmin/dlg/dlgFunction.cpp b/pgadmin/dlg/dlgFunction.cpp
index 807b61e..542a2b8 100644
--- a/pgadmin/dlg/dlgFunction.cpp
+++ b/pgadmin/dlg/dlgFunction.cpp
@@ -115,6 +115,11 @@ dlgProperty *pgFunctionFactory::CreateDialog(frmMain *frame, pgObject *node, pgO
 
 	if (parent->GetMetaType() == PGM_TRIGGER)
 		sch = parent->GetSchema();
+	// Event triggers are at database level. So, we do not have a schema for an event trigger.
+
+	else if(parent->GetMetaType() == PGM_EVENTTRIGGER)
+	sch = 0;
+
 	else
 		sch = (pgSchema *)parent;
 
@@ -402,7 +407,7 @@ int dlgFunction::Go(bool modal)
 	{
 		wxString restrict;
 		// create mode
-		restrict = wxT("(typtype IN ('b', 'c', 'd', 'e', 'p', 'r') AND typname NOT IN ('any', 'trigger', 'language_handler'))");
+		restrict = wxT("(typtype IN ('b', 'c', 'd', 'e', 'p', 'r') AND typname NOT IN ('any', 'trigger', 'language_handler', 'event_trigger'))");
 		if (!settings->GetShowSystemObjects())
 			restrict += wxT(" AND nspname NOT LIKE E'pg\\\\_toast%' AND nspname NOT LIKE E'pg\\\\_temp%'");
 
@@ -424,11 +429,15 @@ int dlgFunction::Go(bool modal)
 		if (factory == &triggerFunctionFactory)
 		{
 			cbReturntype->Append(wxT("trigger"));
+			
+			if (connection->BackendMinimumVersion(9, 3))
+				cbReturntype->Append(wxT("event_trigger"));
+
 			cbReturntype->SetSelection(0);
-			cbReturntype->Disable();
 			lstArguments->Disable();
 			cbDatatype->Disable();
 			txtArgName->Disable();
+			txtArgDefVal->Disable();
 			sel = cbLanguage->FindString(wxT("c"));
 		}
 		else if (isProcedure)
@@ -900,12 +909,19 @@ wxString dlgFunction::GetSql()
 	{
 		if (isProcedure && GetArgs().IsEmpty())
 		{
-			sql += schema->GetQuotedPrefix() + qtIdent(GetName());
+			sql += schema->GetQuotedPrefix() + qtIdent(cbSchema->GetValue()) + wxT(".") + qtIdent(GetName());
 		}
 		else
 		{
-			sql += schema->GetQuotedPrefix() + qtIdent(GetName())
-			       + wxT("(") + GetArgs() + wxT(")");
+			// While creating trigger functions from the Event trigger, we may get the schema as null.
+			// Since, Event triggers are at database level.
+
+			if (schema)
+				sql += schema->GetQuotedPrefix() + qtIdent(cbSchema->GetValue()) + wxT(".") + qtIdent(GetName())
+      					+ wxT("(") + GetArgs() + wxT(")");
+			else
+				sql += qtIdent(cbSchema->GetValue()) + wxT(".") + qtIdent(GetName())
+				      + wxT("(") + GetArgs() + wxT(")");
 		}
 
 		if (!isProcedure)
@@ -978,8 +994,14 @@ wxString dlgFunction::GetSql()
 
 	if (function && !isProcedure)
 	{
-		name = schema->GetQuotedPrefix() + qtIdent(name)
-		       + wxT("(") + GetArgs(false, true) + wxT(")");
+		if (schema)
+			name = schema->GetQuotedPrefix() + qtIdent(name)
+		       		+ wxT("(") + GetArgs(false, true) + wxT(")");
+		// Event triggers do not have it's schema definition. Hence, getting the schema from the trigger function.
+
+		else
+			name = function->GetSchema()->GetQuotedPrefix() + qtIdent(name)
+				+ wxT("(") + GetArgs(false, true) + wxT(")");
 
 		AppendOwnerChange(sql, wxT("FUNCTION ") + name);
 		AppendSchemaChange(sql, wxT("FUNCTION ") + name);
diff --git a/pgadmin/dlg/dlgProperty.cpp b/pgadmin/dlg/dlgProperty.cpp
index 36fd75c..48eec80 100644
--- a/pgadmin/dlg/dlgProperty.cpp
+++ b/pgadmin/dlg/dlgProperty.cpp
@@ -41,6 +41,7 @@
 #include "dlg/dlgCheck.h"
 #include "dlg/dlgRule.h"
 #include "dlg/dlgTrigger.h"
+#include "dlg/dlgEventTrigger.h"
 #include "agent/dlgJob.h"
 #include "agent/dlgStep.h"
 #include "agent/dlgSchedule.h"
@@ -58,7 +59,7 @@
 #include "schema/pgTrigger.h"
 #include "schema/pgGroup.h"
 #include "schema/pgUser.h"
-
+#include "schema/pgEventTrigger.h"
 
 void dataType::SetOid(OID id)
 {
@@ -1125,6 +1126,7 @@ void dlgProperty::InitDialog(frmMain *frame, pgObject *node)
 		case PGM_PRIMARYKEY:
 		case PGM_UNIQUE:
 		case PGM_TRIGGER:
+		case PGM_EVENTTRIGGER:
 		case PGM_RULE: // Rules are technically table objects! Yeuch
 		case EDB_PACKAGEFUNCTION:
 		case EDB_PACKAGEVARIABLE:
diff --git a/pgadmin/dlg/module.mk b/pgadmin/dlg/module.mk
index f4255ec..144a210 100644
--- a/pgadmin/dlg/module.mk
+++ b/pgadmin/dlg/module.mk
@@ -21,6 +21,7 @@ pgadmin3_SOURCES += \
 	dlg/dlgConversion.cpp \
 	dlg/dlgDatabase.cpp \
 	dlg/dlgDomain.cpp \
+	dlg/dlgEventTrigger.cpp \
 	dlg/dlgExtension.cpp \
 	dlg/dlgEditGridOptions.cpp \
 	dlg/dlgFindReplace.cpp \
diff --git a/pgadmin/frm/frmMain.cpp b/pgadmin/frm/frmMain.cpp
index 86b3e6e..dfc4263 100644
--- a/pgadmin/frm/frmMain.cpp
+++ b/pgadmin/frm/frmMain.cpp
@@ -84,6 +84,7 @@
 #include "schema/pgForeignKey.h"
 #include "schema/pgCheck.h"
 #include "schema/pgDomain.h"
+#include "schema/pgEventTrigger.h"
 
 #if defined(HAVE_OPENSSL_CRYPTO) || defined(HAVE_GCRYPT)
 #include "utils/sshTunnel.h"
@@ -309,6 +310,7 @@ void frmMain::CreateMenus()
 	new executePgstatindexFactory(menuFactories, viewMenu, 0);
 	new enabledisableRuleFactory(menuFactories, toolsMenu, 0);
 	new enabledisableTriggerFactory(menuFactories, toolsMenu, 0);
+	new enabledisableEventTriggerFactory(menuFactories, toolsMenu, 0);
 	new disableAllTriggersFactory(menuFactories, toolsMenu, 0);
 	new enableAllTriggersFactory(menuFactories, toolsMenu, 0);
 	new validateForeignKeyFactory(menuFactories, toolsMenu, 0);
diff --git a/pgadmin/include/dlg/dlgEventTrigger.h b/pgadmin/include/dlg/dlgEventTrigger.h
new file mode 100644
index 0000000..948c26b
--- /dev/null
+++ b/pgadmin/include/dlg/dlgEventTrigger.h
@@ -0,0 +1,47 @@
+//////////////////////////////////////////////////////////////////////////
+//
+// pgAdmin III - PostgreSQL Tools
+//
+// Copyright (C) 2002 - 2013, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+// dlgEventTrigger.h - Event trigger property
+//
+//////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __DLG_EVENTTRIGGERPROP
+#define __DLG_EVENTTRIGGERPROP
+
+#include "dlg/dlgProperty.h"
+#include "ctl/ctlSeclabelPanel.h"
+
+class pgEventTrigger;
+
+class dlgEventTrigger : public dlgProperty
+{
+public:
+	dlgEventTrigger(pgaFactory *factory, frmMain *frame, pgEventTrigger *evntrig, pgObject *parent);
+	int Go(bool modal);
+
+	void CheckChange();
+	wxString GetSql();
+	pgObject *CreateObject(pgCollection *collection);
+	pgObject *GetObject();
+	bool CanDropCascaded() { return true; }
+
+private:
+	pgEventTrigger *eventTrigger;
+	ctlSeclabelPanel *seclabelPage;
+	void OnChange(wxCommandEvent &ev);
+	void OnChangeEnable(wxCommandEvent &ev);
+	virtual bool IsUpToDate();
+
+#ifdef __WXMAC__
+	void OnChangeSize(wxSizeEvent &ev);
+#endif
+	DECLARE_EVENT_TABLE()
+};
+
+
+#endif
\ No newline at end of file
diff --git a/pgadmin/include/dlg/module.mk b/pgadmin/include/dlg/module.mk
index d7d8870..08dd0ac 100644
--- a/pgadmin/include/dlg/module.mk
+++ b/pgadmin/include/dlg/module.mk
@@ -21,6 +21,7 @@ pgadmin3_SOURCES += \
 	include/dlg/dlgConversion.h \
 	include/dlg/dlgDatabase.h \
 	include/dlg/dlgDomain.h \
+	include/dlg/dlgEventTrigger.h \
 	include/dlg/dlgExtension.h \
 	include/dlg/dlgEditGridOptions.h \
 	include/dlg/dlgFindReplace.h \
diff --git a/pgadmin/include/schema/module.mk b/pgadmin/include/schema/module.mk
index 8c68314..a8440c0 100644
--- a/pgadmin/include/schema/module.mk
+++ b/pgadmin/include/schema/module.mk
@@ -27,6 +27,7 @@ pgadmin3_SOURCES += \
 	include/schema/pgDatabase.h \
 	include/schema/pgDatatype.h \
 	include/schema/pgDomain.h \
+	include/schema/pgEventTrigger.h \
 	include/schema/pgExtension.h \
 	include/schema/pgForeignDataWrapper.h \
 	include/schema/pgForeignKey.h \
diff --git a/pgadmin/include/schema/pgEventTrigger.h b/pgadmin/include/schema/pgEventTrigger.h
new file mode 100644
index 0000000..76d774c
--- /dev/null
+++ b/pgadmin/include/schema/pgEventTrigger.h
@@ -0,0 +1,153 @@
+//////////////////////////////////////////////////////////////////////////
+//
+// pgAdmin III - PostgreSQL Tools
+//
+// Copyright (C) 2002 - 2013, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+// pgEventTrigger.h PostgreSQL Event Trigger
+//
+//////////////////////////////////////////////////////////////////////////
+
+#ifndef PGEVENTTRIGGER_H
+#define PGEVENTTRIGGER_H
+
+#include "pgDatabase.h"
+
+class pgCollection;
+class pgFunction;
+
+class pgEventTriggerFactory : public pgDatabaseObjFactory
+{
+public:
+	pgEventTriggerFactory();
+	virtual dlgProperty *CreateDialog(frmMain *frame, pgObject *node, pgObject *parent);
+	virtual pgObject *CreateObjects(pgCollection *obj, ctlTree *browser, const wxString &restr = wxEmptyString);
+	virtual pgCollection *CreateCollection(pgObject *obj);
+	virtual ~pgEventTriggerFactory() {};
+
+	int GetClosedIconId()
+	{
+		return closedId;
+	}
+
+protected:
+	int closedId;
+};
+
+extern pgEventTriggerFactory eventTriggerFactory;
+
+class pgEventTrigger : public pgDatabaseObject
+{
+public:
+	pgEventTrigger(const wxString &newName = wxT(""));
+	~pgEventTrigger();
+	wxString GetTranslatedMessage(int kindOfMessage) const;
+	void ShowTreeDetail(ctlTree *browser, frmMain *form = 0, ctlListView *properties = 0, ctlSQLBox *sqlPane = 0);
+	bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
+	bool IsUpToDate();
+	wxString GetSql(ctlTree *browser);
+	pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);
+
+	int GetIconId();
+
+	wxString GetFunction() const
+	{
+		return function;
+	}
+	void iSetFunction(const wxString &s)
+	{
+		function = s ;
+	}
+	wxString GetWhen() const
+	{
+		return when;
+	}
+	void iSetWhen(const wxString &s)
+	{
+		when = s;
+	}
+	OID GetFunctionOid() const
+	{
+		return functionOid;
+	}
+	void iSetFunctionOid(const OID d)
+	{
+		functionOid = d;
+	}
+	OID GetSchemaOid() const
+	{
+		return schemaOid;
+	}
+	void iSetSchemaOid(const OID d)
+	{
+		schemaOid = d;
+	}
+	wxString GetSource() const
+	{
+		return source;
+	}
+	void iSetSource(const wxString &s)
+	{
+		source = s;
+	}
+	wxString GetLanguage() const
+	{
+		return language;
+	}
+	void iSetLanguage(const wxString &s)
+	{
+		language = s;
+	}
+	wxString GetEventName() const
+	{
+		return eventName;
+	}
+	wxString GetEnableStatus() const
+	{
+		return enableStatus;
+	}
+	void iSetEnableStatus(const wxString &s)
+	{
+		enableStatus = s;
+	}
+	void iSetEventName(const wxString &s)
+	{
+		eventName = s;
+	}
+	
+	bool GetEnabled() const
+	{
+		return enabled;
+	}
+	void iSetEnabled(const bool b)
+	{
+		enabled = b;
+	}
+	void SetEnabled(ctlTree *browser, const bool b);
+	void SetDirty();
+
+private:
+	wxString function, when, language, source, eventName, enableStatus;
+	OID functionOid, schemaOid;
+	bool enabled;
+	pgFunction *eventTriggerFunction;
+};
+
+class pgEventTriggerCollection : public pgDatabaseObjCollection
+{
+public:
+	pgEventTriggerCollection(pgaFactory *factory, pgDatabase *db);
+	wxString GetTranslatedMessage(int kindOfMessage) const;
+};
+
+class enabledisableEventTriggerFactory : public contextActionFactory
+{
+public:
+	enabledisableEventTriggerFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar);
+	wxWindow *StartDialog(frmMain *form, pgObject *obj);
+	bool CheckEnable(pgObject *obj);
+	bool CheckChecked(pgObject *obj);
+};
+
+#endif
\ No newline at end of file
diff --git a/pgadmin/include/utils/misc.h b/pgadmin/include/utils/misc.h
index 51a1102..370457e 100644
--- a/pgadmin/include/utils/misc.h
+++ b/pgadmin/include/utils/misc.h
@@ -248,7 +248,9 @@ enum
     SLM_SUBSCRIPTION,
     SLM_TABLE,
 
-    PGM_LANGUAGE
+    PGM_LANGUAGE,
+	PGM_EVENTTRIGGER
+
 };
 
 
diff --git a/pgadmin/pgAdmin3.vcxproj b/pgadmin/pgAdmin3.vcxproj
index 0414e5f..0d3ec33 100644
--- a/pgadmin/pgAdmin3.vcxproj
+++ b/pgadmin/pgAdmin3.vcxproj
@@ -828,6 +828,7 @@
     <ClCompile Include="dlg\dlgDatabase.cpp" />
     <ClCompile Include="dlg\dlgDomain.cpp" />
     <ClCompile Include="dlg\dlgEditGridOptions.cpp" />
+    <ClCompile Include="dlg\dlgEventTrigger.cpp" />
     <ClCompile Include="dlg\dlgExtension.cpp" />
     <ClCompile Include="dlg\dlgExtTable.cpp" />
     <ClCompile Include="dlg\dlgFindReplace.cpp" />
@@ -2190,6 +2191,7 @@
     <ClCompile Include="schema\pgDatabase.cpp" />
     <ClCompile Include="schema\pgDatatype.cpp" />
     <ClCompile Include="schema\pgDomain.cpp" />
+    <ClCompile Include="schema\pgEventTrigger.cpp" />
     <ClCompile Include="schema\pgExtension.cpp" />
     <ClCompile Include="schema\pgForeignDataWrapper.cpp" />
     <ClCompile Include="schema\pgForeignKey.cpp" />
@@ -2660,6 +2662,7 @@
     <None Include="ui\dlgDatabase.xrc" />
     <None Include="ui\dlgDirectDbg.xrc" />
     <None Include="ui\dlgDomain.xrc" />
+    <None Include="ui\dlgEventTrigger.xrc" />
     <None Include="ui\dlgEditGridOptions.xrc" />
     <None Include="ui\dlgExtension.xrc" />
     <None Include="ui\dlgExtTable.xrc" />
@@ -2868,6 +2871,7 @@
     <ClInclude Include="include\dlg\dlgConversion.h" />
     <ClInclude Include="include\dlg\dlgDatabase.h" />
     <ClInclude Include="include\dlg\dlgDomain.h" />
+    <ClInclude Include="include\dlg\dlgEventTrigger.h" />
     <ClInclude Include="include\dlg\dlgEditGridOptions.h" />
     <ClInclude Include="include\dlg\dlgExtension.h" />
     <ClInclude Include="include\dlg\dlgExtTable.h" />
@@ -2954,6 +2958,7 @@
     <ClInclude Include="include\schema\pgDatabase.h" />
     <ClInclude Include="include\schema\pgDatatype.h" />
     <ClInclude Include="include\schema\pgDomain.h" />
+    <ClInclude Include="include\schema\pgEventTrigger.h" />
     <ClInclude Include="include\schema\pgExtension.h" />
     <ClInclude Include="include\schema\pgForeignDataWrapper.h" />
     <ClInclude Include="include\schema\pgForeignKey.h" />
diff --git a/pgadmin/pgAdmin3.vcxproj.filters b/pgadmin/pgAdmin3.vcxproj.filters
index 42c731a..1f6f1f6 100644
--- a/pgadmin/pgAdmin3.vcxproj.filters
+++ b/pgadmin/pgAdmin3.vcxproj.filters
@@ -394,6 +394,9 @@
     <ClCompile Include="dlg\dlgDomain.cpp">
       <Filter>dlg</Filter>
     </ClCompile>
+    <ClCompile Include="dlg\dlgEventTrigger.cpp">
+      <Filter>dlg</Filter>
+    </ClCompile>
     <ClCompile Include="dlg\dlgEditGridOptions.cpp">
       <Filter>dlg</Filter>
     </ClCompile>
@@ -655,6 +658,9 @@
     <ClCompile Include="schema\pgDomain.cpp">
       <Filter>schema</Filter>
     </ClCompile>
+    <ClCompile Include="schema\pgEventTrigger.cpp">
+      <Filter>schema</Filter>
+    </ClCompile>
     <ClCompile Include="schema\pgExtension.cpp">
       <Filter>schema</Filter>
     </ClCompile>
@@ -1865,6 +1871,9 @@
     <None Include="ui\dlgDomain.xrc">
       <Filter>ui</Filter>
     </None>
+    <None Include="ui\dlgEventTrigger.xrc">
+      <Filter>ui</Filter>
+    </None>
     <None Include="ui\dlgEditGridOptions.xrc">
       <Filter>ui</Filter>
     </None>
@@ -2429,6 +2438,9 @@
     <ClInclude Include="include\dlg\dlgDomain.h">
       <Filter>include\dlg</Filter>
     </ClInclude>
+    <ClInclude Include="include\dlg\dlgEventTrigger.h">
+      <Filter>include\dlg</Filter>
+    </ClInclude>
     <ClInclude Include="include\dlg\dlgEditGridOptions.h">
       <Filter>include\dlg</Filter>
     </ClInclude>
@@ -2687,6 +2699,9 @@
     <ClInclude Include="include\schema\pgDomain.h">
       <Filter>include\schema</Filter>
     </ClInclude>
+    <ClInclude Include="include\schema\pgEventTrigger.h">
+      <Filter>include\schema</Filter>
+    </ClInclude>
     <ClInclude Include="include\schema\pgExtension.h">
       <Filter>include\schema</Filter>
     </ClInclude>
diff --git a/pgadmin/schema/module.mk b/pgadmin/schema/module.mk
index 9ad3005..cd4f790 100644
--- a/pgadmin/schema/module.mk
+++ b/pgadmin/schema/module.mk
@@ -27,6 +27,7 @@ pgadmin3_SOURCES += \
         schema/pgDatabase.cpp \
         schema/pgDatatype.cpp \
         schema/pgDomain.cpp \
+        schema/pgEventTrigger.cpp \
         schema/pgExtension.cpp \
         schema/pgForeignDataWrapper.cpp \
         schema/pgForeignKey.cpp \
diff --git a/pgadmin/schema/pgDatabase.cpp b/pgadmin/schema/pgDatabase.cpp
index 88ec2c4..8f8f12e 100644
--- a/pgadmin/schema/pgDatabase.cpp
+++ b/pgadmin/schema/pgDatabase.cpp
@@ -23,6 +23,7 @@
 #include "schema/pgForeignDataWrapper.h"
 #include "schema/pgLanguage.h"
 #include "schema/pgSchema.h"
+#include "schema/pgEventTrigger.h"
 #include "slony/slCluster.h"
 #include "frm/frmHint.h"
 #include "frm/frmReport.h"
@@ -628,6 +629,8 @@ void pgDatabase::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *pr
 					browser->AppendCollection(this, synonymFactory);
 			if (settings->GetDisplayOption(_("Schemas")))
 				browser->AppendCollection(this, schemaFactory);
+			if (connection()->BackendMinimumVersion(9, 3) && settings->GetDisplayOption(_("Event Triggers")))
+				browser->AppendCollection(this, eventTriggerFactory);
 			if (settings->GetDisplayOption(_("Slony-I Clusters")))
 				browser->AppendCollection(this, slClusterFactory);
 
diff --git a/pgadmin/schema/pgEventTrigger.cpp b/pgadmin/schema/pgEventTrigger.cpp
new file mode 100644
index 0000000..a3fed2a
--- /dev/null
+++ b/pgadmin/schema/pgEventTrigger.cpp
@@ -0,0 +1,347 @@
+//////////////////////////////////////////////////////////////////////////
+//
+// pgAdmin III - PostgreSQL Tools
+//
+// Copyright (C) 2002 - 2013, The pgAdmin Development Team
+// This software is released under the PostgreSQL Licence
+//
+// pgEventTrigger.cpp - EventTrigger class
+//
+//////////////////////////////////////////////////////////////////////////
+
+// wxWindows headers
+#include <wx/wx.h>
+
+// App headers
+#include "pgAdmin3.h"
+#include "frm/frmMain.h"
+#include "utils/misc.h"
+#include "schema/pgEventTrigger.h"
+#include "schema/pgFunction.h"
+#include "schema/pgSchema.h"
+
+pgEventTrigger::pgEventTrigger(const wxString &newName)
+	:pgDatabaseObject(eventTriggerFactory, newName)
+{
+	eventTriggerFunction = 0;
+}
+
+pgEventTrigger::~pgEventTrigger()
+{
+	if (!expandedKids && eventTriggerFunction)
+	{
+		// eventTriggerFunction wasn't appended to tree, so we need to delete it manually.
+		delete eventTriggerFunction;
+	}
+}
+
+pgCollection *pgEventTriggerFactory::CreateCollection(pgObject *obj)
+{
+	return new pgEventTriggerCollection(GetCollectionFactory(), (pgDatabase *)obj);
+}
+
+
+pgObject *pgEventTriggerFactory::CreateObjects(pgCollection *collection, ctlTree *browser, const wxString &restriction)
+{
+	wxString sql;
+	pgEventTrigger *eventTrigger = 0;
+
+	sql = wxT("SELECT e.oid, e.xmin, e.evtname AS name, REPLACE(e.evtevent, '_', ' ') AS eventname, pg_catalog.pg_get_userbyid(e.evtowner) AS eventowner, ")
+		  wxT(" CASE e.evtenabled WHEN 'O' THEN 'enabled' WHEN 'R' THEN 'replica' WHEN 'A' THEN 'always' WHEN 'D' THEN 'disabled' END AS enabled, ")
+		  wxT(" e.evtfoid AS eventfuncoid, e.evtfoid::regproc AS eventfunname, array_to_string(array(select quote_literal(x) from unnest(evttags) as t(x)), ', ') AS when, ")
+		  wxT(" pg_catalog.obj_description(e.oid, 'pg_event_trigger') AS comment, ")
+		  wxT(" p.prosrc AS source, p.pronamespace AS schemaoid, l.lanname AS language")
+		  wxT(" FROM pg_event_trigger e\n")
+		  wxT(" LEFT OUTER JOIN pg_proc p ON p.oid=e.evtfoid\n")
+		  wxT(" LEFT OUTER JOIN pg_language l ON l.oid=p.prolang\n")
+		  wxT(" WHERE 1=1 ");
+	
+	if (!restriction.IsEmpty())
+		sql += restriction + wxT("\n");
+	sql += wxT(" ORDER BY e.evtname ");
+
+	pgSet *eventTriggers = collection->GetDatabase()->ExecuteSet(sql);
+
+	if (eventTriggers)
+	{
+		while (!eventTriggers->Eof())
+		{
+			eventTrigger = new pgEventTrigger(eventTriggers->GetVal(wxT("name")));
+			eventTrigger->iSetDatabase(collection->GetDatabase());
+			eventTrigger->iSetOid(eventTriggers->GetOid(wxT("oid")));
+			eventTrigger->iSetXid(eventTriggers->GetOid(wxT("xmin")));
+			eventTrigger->iSetOwner(eventTriggers->GetVal(wxT("eventowner")));
+			eventTrigger->iSetFunctionOid(eventTriggers->GetOid(wxT("eventfuncoid")));
+			eventTrigger->iSetLanguage(eventTriggers->GetVal(wxT("language")));
+			eventTrigger->iSetSource(eventTriggers->GetVal(wxT("source")));
+			eventTrigger->iSetEventName(eventTriggers->GetVal(wxT("eventname")));
+			eventTrigger->iSetFunction(eventTriggers->GetVal(wxT("eventfunname")));
+			(eventTriggers->GetVal(wxT("enabled")) == wxT("disabled")) ? eventTrigger->iSetEnabled(false), eventTrigger->iSetEnableStatus(wxT("disabled"))
+				: eventTrigger->iSetEnabled(true), eventTrigger->iSetEnableStatus(eventTriggers->GetVal(wxT("enabled")));
+			eventTrigger->iSetComment(eventTriggers->GetVal(wxT("comment")));
+			eventTrigger->iSetWhen(eventTriggers->GetVal(wxT("when")));
+			eventTrigger->iSetSchemaOid(eventTriggers->GetOid(wxT("schemaoid")));
+
+			if (browser)
+			{
+				browser->AppendObject(collection, eventTrigger);
+				eventTriggers->MoveNext();
+			}
+			else
+				break;
+		}
+
+		delete eventTriggers;
+	}
+	return eventTrigger;
+}
+
+pgObject *pgEventTrigger::Refresh(ctlTree *browser, const wxTreeItemId item)
+{
+	pgObject *eventTrigger = 0;
+	pgCollection *coll = browser->GetParentCollection(item);
+
+	if (coll)
+	{
+		wxString restr = wxT(" \n AND e.evtname = ") + qtDbString(GetName());
+		eventTrigger = eventTriggerFactory.CreateObjects(coll, 0, restr);
+	}
+	return eventTrigger;
+}
+
+void pgEventTrigger::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane)
+{
+	if (!expandedKids && GetLanguage() != wxT("edbspl") && GetLanguage() != wxT("sql"))
+	{
+			if (browser)
+			{
+				// if no browser present, function will not be appended to tree
+				expandedKids = true;
+			}
+
+			if (eventTriggerFunction)
+				delete eventTriggerFunction;
+
+			wxString restr = wxT(" WHERE nsp.oid= ") + NumToStr(GetSchemaOid()) + wxT("::oid\n");
+			pgObject *evntTrgSchema;
+			evntTrgSchema = schemaFactory.CreateObjects((pgCollection *)browser->GetObject(browser->GetSelection()), 0, restr);
+			// append function here
+			eventTriggerFunction = functionFactory.AppendFunctions(this, (pgSchema *)evntTrgSchema, browser, wxT(" WHERE pr.oid = ") + NumToStr(functionOid) + wxT("::oid\n"));
+			if (eventTriggerFunction)
+			{
+				iSetFunction(eventTriggerFunction->GetQuotedFullIdentifier());
+			}
+	}
+
+	if (properties)
+	{
+		CreateListColumns(properties);
+
+		properties->AppendItem(_("Name"), GetName());
+		properties->AppendItem(_("OID"), GetOid());
+		properties->AppendItem(_("Event"), GetEventName());
+		properties->AppendItem(_("Function"), GetFunction());
+		properties->AppendItem(_("When?"), GetWhen());
+		properties->AppendItem(_("Enabled?"), GetEnabled() ? wxT("Yes") : wxT("No"));
+		properties->AppendItem(_("Comment"), firstLineOnly(GetComment()));
+	}
+
+}
+
+void pgEventTrigger::SetDirty()
+{
+	if (expandedKids)
+		eventTriggerFunction = 0;
+	pgObject::SetDirty();
+}
+
+wxString pgEventTrigger::GetSql(ctlTree *browser)
+{
+	if (sql.IsNull() && (this->eventTriggerFunction))
+	{	
+		sql = wxT("-- Event Trigger: ") + qtIdent(GetName()) + wxT(" on database ") 
+			+ qtIdent(((pgCollection *)browser->GetObject(browser->GetSelection()))->GetDatabase()->GetName()) + wxT("\n\n")
+			  + wxT("-- DROP EVENT TRIGGER ") + qtIdent(GetName()) + wxT(";\n\n");
+
+		sql += wxT("CREATE EVENT TRIGGER ") + qtIdent(GetName()) + wxT(" ON ")
+			+ GetEventName() + (GetWhen().IsEmpty() ? wxT("") : (wxT(" WHEN TAG IN (") + GetWhen() + wxT(")\n\n")));
+		
+		// Event trigger backend function don't accept any arguments.
+		// Hence, it's not required to get/set empty arguments.
+
+		sql += wxT(" EXECUTE PROCEDURE ") + eventTriggerFunction->GetQuotedFullIdentifier() + wxT("();\n\n");
+
+		if (!GetEnabled())
+		{
+			sql += wxT("ALTER EVENT TRIGGER ") + qtIdent(GetName()) + wxT(" DISABLE;\n");
+		}
+
+		if (!GetComment().IsEmpty())
+			sql += wxT("COMMENT ON EVENT TRIGGER ") + qtIdent(GetName()) + wxT(" IS ") + qtDbString(GetComment()) + wxT(";\n");
+	}
+	return sql;
+}
+
+wxString pgEventTrigger::GetTranslatedMessage(int kindOfMessage) const
+{
+	wxString message = wxEmptyString;
+	
+	switch (kindOfMessage)
+	{
+		case RETRIEVINGDETAILS:
+			message = _("Retrieving details on event trigger");
+			message += wxT(" ") + GetName();
+			break;
+		case REFRESHINGDETAILS:
+			message = _("Refreshing event trigger");
+			message += wxT(" ") + GetName();
+			break;
+		case DROPCASCADETITLE:
+			message = _("Drop event trigger cascaded?");
+			break;
+		case DROPTITLE:
+			message = _("Drop event trigger?");
+			break;
+		case DROPINCLUDINGDEPS:
+			message = wxString::Format(_("Are you sure you wish to drop event trigger \"%s\" including all objects that depend on it?"),
+			                           GetFullIdentifier().c_str());
+			break;
+		case DROPEXCLUDINGDEPS:
+			message = wxString::Format(_("Are you sure you wish to drop event trigger \"%s\"?"),
+			                           GetFullIdentifier().c_str());
+			break;
+		case PROPERTIESREPORT:
+			message = _("Event trigger properties report");
+			message += wxT(" - ") + GetName();
+			break;
+		case DDLREPORT:
+			message = _("Event trigger DDL report");
+			message += wxT(" - ") + GetName();
+			break;
+		case DDL:
+			message = _("Event trigger DDL");
+			break;
+	}
+	return message;
+}
+
+int pgEventTrigger::GetIconId()
+{
+	if (GetEnabled())
+		return eventTriggerFactory.GetIconId();
+	else
+		return eventTriggerFactory.GetClosedIconId();
+}
+
+
+wxString pgEventTriggerCollection::GetTranslatedMessage(int kindOfMessage) const
+{
+	wxString message = wxEmptyString;
+
+	switch (kindOfMessage)
+	{
+		case RETRIEVINGDETAILS:
+			message = _("Retrieving details on event triggers");
+			break;
+		case REFRESHINGDETAILS:
+			message = _("Refreshing event triggers");
+			break;
+		case OBJECTSLISTREPORT:
+			message = _("Event triggers list report");
+			break;
+	}
+	return message;
+}
+
+bool pgEventTrigger::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded)
+{
+	wxString sql = wxT("DROP EVENT TRIGGER ") + qtIdent(GetName());
+	if (cascaded)
+		sql += wxT(" CASCADE");
+	sql += wxT(" ;");
+	return GetDatabase()->ExecuteVoid(sql);
+}
+
+void pgEventTrigger::SetEnabled(ctlTree *browser, const bool b)
+{
+	if (qtIdent(GetName()).Len() > 0 && ((enabled && !b) || (!enabled && b)))
+	{
+		wxString sql = wxT("ALTER EVENT TRIGGER ") + qtIdent(GetName()) ;
+		if (enabled && !b)
+			sql += wxT(" DISABLE");
+		else if (!enabled && b)
+			sql += wxT(" ENABLE");
+		GetDatabase()->ExecuteVoid(sql);
+	}
+	enabled = b;
+	UpdateIcon(browser);
+}
+
+bool pgEventTrigger::IsUpToDate()
+{
+	wxString sql = wxT("SELECT xmin FROM pg_event_trigger WHERE oid = ") + this->GetOidStr();
+	if (!this->GetDatabase()->GetConnection() || this->GetDatabase()->ExecuteScalar(sql) != NumToStr(GetXid()))
+		return false;
+	else
+		return true;
+}
+
+/////////////////////////////
+
+pgEventTriggerCollection::pgEventTriggerCollection(pgaFactory *factory, pgDatabase *db)
+	: pgDatabaseObjCollection(factory, db)
+{
+
+}
+
+
+///////////////////////////////////////////////////
+
+#include "images/trigger.pngc"
+#include "images/triggerbad.pngc"
+#include "images/triggers.pngc"
+
+pgEventTriggerFactory::pgEventTriggerFactory()
+	: pgDatabaseObjFactory(__("Event Trigger"), __("New Event Trigger..."), __("Create a new Event Trigger."), trigger_png_img)
+{
+	metaType = PGM_EVENTTRIGGER;
+	closedId = addIcon(triggerbad_png_img);
+}
+
+pgEventTriggerFactory eventTriggerFactory;
+static pgaCollectionFactory cf(&eventTriggerFactory, __("Event Triggers"), triggers_png_img);
+
+enabledisableEventTriggerFactory::enabledisableEventTriggerFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar) : contextActionFactory(list)
+{
+	mnu->Append(id, _("Event trigger enabled?"), _("Enable or disable selected event trigger."), wxITEM_CHECK);
+}
+
+wxWindow *enabledisableEventTriggerFactory::StartDialog(frmMain *form, pgObject *obj)
+{
+	((pgEventTrigger *)obj)->SetEnabled(form->GetBrowser(), !((pgEventTrigger *)obj)->GetEnabled());
+	((pgEventTrigger *)obj)->SetDirty();
+
+	wxTreeItemId item = form->GetBrowser()->GetSelection();
+	if (obj == form->GetBrowser()->GetObject(item))
+	{
+		form->GetBrowser()->DeleteChildren(item);
+		obj->ShowTreeDetail(form->GetBrowser(), 0, form->GetProperties());
+		form->GetSqlPane()->SetReadOnly(false);
+		form->GetSqlPane()->SetText(((pgEventTrigger *)obj)->GetSql(form->GetBrowser()));
+		form->GetSqlPane()->SetReadOnly(true);
+	}
+	form->GetMenuFactories()->CheckMenu(obj, form->GetMenuBar(), (ctlMenuToolbar *)form->GetToolBar());
+
+	return 0;
+}
+
+bool enabledisableEventTriggerFactory::CheckEnable(pgObject *obj)
+{
+	return obj && obj->IsCreatedBy(eventTriggerFactory) && obj->CanEdit()
+	       && ((pgEventTrigger *)obj)->GetConnection()->BackendMinimumVersion(9, 3);
+}
+
+bool enabledisableEventTriggerFactory::CheckChecked(pgObject *obj)
+{
+	return obj && obj->IsCreatedBy(eventTriggerFactory) && ((pgEventTrigger *)obj)->GetEnabled();
+}
\ No newline at end of file
diff --git a/pgadmin/schema/pgFunction.cpp b/pgadmin/schema/pgFunction.cpp
index 7f34c98..bfbaee8 100644
--- a/pgadmin/schema/pgFunction.cpp
+++ b/pgadmin/schema/pgFunction.cpp
@@ -697,7 +697,7 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema,
 			// Create the new object
 			if (isProcedure)
 				function = new pgProcedure(schema, functions->GetVal(wxT("proname")));
-			else if (typname == wxT("\"trigger\"") || typname == wxT("trigger"))
+			else if (typname == wxT("\"trigger\"") || typname == wxT("trigger") || typname == wxT("event_trigger"))
 				function = new pgTriggerFunction(schema, functions->GetVal(wxT("proname")));
 			else
 				function = new pgFunction(schema, functions->GetVal(wxT("proname")));
@@ -1033,7 +1033,7 @@ pgObject *pgFunctionFactory::CreateObjects(pgCollection *collection, ctlTree *br
 {
 	wxString funcRestriction = wxT(
 	                               " WHERE proisagg = FALSE AND pronamespace = ") + NumToStr(collection->GetSchema()->GetOid())
-	                           + wxT("::oid\n   AND typname <> 'trigger'\n");
+	                           + wxT("::oid\n   AND typname NOT IN ('trigger', 'event_trigger') \n");
 
 	if (collection->GetConnection()->EdbMinimumVersion(8, 1))
 		funcRestriction += wxT("   AND NOT (lanname = 'edbspl' AND protype = '1')\n");
@@ -1054,8 +1054,15 @@ pgObject *pgTriggerFunctionFactory::CreateObjects(pgCollection *collection, ctlT
 {
 	wxString funcRestriction = wxT(
 	                               " WHERE proisagg = FALSE AND pronamespace = ") + NumToStr(collection->GetSchema()->GetOid())
-	                           + wxT("::oid\n   AND typname = 'trigger'\n")
-	                           + wxT("   AND lanname != 'edbspl'\n");
+	                           + wxT("::oid\n");
+	if(collection->GetConnection()->BackendMinimumVersion(9, 3))
+	{
+		funcRestriction += wxT("AND (typname IN ('trigger', 'event_trigger') \nAND lanname NOT IN ('edbspl', 'sql', 'internal'))");
+	}
+	else
+	{
+		funcRestriction += wxT("AND (typname = 'trigger'\n AND lanname != 'edbspl')");
+	}
 
 	// Get the Functions
 	return AppendFunctions(collection, collection->GetSchema(), browser, funcRestriction);
diff --git a/pgadmin/schema/pgObject.cpp b/pgadmin/schema/pgObject.cpp
index 5af08e1..de5b69a 100644
--- a/pgadmin/schema/pgObject.cpp
+++ b/pgadmin/schema/pgObject.cpp
@@ -260,7 +260,7 @@ void pgObject::ShowDependency(pgDatabase *db, ctlListView *list, const wxString
 		                       wxT("   AND ") + clsorder + wxT(" IN (\n")
 		                       wxT("   SELECT oid FROM pg_class\n")
 		                       wxT("    WHERE relname IN ('pg_class', 'pg_constraint', 'pg_conversion', 'pg_language', 'pg_proc',\n")
-		                       wxT("                      'pg_rewrite', 'pg_namespace', 'pg_trigger', 'pg_type', 'pg_attrdef'))\n")
+		                       wxT("                      'pg_rewrite', 'pg_namespace', 'pg_trigger', 'pg_type', 'pg_attrdef', 'pg_event_trigger'))\n")
 		                       wxT(" ORDER BY ") + clsorder + wxT(", cl.relkind"));
 
 		if (set)
@@ -682,7 +682,7 @@ void pgObject::ShowDependents(frmMain *form, ctlListView *referencedBy, const wx
 	               wxT("  LEFT JOIN pg_class clrw ON clrw.oid=rw.ev_class\n")
 	               wxT("  LEFT JOIN pg_namespace nsrw ON clrw.relnamespace=nsrw.oid\n")
 	               wxT("  LEFT JOIN pg_language la ON dep.objid=la.oid\n")
-	               wxT("  LEFT JOIN pg_namespace ns ON dep.objid=ns.oid\n")
+				   wxT("  LEFT JOIN pg_namespace ns ON dep.objid=ns.oid\n")
 	               wxT("  LEFT JOIN pg_attrdef ad ON ad.oid=dep.objid\n")
 	               + where, wxT("classid"));
 
diff --git a/pgadmin/ui/dlgEventTrigger.xrc b/pgadmin/ui/dlgEventTrigger.xrc
new file mode 100644
index 0000000..f0a021c
--- /dev/null
+++ b/pgadmin/ui/dlgEventTrigger.xrc
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<resource>
+	<object class="wxDialog" name="dlgEventTrigger">
+		<size>300,265d</size>
+		<style>wxCAPTION|wxDEFAULT_DIALOG_STYLE|wxSYSTEM_MENU|wxRESIZE_BORDER</style>
+		<object class="wxFlexGridSizer">
+			<cols>1</cols>
+			<growablecols>0</growablecols>
+			<growablerows>0</growablerows>
+			<object class="sizeritem">
+				<object class="wxNotebook" name="nbNotebook">
+					<size>320,240d</size>
+					<object class="notebookpage">
+						<object class="wxPanel" name="pnlProperties">
+							<object class="wxFlexGridSizer">
+								<cols>2</cols>
+								<vgap>5</vgap>
+								<hgap>5</hgap>
+								<growablecols>1</growablecols>
+								<growablerows>3</growablerows>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stName">
+										<label>Name</label>
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxTextCtrl" name="txtName" />
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stOID">
+										<label>OID</label>
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxTextCtrl" name="txtOID" />
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stOwner">
+										<label>Owner</label>
+									</object>
+									<flag>wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>5</border>
+									<option>1</option>
+								</object>
+								<object class="sizeritem">
+									<object class="ctlComboBox" name="cbOwner">
+										<style>wxCB_DROPDOWN</style>
+										<content />
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>5</border>
+									<option>1</option>
+								</object>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stComment">
+										<label>Comment</label>
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxTextCtrl" name="txtComment">
+										<size>405,313</size>
+										<style>wxTE_MULTILINE</style>
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+							</object>
+						</object>
+						<label>Properties</label>
+					</object>
+					<object class="notebookpage">
+						<object class="wxPanel" name="pnlDefinition">
+							<object class="wxFlexGridSizer">
+								<cols>2</cols>
+								<vgap>5</vgap>
+								<hgap>5</hgap>
+								<growablecols>1</growablecols>
+								<growablerows>4</growablerows>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stRow">
+										<label>Enable</label>
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxCheckBox" name="chkEnable">
+										<checked>1</checked>
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stConstraint">
+										<label>Enabled Status</label>
+									</object>
+									<flag>wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>5</border>
+									<option>1</option>
+								</object>
+								<object class="sizeritem">
+									<object class="wxRadioBox" name="rdbEnableStatus">
+										<label></label>
+										<content>
+											<item>ENABLE</item>
+											<item>REPLICA</item>
+											<item>ALWAYS</item>
+										</content>
+										<size>210,38</size>
+										<style>wxRA_SPECIFY_ROWS</style>
+									</object>
+									<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>5</border>
+									<option>1</option>
+								</object>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stFunction">
+										<label>Trigger function</label>
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="ctlComboBox" name="cbFunction">
+										<style>wxCB_DROPDOWN</style>
+										<content />
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stEvents">
+										<label>Events</label>
+									</object>
+									<flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxRadioBox" name="rdbEvents">
+										<label></label>
+										<content>
+											<item>DDL COMMAND START</item>
+											<item>DDL COMMAND END</item>
+											<item>SQL DROP</item>
+										</content>
+										<size>333,38</size>
+										<style>wxRA_SPECIFY_ROWS</style>
+									</object>
+									<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>5</border>
+									<option>1</option>
+								</object>
+								<object class="sizeritem">
+									<object class="wxStaticText" name="stWhen">
+										<label>When</label>
+									</object>
+									<flag>wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+								<object class="sizeritem">
+									<object class="wxTextCtrl" name="txtWhen">
+										<pos>-1,-1</pos>
+										<size>374,187</size>
+										<style>wxTE_MULTILINE</style>
+									</object>
+									<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+									<border>4</border>
+								</object>
+							</object>
+						</object>
+						<label>Definition</label>
+					</object>
+				</object>
+				<flag>wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
+				<border>3</border>
+			</object>
+			<object class="sizeritem">
+				<object class="wxFlexGridSizer">
+					<cols>4</cols>
+					<growablecols>1</growablecols>
+					<object class="sizeritem">
+						<object class="wxButton" name="wxID_HELP">
+							<label>Help</label>
+						</object>
+						<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+						<border>3</border>
+					</object>
+					<object class="spacer">
+						<flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+						<size>0,0d</size>
+					</object>
+					<object class="sizeritem">
+						<object class="wxButton" name="wxID_OK">
+							<label>&amp;OK</label>
+							<default>1</default>
+						</object>
+						<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+						<border>3</border>
+					</object>
+					<object class="sizeritem">
+						<object class="wxButton" name="wxID_CANCEL">
+							<label>&amp;Cancel</label>
+						</object>
+						<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+						<border>3</border>
+					</object>
+				</object>
+				<flag>wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+			</object>
+		</object>
+	</object>
+</resource>
diff --git a/pgadmin/ui/module.mk b/pgadmin/ui/module.mk
index d8c5cf5..3b07858 100644
--- a/pgadmin/ui/module.mk
+++ b/pgadmin/ui/module.mk
@@ -26,6 +26,7 @@ TMP_ui += \
 	ui/dlgDatabase.xrc \
 	ui/dlgDirectDbg.xrc \
 	ui/dlgDomain.xrc \
+	ui/dlgEventTrigger.xrc \
 	ui/dlgExtension.xrc \
 	ui/dlgEditGridOptions.xrc \
 	ui/dlgExtTable.xrc \
diff --git a/pgadmin/utils/sysSettings.cpp b/pgadmin/utils/sysSettings.cpp
index a511602..c6206f1 100644
--- a/pgadmin/utils/sysSettings.cpp
+++ b/pgadmin/utils/sysSettings.cpp
@@ -173,6 +173,8 @@ bool sysSettings::GetDisplayOption(const wxString &objtype, bool GetDefault)
 		engtype = wxT("Views");
 	else if (objtype == _("External Tables"))
 		engtype = wxT("External Tables");
+	else if (objtype == _("Event Triggers"))
+		engtype = wxT("Event Triggers");
 
 	// If we just want the default, return it.
 	if (GetDefault)
@@ -200,6 +202,7 @@ void sysSettings::SetDisplayOption(const wxString &objtype, bool display)
 	else if (objtype == _("User Mappings")) engtype = wxT("User mappings");
 	else if (objtype == _("Foreign Tables")) engtype = wxT("Foreign Tables");
 	else if (objtype == _("Languages")) engtype = wxT("Languages");
+	else if (objtype == _("Event Triggers")) engtype = wxT("Event Triggers");
 	else if (objtype == _("Extensions")) engtype = wxT("Extensions");
 	else if (objtype == _("Synonyms")) engtype = wxT("Synonyms");
 	else if (objtype == _("Schemas")) engtype = wxT("Schemas");
