diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 51f68f2bab0af6a129fc97661eec038d304a7d3f..6d2309df3130ee33ee59fba87cf22eb664b26019 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -1483,12 +1483,16 @@ static int _tocEntryRequired(TocEntry* te, RestoreOptions *ropt)
 		}
 	}
 
+	/* Special Case: If 'SEQUENCE SET' and schemaOnly, then not needed */
+	if (ropt->schemaOnly && (strcmp(te->desc, "SEQUENCE SET") == 0) )
+		return 0;
+
     /* Mask it if we only want schema */
     if (ropt->schemaOnly)
 		res = res & 1;
 
     /* Mask it we only want data */
-    if (ropt->dataOnly) 
+    if (ropt->dataOnly && (strcmp(te->desc, "SEQUENCE SET") != 0) ) 
        res = res & 2;
 
     /* Mask it if we don't have a schema contribition */
diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h
index d6e32411929aa6665055a0e526b6317d318456f2..275f9eba2e99fff423932081633e2fbb17c02c43 100644
--- a/src/bin/pg_dump/pg_backup_archiver.h
+++ b/src/bin/pg_dump/pg_backup_archiver.h
@@ -62,7 +62,7 @@ typedef z_stream *z_streamp;
 
 #define K_VERS_MAJOR 1
 #define K_VERS_MINOR 4 
-#define K_VERS_REV 16 
+#define K_VERS_REV 17 
 
 /* Data block types */
 #define BLK_DATA 1
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 24ef289135feba74990d0611fefd6acec537ef89..83fd0e6de599be19317d988d2363495196533948 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -22,7 +22,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.169 2000/10/10 13:55:28 pjw Exp $
+ *	  $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.170 2000/10/13 00:43:31 pjw Exp $
  *
  * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
  *
@@ -992,6 +992,7 @@ main(int argc, char **argv)
 	MoveToEnd(g_fout, "INDEX");
 	MoveToEnd(g_fout, "TRIGGER");
 	MoveToEnd(g_fout, "RULE");
+	MoveToEnd(g_fout, "SEQUENCE SET");
 
 	if (plainText) 
 	{
@@ -4015,20 +4016,32 @@ dumpSequence(Archive *fout, TableInfo tbinfo)
 	resetPQExpBuffer(delqry);
 	appendPQExpBuffer(delqry, "DROP SEQUENCE %s;\n", fmtId(tbinfo.relname, force_quotes));
 
+	/*
+	 * The logic we use for restoring sequences is as follows:
+	 *		- 	Add a basic CREATE SEQUENCE statement 
+	 *			(use last_val for start if called == 'f', else use min_val for start_val).
+	 *		-	Add a 'SETVAL(seq, last_val, iscalled)' at restore-time iff we load data
+	 */
 	resetPQExpBuffer(query);
 	appendPQExpBuffer(query,
 				  "CREATE SEQUENCE %s start %d increment %d maxvalue %d "
 					  "minvalue %d  cache %d %s;\n",
-					fmtId(tbinfo.relname, force_quotes), last, incby, maxv, minv, cache,
+					fmtId(tbinfo.relname, force_quotes), 
+					  (called == 't') ? minv : last,
+					  incby, maxv, minv, cache,
 					  (cycled == 't') ? "cycle" : "");
 
-	if (called != 'f') {
-		appendPQExpBuffer(query, "SELECT nextval ('%s');\n", fmtId(tbinfo.relname, force_quotes));
-	}
-
 	ArchiveEntry(fout, tbinfo.oid, fmtId(tbinfo.relname, force_quotes), "SEQUENCE", NULL,
 					query->data, delqry->data, "", tbinfo.usename, NULL, NULL);
 
+
+	resetPQExpBuffer(query);
+	appendPQExpBuffer(query, "SELECT setval ('%s', %d, '%c');\n", 
+						fmtId(tbinfo.relname, force_quotes), last, called);
+
+	ArchiveEntry(fout, tbinfo.oid, fmtId(tbinfo.relname, force_quotes), "SEQUENCE SET", NULL,
+					query->data, "" /* Del */, "", "", NULL, NULL);
+
 	/* Dump Sequence Comments */
 
 	resetPQExpBuffer(query);
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index dd10ff54808d4bc241d6a4397a215c9c06495f26..12a10a51b58c77d24550db6f07e4b386db501842 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -292,7 +292,7 @@ int main(int argc, char **argv)
 		MoveToEnd(AH, "INDEX");
 		MoveToEnd(AH, "TRIGGER");
 		MoveToEnd(AH, "RULE");
-		MoveToEnd(AH, "ACL");
+		MoveToEnd(AH, "SEQUENCE SET");
     }
 
 	/* Database MUST be at start */