diff --git a/ch32v003fun/ch32v003fun.c b/ch32v003fun/ch32v003fun.c
index 137455e00b6ff83a5db7a2edc71de46b6ad379f1..77e1e34f66d72e5a3922124e217c8f22e66dfd01 100644
--- a/ch32v003fun/ch32v003fun.c
+++ b/ch32v003fun/ch32v003fun.c
@@ -771,10 +771,10 @@ void handle_reset()
 	// Setup the interrupt vector, processor status and INTSYSCR.
 "	li a0, 0x80\n\
 	csrw mstatus, a0\n\
-	c.li a3, 0x3\n\
+	li a3, 0x3\n\
 	csrw 0x804, a3\n\
 	la a0, InterruptVector\n\
-	c.or a0, a3\n\
+	or a0, a0, a3\n\
 	csrw mtvec, a0\n" );
 
 	// Careful: Use registers to prevent overwriting of self-data.
@@ -782,10 +782,10 @@ void handle_reset()
 asm volatile(
 "	la a0, _sbss\n\
 	la a1, _ebss\n\
-	c.li a2, 0\n\
+	li a2, 0\n\
 	bge a0, a1, 2f\n\
-1:	c.sw a2, 0(a0)\n\
-	c.addi a0, 4\n\
+1:	sw a2, 0(a0)\n\
+	addi a0, a0, 4\n\
 	blt a0, a1, 1b\n\
 2:"
 	// This loads DATA from FLASH to RAM.
@@ -793,10 +793,10 @@ asm volatile(
 	la a1, _data_vma\n\
 	la a2, _edata\n\
 1:	beq a1, a2, 2f\n\
-	c.lw a3, 0(a0)\n\
-	c.sw a3, 0(a1)\n\
-	c.addi a0, 4\n\
-	c.addi a1, 4\n\
+	lw a3, 0(a0)\n\
+	sw a3, 0(a1)\n\
+	addi a0, a0, 4\n\
+	addi a1, a1, 4\n\
 	bne a1, a2, 1b\n\
 2:\n" );
 
@@ -875,7 +875,7 @@ int _write(int fd, const char *buf, int size)
 		remain =- tosend;
 	}
 }
-
+#endif
 
 void SetupDebugPrintf()
 {
@@ -884,8 +884,6 @@ void SetupDebugPrintf()
 }
 
 
-#endif
-
 void DelaySysTick( uint32_t n )
 {
     SysTick->SR &= ~(1 << 0);
diff --git a/examples/blink/blink.bin b/examples/blink/blink.bin
index 94a16b43785731553baa6a65a8ab89e0914b9772..b1c36a5c828db912241513fd46ac9f0fae76f4d5 100755
Binary files a/examples/blink/blink.bin and b/examples/blink/blink.bin differ
diff --git a/examples/blink/blink.c b/examples/blink/blink.c
index ea936900bafe0447bad995a5d187431f8ddea486..408b02f49809ac1de1ce03d4bb50e1317a9cb972 100644
--- a/examples/blink/blink.c
+++ b/examples/blink/blink.c
@@ -19,11 +19,15 @@ int main()
 	GPIOD->CFGLR &= ~(0xf<<(4*0));
 	GPIOD->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*0);
 
+	// GPIO D0 Push-Pull, 10MHz Output
+	GPIOD->CFGLR &= ~(0xf<<(4*4));
+	GPIOD->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*4);
+
 	while(1)
 	{
-		GPIOD->BSHR = 1;	 // Turn on GPIOD0
+		GPIOD->BSHR = 1 | (1<<4);	 // Turn on GPIOD0
 		Delay_Ms( 200 );
-		GPIOD->BSHR = 1<<16; // Turn off GPIOD0
+		GPIOD->BSHR = (1<<16) | (1<<(16+4)); // Turn off GPIOD0
 		Delay_Ms( 200 );
 		count++;
 	}
diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe
index 5c187f5e3995cdace9814183aecea6eedf6fc83d..05e4ddbc24be74047c668bd55ffc4e90bf9ca2e8 100644
Binary files a/minichlink/minichlink.exe and b/minichlink/minichlink.exe differ
diff --git a/minichlink/pgm-wch-linke.c b/minichlink/pgm-wch-linke.c
index da38118989beacf961d29edde9fc8ed4b830eaf3..e3037dbe296f1bf2ac4331d0513b476e7f8dca01 100644
--- a/minichlink/pgm-wch-linke.c
+++ b/minichlink/pgm-wch-linke.c
@@ -13,6 +13,7 @@ struct LinkEProgrammerStruct
 {
 	void * internal;
 	libusb_device_handle * devh;
+	int lasthaltmode;
 };
 
 #define WCHTIMEOUT 5000
@@ -203,7 +204,10 @@ static int LEUnbrick( void * dev )
 static int LEHaltMode( void * d, int mode )
 {
 	libusb_device_handle * dev = ((struct LinkEProgrammerStruct*)d)->devh;
-
+	if( mode == ((struct LinkEProgrammerStruct*)d)->lasthaltmode )
+		return;
+	((struct LinkEProgrammerStruct*)d)->lasthaltmode = mode;
+	
 	if( mode == 0 )
 	{
 		printf( "Holding in reset\n" );
@@ -380,6 +384,7 @@ void * TryInit_WCHLinkE()
 	struct LinkEProgrammerStruct * ret = malloc( sizeof( struct LinkEProgrammerStruct ) );
 	memset( ret, 0, sizeof( *ret ) );
 	ret->devh = wch_linke_devh;
+	ret->lasthaltmode = 0;
 
 	MCF.WriteReg32 = 0;
 	MCF.ReadReg32 = 0;