diff --git a/pgadmin/frm/frmRestore.cpp b/pgadmin/frm/frmRestore.cpp
index 1657477..14d419c 100644
--- a/pgadmin/frm/frmRestore.cpp
+++ b/pgadmin/frm/frmRestore.cpp
@@ -569,8 +569,8 @@ void frmRestore::OnEndProcess(wxProcessEvent &ev)
 		wxTreeItemId root = ctvObjects->AddRoot(i18nbackup + wxT(" ") + txtFilename->GetValue());
 		wxString currentSchema = wxT("");
 		wxTreeItemId currentSchemaNode;
-		wxTreeItemId schemaNode, lastItem;
-		wxTreeItemIdValue schemaNodeData;
+		wxTreeItemId schemaNode, lastItem, extensionNode;
+		wxTreeItemIdValue schemaNodeData, extensionNodeData;
 		numberOfTOCItems = 0;
 
 		while (line.HasMoreTokens())
@@ -687,6 +687,70 @@ void frmRestore::OnEndProcess(wxProcessEvent &ev)
 				currentSchema = name;
 				lastItem = currentSchemaNode = ctvObjects->AppendItem(root, wxT("Schema ") + name, 1);
 			}
+			else if (type == wxT("EXTENSION") && (schema == wxT("-") || schema.IsEmpty()))
+			{
+				lastItem = ctvObjects->AppendItem(root,
+				                                  owner.IsEmpty() ? wxT("Extension ") + name :
+				                                  wxT("Extension ") + name + wxT("[") + _("owner") + wxT(": ") + owner + wxT("]"), 1);
+			}
+			else if (type == wxT("COMMENT") && name.StartsWith(wxT("EXTENSION ")))
+			{
+				wxString extension = name.SubString(10, name.Length());
+
+				if (ctvObjects->GetItemText(lastItem) == wxT("Extension ") + extension)
+				{
+					extensionNode = lastItem;
+				}
+				else
+				{
+					wxTreeItemId searchStartNode = root;
+
+					if (schema != wxT("-"))
+					{
+						searchStartNode = currentSchemaNode;
+						if (schema != currentSchema)
+						{
+							searchStartNode = ctvObjects->GetFirstChild(root, schemaNodeData);
+							bool found = false;
+							while (searchStartNode.IsOk() && !found)
+							{
+								if (ctvObjects->GetItemText(searchStartNode) == wxT("Schema ") + schema)
+									found = true;
+								else
+									searchStartNode = ctvObjects->GetNextChild(root, schemaNodeData);
+							}
+
+							// Found it?
+							if (!searchStartNode.IsOk())
+							{
+								searchStartNode = schemaNode;
+							}
+							else
+							{
+								searchStartNode = root;
+							}
+						}
+					}
+
+					extensionNode = ctvObjects->GetFirstChild(searchStartNode, extensionNodeData);
+					bool found = false;
+
+					while (extensionNode.IsOk() && !found)
+					{
+						if (ctvObjects->GetItemText(extensionNode) == wxT("Extension ") + extension)
+							found = true;
+						else
+							extensionNode = ctvObjects->GetNextChild(searchStartNode, schemaNodeData);
+					}
+				}
+
+				if (extensionNode.IsOk())
+				{
+					lastItem = ctvObjects->AppendItem(extensionNode,
+					                                  owner.IsEmpty() ? type + wxT(" Extension  ") + extension :
+					                                  type + wxT(" Extension ") + extension + wxT(" [") + _("owner") + wxT(": ") + owner + wxT("]"), 1);
+				}
+			}
 			else
 			{
 				if (schema != currentSchema)
@@ -715,7 +779,9 @@ void frmRestore::OnEndProcess(wxProcessEvent &ev)
 						wxLogError(_("Schema node not found for object ") + type + wxT(" ") + name + wxT(" [") + _("owner") + wxT(": ") + owner + wxT("]"));
 					}
 				}
-				lastItem = ctvObjects->AppendItem(currentSchemaNode, type + wxT(" ") + name + wxT(" [") + _("owner") + wxT(": ") + owner + wxT("]"), 1);
+				lastItem = ctvObjects->AppendItem(currentSchemaNode,
+				                                  owner.IsEmpty() ? type + wxT(" ") + name :
+				                                  type + wxT(" ") + name + wxT(" [") + _("owner") + wxT(": ") + owner + wxT("]"), 1);
 			}
 			ctvObjects->SetItemData(lastItem, new restoreTreeItemData(numberOfTOCItems, str));
 			numberOfTOCItems++;
