diff --git a/pgadmin/ctl/ctlSeclabelPanel.cpp b/pgadmin/ctl/ctlSeclabelPanel.cpp
index a5be9a1..0c4a669 100644
--- a/pgadmin/ctl/ctlSeclabelPanel.cpp
+++ b/pgadmin/ctl/ctlSeclabelPanel.cpp
@@ -29,6 +29,8 @@ BEGIN_EVENT_TABLE(ctlSeclabelPanel, wxPanel)
 	EVT_LIST_ITEM_SELECTED(CTL_LBSECLABEL,  ctlSeclabelPanel::OnSeclabelSelChange)
 	EVT_BUTTON(CTL_ADDSECLABEL,             ctlSeclabelPanel::OnAddSeclabel)
 	EVT_BUTTON(CTL_DELSECLABEL,             ctlSeclabelPanel::OnDelSeclabel)
+	EVT_TEXT(CTL_PROVIDER,			        ctlSeclabelPanel::OnChange)
+	EVT_TEXT(CTL_SECLABEL,			        ctlSeclabelPanel::OnChange)
 END_EVENT_TABLE();
 
 DEFINE_LOCAL_EVENT_TYPE(EVT_SECLABELPANEL_CHANGE)
@@ -84,6 +86,8 @@ ctlSeclabelPanel::ctlSeclabelPanel(wxNotebook *nb)
 	// compute sizes
 	this->SetSizer(sizer0);
 	sizer0->Fit(this);
+
+	btnAddSeclabel->Enable(false);
 }
 
 
@@ -101,7 +105,6 @@ void ctlSeclabelPanel::Disable()
 	txtSeclabel->Disable();
 }
 
-
 void ctlSeclabelPanel::SetConnection(pgConn *conn)
 {
 	connection = conn;
@@ -170,6 +173,12 @@ void ctlSeclabelPanel::OnAddSeclabel(wxCommandEvent &ev)
 	ev.Skip();
 }
 
+void ctlSeclabelPanel::OnChange(wxCommandEvent &event)
+{
+	wxString provider = txtProvider->GetValue().Trim(true).Trim(false);
+	wxString label = txtSeclabel->GetValue().Trim(true).Trim(false);
+	btnAddSeclabel->Enable(!provider.IsEmpty() && !label.IsEmpty());
+}
 
 void ctlSeclabelPanel::OnSeclabelSelChange(wxListEvent &ev)
 {
@@ -180,6 +189,14 @@ void ctlSeclabelPanel::OnSeclabelSelChange(wxListEvent &ev)
 	txtSeclabel->SetValue(lbSeclabels->GetText(lbSeclabels->GetSelection(), 1));
 }
 
+void ctlSeclabelPanel::GetCurrentProviderLabelArray(wxArrayString& secLabels)
+{
+	for(int indexList = 0; indexList < lbSeclabels->GetItemCount(); indexList++)
+	{
+		secLabels.Add(lbSeclabels->GetText(indexList));
+		secLabels.Add(lbSeclabels->GetText(indexList,1));
+	}
+}
 
 wxString ctlSeclabelPanel::GetSqlForSecLabels(wxString objecttype, wxString objectname)
 {
@@ -270,4 +287,4 @@ wxString ctlSeclabelPanel::GetSqlForSecLabels(wxString objecttype, wxString obje
 	}
 
 	return sql;
-}
+}
\ No newline at end of file
diff --git a/pgadmin/ctl/ctlSecurityPanel.cpp b/pgadmin/ctl/ctlSecurityPanel.cpp
index 8c46e12..5a7905c 100644
--- a/pgadmin/ctl/ctlSecurityPanel.cpp
+++ b/pgadmin/ctl/ctlSecurityPanel.cpp
@@ -162,6 +162,26 @@ void ctlSecurityPanel::SetConnection(pgConn *conn)
 		stGroup->SetLabel(_("Role"));
 }
 
+wxString ctlSecurityPanel::GetUserPrivileges()
+{
+	wxString strPrivilages;
+	int cnt = lbPrivileges->GetItemCount();
+	int pos;
+	if(cnt > 0)
+	{
+		strPrivilages += wxT("{");
+		for (pos = 0 ; pos < cnt ; pos++)
+		{
+			wxString name = lbPrivileges->GetText(pos);
+			wxString value = lbPrivileges->GetText(pos, 1);
+
+			strPrivilages += (pos == 0) ? name + wxT("=") + value : wxT(",") + name + wxT("=") + value;
+			strPrivilages += wxT("/") + connection->GetUser();
+		}
+		strPrivilages += wxT("}");
+	}
+	return strPrivilages;
+}
 
 wxString ctlSecurityPanel::GetGrant(const wxString &allPattern, const wxString &grantObject, wxArrayString *currentAcl, wxString column)
 {
diff --git a/pgadmin/dlg/dlgColumn.cpp b/pgadmin/dlg/dlgColumn.cpp
index 7df7930..9224072 100644
--- a/pgadmin/dlg/dlgColumn.cpp
+++ b/pgadmin/dlg/dlgColumn.cpp
@@ -112,7 +112,35 @@ dlgColumn::dlgColumn(pgaFactory *f, frmMain *frame, pgColumn *node, pgTable *par
 			delete setGrp;
 		}
 
-		if (node)
+		SetSecurityPage(node);
+	}
+	else
+		securityPage->Disable();
+
+	seclabelPage = new ctlSeclabelPanel(nbNotebook);
+}
+
+
+#ifdef __WXMAC__
+void dlgColumn::OnChangeSize(wxSizeEvent &ev)
+{
+	securityPage->lbPrivileges->SetSize(wxDefaultCoord, wxDefaultCoord,
+	                                    ev.GetSize().GetWidth(), ev.GetSize().GetHeight() - 550);
+	if (GetAutoLayout())
+	{
+		Layout();
+	}
+}
+#endif
+
+pgObject *dlgColumn::GetObject()
+{
+	return column;
+}
+
+void dlgColumn::SetSecurityPage(const pgColumn* node)
+{
+	if (node)
 		{
 			wxString strAcl = node->GetAcl();
 			if (!strAcl.IsEmpty())
@@ -177,32 +205,7 @@ dlgColumn::dlgColumn(pgaFactory *f, frmMain *frame, pgColumn *node, pgTable *par
 				}
 			}
 		}
-	}
-	else
-		securityPage->Disable();
-
-	seclabelPage = new ctlSeclabelPanel(nbNotebook);
-}
-
-
-#ifdef __WXMAC__
-void dlgColumn::OnChangeSize(wxSizeEvent &ev)
-{
-	securityPage->lbPrivileges->SetSize(wxDefaultCoord, wxDefaultCoord,
-	                                    ev.GetSize().GetWidth(), ev.GetSize().GetHeight() - 550);
-	if (GetAutoLayout())
-	{
-		Layout();
-	}
 }
-#endif
-
-pgObject *dlgColumn::GetObject()
-{
-	return column;
-}
-
-
 int dlgColumn::Go(bool modal)
 {
 	if (connection->BackendMinimumVersion(8, 4))
@@ -630,6 +633,40 @@ void dlgColumn::ApplyChangesToObj(pgColumn *changedCol)
 	{
 		changedCol->GetVariables().Add(lstVariables->GetText(pos) + wxT("=") + lstVariables->GetText(pos, 1));
 	}
+
+	if(securityPage && connection->BackendMinimumVersion(8, 4))
+	{
+		changedCol->iSetAcl(securityPage->GetUserPrivileges());
+	}
+
+	if(seclabelPage && connection->BackendMinimumVersion(9, 1))
+	{
+		wxArrayString secLabels;
+		wxString providers;
+		wxString labels;
+		seclabelPage->GetCurrentProviderLabelArray(secLabels);
+
+		if(!secLabels.IsEmpty())
+		{
+			for(size_t pos = 0; pos < secLabels.Count(); pos += 2)
+			{
+				if(pos == 0)
+				{
+					providers += wxT("{") + secLabels.Item(pos); 
+					labels += wxT("{") + secLabels.Item(pos+1);
+				}
+				else
+				{
+					providers += wxT(",") + secLabels.Item(pos);
+					labels += wxT(",") + secLabels.Item(pos+1);
+				}
+			}
+			providers += wxT("}");
+			labels += wxT("}");
+		}
+		changedCol->iSetProviders(providers);
+		changedCol->iSetLabels(labels);
+	}
 }
 
 
@@ -655,8 +692,45 @@ void dlgColumn::ApplyChangesToDlg()
 		wxString item = changedColumn->GetVariables().Item(i);
 		lstVariables->AppendItem(0, item.BeforeFirst('='), item.AfterFirst('='));
 	}
+
+	SetSecurityPage(changedColumn);
+
+	if (connection->BackendMinimumVersion(9, 1))
+	{
+		wxArrayString seclabels = changedColumn->GetProviderLabelArray();
+		if (seclabels.GetCount() > 0)
+		{
+			for (unsigned int index = 0 ; index < seclabels.GetCount() - 1 ; index += 2)
+			{
+				seclabelPage->lbSeclabels->AppendItem(seclabels.Item(index),
+				                        seclabels.Item(index + 1));
+			}
+		}
+	}
+	else
+		seclabelPage->Disable();
+}
+
+void dlgColumn::GetVariableList(wxArrayString& variableList)
+{
+	wxString name;
+	wxString value;
+	for(int pos = 0; pos < lstVariables->GetItemCount(); pos++)
+	{
+		name = lstVariables->GetText(pos);
+		value = lstVariables->GetText(pos, 1);
+		variableList.Add(name + wxT("=") + value);
+	}
 }
 
+void dlgColumn::GetSecLabelList(wxArrayString& secLabelList)
+{
+	if (seclabelPage && connection->BackendMinimumVersion(9, 1))
+		seclabelPage->GetCurrentProviderLabelArray(secLabelList);
+			/*return seclabelPage->GetSqlForSecLabels(wxT("COLUMN"), tableName
+			+ wxT(".") + qtIdent(GetName()));*/
+
+}
 
 wxString dlgColumn::GetDefinition()
 {
diff --git a/pgadmin/dlg/dlgTable.cpp b/pgadmin/dlg/dlgTable.cpp
index 9f7a565..f785efc 100644
--- a/pgadmin/dlg/dlgTable.cpp
+++ b/pgadmin/dlg/dlgTable.cpp
@@ -200,7 +200,10 @@ dlgTable::dlgTable(pgaFactory *f, frmMain *frame, pgTable *node, pgSchema *sch)
 	lstColumns->AddColumn(_("Column type oid"), 0);
 	// ... pgColumn* handle (used for changed columns)
 	lstColumns->AddColumn(_("Changed column"), 0);
-
+	// ... pgColumn* handle (used for variable list)
+	lstColumns->AddColumn(_("Variable List"), 0);
+	// ... pgColumn* handle (used for security label list)
+	lstColumns->AddColumn(_("Security Label List"), 0);
 	lstConstraints->CreateColumns(0, _("Constraint name"), _("Definition"), 90);
 }
 
@@ -1416,7 +1419,6 @@ wxString dlgTable::GetSql()
 		AppendOwnerNew(sql, wxT("TABLE ") + tabname);
 
 		// Extra column info
-
 		// Statistics
 		for (pos = 0 ; pos < lstColumns->GetItemCount() ; pos++)
 		{
@@ -1428,6 +1430,34 @@ wxString dlgTable::GetSql()
 		}
 	}
 
+	//variables
+	for (pos = 0; pos < lstColumns->GetItemCount(); pos++)
+	{
+		wxStringTokenizer varToken(lstColumns->GetText(pos,COL_VARIABLE_LIST),wxT(","));
+		while (varToken.HasMoreTokens())
+		{
+			sql += wxT("ALTER TABLE ") + tabname
+				+ wxT("\n  ALTER COLUMN ")
+				+ qtIdent(lstColumns->GetText(pos, COL_NAME))
+				+ wxT(" \nSET (");
+			sql += varToken.GetNextToken() + wxT(");\n");
+		}
+	}
+
+	//security labels
+	for (pos = 0; pos < lstColumns->GetItemCount(); pos++)
+	{
+		wxStringTokenizer varToken(lstColumns->GetText(pos,COL_SECLABEL_LIST),wxT(","));
+		wxString providerLabel = wxEmptyString;
+		while (varToken.HasMoreTokens())
+		{
+			providerLabel = varToken.GetNextToken();
+			sql += wxT("SECURITY LABEL FOR ") + varToken.GetNextToken()
+				+ wxT("\n  ON COLUMN ") + qtIdent(lstColumns->GetText(pos, COL_NAME))
+				+ wxT("\n  IS ") + varToken.GetNextToken() + wxT(";\n");
+		}
+	}
+
 	// Comments
 	for (pos = 0 ; pos < lstColumns->GetItemCount() ; pos++)
 	{
@@ -1801,16 +1831,16 @@ void dlgTable::OnChangeCol(wxCommandEvent &ev)
 	col.SetChangedCol(column2);
 	if (col.Go(true) != wxID_CANCEL)
 	{
-		delete column2;
-		pgColumn *changedColumn = new pgColumn(* column);
-		col.ApplyChangesToObj(changedColumn);
+		if(column2 == NULL)
+			column2 = new pgColumn(*column);
 
+		col.ApplyChangesToObj(column2);
 		lstColumns->SetItem(pos, COL_NAME, col.GetName());
 		lstColumns->SetItem(pos, COL_DEFINITION, col.GetDefinition());
 		lstColumns->SetItem(pos, COL_SQLCHANGE, col.GetSql());
 		lstColumns->SetItem(pos, COL_STATISTICS, col.GetStatistics());
 		lstColumns->SetItem(pos, COL_COMMENTS, col.GetComment());
-		lstColumns->SetItem(pos, COL_CHANGEDCOL, NumToStr((long)changedColumn));
+		lstColumns->SetItem(pos, COL_CHANGEDCOL, NumToStr((long)column2));
 	}
 	CheckChange();
 }
@@ -1847,6 +1877,36 @@ void dlgTable::OnAddCol(wxCommandEvent &ev)
 		lstColumns->SetItem(pos, COL_STATISTICS, col.GetStatistics());
 		lstColumns->SetItem(pos, COL_COMMENTS, col.GetComment());
 		lstColumns->SetItem(pos, COL_TYPEOID, col.GetTypeOid());
+
+		wxString perColumnListString = wxEmptyString;
+
+		//getting the variable list for each column
+		wxArrayString perColumnList;
+		col.GetVariableList(perColumnList);
+		for(size_t index = 0; index < perColumnList.GetCount(); index++)
+		{
+			if (index == 0)
+				perColumnListString	= perColumnList.Item(index);
+			else
+				perColumnListString += wxT(",") + perColumnList.Item(index);
+		}
+		lstColumns->SetItem(pos, COL_VARIABLE_LIST, perColumnListString);
+
+		//getting the security labels list for each column
+		if(connection->BackendMinimumVersion(9, 1))
+		{
+			wxString secLabelListString = wxEmptyString;
+			wxArrayString secLabelList;
+			col.GetSecLabelList(secLabelList);
+			for(size_t index = 0; index < secLabelList.GetCount(); index++)
+			{
+				if (index == 0)
+					secLabelListString	= secLabelList.Item(index);
+				else
+					secLabelListString += wxT(",") + secLabelList.Item(index);
+			}
+			lstColumns->SetItem(pos, COL_SECLABEL_LIST, secLabelListString);
+		}
 	}
 
 	CheckChange();
@@ -1862,7 +1922,7 @@ void dlgTable::OnRemoveCol(wxCommandEvent &ev)
 	}
 
 	lstColumns->DeleteCurrentItem();
-
+	btnChangeCol->Disable();
 	btnRemoveCol->Disable();
 
 	CheckChange();
diff --git a/pgadmin/include/ctl/ctlSeclabelPanel.h b/pgadmin/include/ctl/ctlSeclabelPanel.h
index 4bfa0fa..82a293f 100644
--- a/pgadmin/include/ctl/ctlSeclabelPanel.h
+++ b/pgadmin/include/ctl/ctlSeclabelPanel.h
@@ -42,7 +42,7 @@ public:
 	void SetObject(pgObject *obj);
 	void Disable();
 	wxString GetSqlForSecLabels(wxString objecttype = wxEmptyString, wxString objectname = wxEmptyString);
-
+	void GetCurrentProviderLabelArray(wxArrayString& secLabels);
 protected:
 	wxNotebook *nbNotebook;
 	pgConn *connection;
@@ -56,7 +56,7 @@ protected:
 	void OnDelSeclabel(wxCommandEvent &ev);
 	void OnProviderChange(wxCommandEvent &ev);
 	void OnSeclabelChange(wxCommandEvent &ev);
-
+	void OnChange(wxCommandEvent &ev);
 	DECLARE_EVENT_TABLE()
 };
 
diff --git a/pgadmin/include/ctl/ctlSecurityPanel.h b/pgadmin/include/ctl/ctlSecurityPanel.h
index 07f3253..353566b 100644
--- a/pgadmin/include/ctl/ctlSecurityPanel.h
+++ b/pgadmin/include/ctl/ctlSecurityPanel.h
@@ -51,6 +51,7 @@ public:
 	 *  Except column level privileges, column will be always an empty string in any case
 	 */
 	wxString GetGrant(const wxString &allPattern, const wxString &grantObject, wxArrayString *currentAcl = 0, wxString column = wxEmptyString);
+	wxString GetUserPrivileges();
 	bool DisablePrivilege(const wxString &priv);
 protected:
 	wxNotebook *nbNotebook;
diff --git a/pgadmin/include/dlg/dlgColumn.h b/pgadmin/include/dlg/dlgColumn.h
index 6b5bfd8..3b2bc59 100644
--- a/pgadmin/include/dlg/dlgColumn.h
+++ b/pgadmin/include/dlg/dlgColumn.h
@@ -23,15 +23,18 @@ class dlgColumn : public dlgTypeProperty
 {
 public:
 	dlgColumn(pgaFactory *factory, frmMain *frame, pgColumn *column, pgTable *parentNode);
-
+	void SetSecurityPage(const pgColumn* node);
 	void CheckChange();
 	void SetChangedCol(pgColumn *changedCol);
 	void ApplyChangesToObj(pgColumn *changedCol);
 	void ApplyChangesToDlg();
+	void SetSecurityPage();
 	wxString GetSql();
 	pgObject *CreateObject(pgCollection *collection);
 	pgObject *GetObject();
 	wxString GetDefinition();
+	void GetVariableList(wxArrayString& );
+	void GetSecLabelList(wxArrayString& );
 	wxString GetPreviousDefinition()
 	{
 		return previousDefinition;
diff --git a/pgadmin/include/dlg/dlgTable.h b/pgadmin/include/dlg/dlgTable.h
index f436fda..08bf79f 100644
--- a/pgadmin/include/dlg/dlgTable.h
+++ b/pgadmin/include/dlg/dlgTable.h
@@ -26,7 +26,9 @@ enum
     COL_STATISTICS,
     COL_PGCOLUMN,
     COL_TYPEOID,
-    COL_CHANGEDCOL
+    COL_CHANGEDCOL,
+    COL_VARIABLE_LIST,
+    COL_SECLABEL_LIST
 };
 
 enum
@@ -121,7 +123,7 @@ private:
 	         toastTableFreezeMinAge, toastTableFreezeMaxAge,
 	         toastTableFreezeTableAge;
 	wxString toastTableVacFactor;
-
+	wxString secLabelColumnSql;
 	DECLARE_EVENT_TABLE()
 };
 
