diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
new file mode 100644
index aecede1..44e5eab
*** a/src/backend/access/transam/xlog.c
--- b/src/backend/access/transam/xlog.c
*************** int			wal_level = WAL_LEVEL_MINIMAL;
*** 100,105 ****
--- 100,106 ----
  int			CommitDelay = 0;	/* precommit delay in microseconds */
  int			CommitSiblings = 5; /* # concurrent xacts needed to sleep */
  int			wal_retrieve_retry_interval = 5000;
+ int			JJNOWAL=0;
  
  #ifdef WAL_DEBUG
  bool		XLOG_DEBUG = false;
*************** XLogInsertRecord(XLogRecData *rdata, XLo
*** 904,909 ****
--- 905,916 ----
  	XLogRecPtr	StartPos;
  	XLogRecPtr	EndPos;
  
+ 	if (JJNOWAL && (rechdr->xl_rmid != RM_XLOG_ID) ) {  // Don't actually insert any XLOG, except the ones needed during boot strap
+ 		EndPos = SizeOfXLogLongPHD;     /* start of 1st chkpt record */
+ 		return EndPos;
+ 	};
+ 
+ 
  	/* we assume that all of the record header is in the first chunk */
  	Assert(rdata->len >= SizeOfXLogRecord);
  
*************** CreateCheckPoint(int flags)
*** 8268,8274 ****
  				  CHECKPOINT_FORCE)) == 0)
  	{
  		if (prevPtr == ControlFile->checkPointCopy.redo &&
! 			prevPtr / XLOG_SEG_SIZE == curInsert / XLOG_SEG_SIZE)
  		{
  			WALInsertLockRelease();
  			LWLockRelease(CheckpointLock);
--- 8275,8281 ----
  				  CHECKPOINT_FORCE)) == 0)
  	{
  		if (prevPtr == ControlFile->checkPointCopy.redo &&
! 			prevPtr / XLOG_SEG_SIZE == curInsert / XLOG_SEG_SIZE && !JJNOWAL)
  		{
  			WALInsertLockRelease();
  			LWLockRelease(CheckpointLock);
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
new file mode 100644
index 6ac5184..dd9c0a1
*** a/src/backend/utils/misc/guc.c
--- b/src/backend/utils/misc/guc.c
*************** extern char *default_tablespace;
*** 111,116 ****
--- 111,117 ----
  extern char *temp_tablespaces;
  extern bool ignore_checksum_failure;
  extern bool synchronize_seqscans;
+ extern int	JJNOWAL;
  
  #ifdef TRACE_SYNCSCAN
  extern bool trace_syncscan;
*************** static struct config_int ConfigureNamesI
*** 1744,1749 ****
--- 1745,1759 ----
  		0, 0, INT_MAX,
  		NULL, NULL, NULL
  	},
+ 
+ 	{
+ 		{"JJNOWAL", PGC_USERSET, WAL_SETTINGS,
+ 			gettext_noop("turn of WAL logging, except for checkpoint/shutdown records"),
+ 			NULL
+ 		},
+ 		&JJNOWAL,
+ 		0, 0, 100000, NULL, NULL
+ 	},
  	{
  		{"geqo_generations", PGC_USERSET, QUERY_TUNING_GEQO,
  			gettext_noop("GEQO: number of iterations of the algorithm."),
