diff --git a/embedded/usb-adafruit-cdc/usb-adafruit-cdc/board_driver_usb.c b/embedded/usb-adafruit-cdc/usb-adafruit-cdc/board_driver_usb.c
index 2e45b9c2bd860ac28988d49d0c55bcaeead87f6b..1e38dce8b55550f2f73981691c0f0dfb0e873391 100644
--- a/embedded/usb-adafruit-cdc/usb-adafruit-cdc/board_driver_usb.c
+++ b/embedded/usb-adafruit-cdc/usb-adafruit-cdc/board_driver_usb.c
@@ -107,9 +107,9 @@ void USB_Init(void)
    * Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference)
    *
 	*/
-  GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK0_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
+  GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
   MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB;
-  while(GCLK->SYNCBUSY.bit.GENCTRL0)
+  while(GCLK->SYNCBUSY.bit.GENCTRL1)
   {
     /* Wait for synchronization */
   }
diff --git a/embedded/usb-adafruit-cdc/usb-adafruit-cdc/board_init.c b/embedded/usb-adafruit-cdc/usb-adafruit-cdc/board_init.c
index 91c79c6c16923d441b1bb79f8d18eb45fa353e3f..0dc33f33bc846aea14805749f040e327a078073a 100644
--- a/embedded/usb-adafruit-cdc/usb-adafruit-cdc/board_init.c
+++ b/embedded/usb-adafruit-cdc/usb-adafruit-cdc/board_init.c
@@ -117,7 +117,7 @@ void board_init(void)
 	/* ----------------------------------------------------------------------------------------------
 	* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
 	*/
-	GCLK->GENCTRL[0].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL) |
+	GCLK->GENCTRL[1].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL) |
 	GCLK_GENCTRL_IDC |
 	GCLK_GENCTRL_OE |
 	GCLK_GENCTRL_GENEN;
@@ -127,6 +127,24 @@ void board_init(void)
 		/* Wait for synchronization */
 	}
 	
+	// now we want a DPLL0 for MCLK
+	
+	// a reference, from the DFLL, for the DPLL0
+	GCLK->GENCTRL[5].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL_Val) | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_DIV(24u);
+	while(GCLK->SYNCBUSY.bit.GENCTRL5);
+	
+	// the DPLL setup
+	GCLK->PCHCTRL[OSCCTRL_GCLK_ID_FDPLL0].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK5_Val);
+	OSCCTRL->Dpll[0].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0x00) | OSCCTRL_DPLLRATIO_LDR(59);
+	while(OSCCTRL->Dpll[0].DPLLSYNCBUSY.bit.DPLLRATIO);
+	OSCCTRL->Dpll[0].DPLLCTRLB.reg = OSCCTRL_DPLLCTRLB_REFCLK_GCLK | OSCCTRL_DPLLCTRLB_LBYPASS;
+	OSCCTRL->Dpll[0].DPLLCTRLA.reg = OSCCTRL_DPLLCTRLA_ENABLE;
+	while(OSCCTRL->Dpll[0].DPLLSTATUS.bit.CLKRDY == 0 || OSCCTRL->Dpll[0].DPLLSTATUS.bit.LOCK == 0);
+	// set clock to use dpll0
+	
+	// this would switch the CPU clock to the DPLL0
+	GCLK->GENCTRL[0].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DPLL0) | GCLK_GENCTRL_IDC | GCLK_GENCTRL_GENEN;
+	while(GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL0);
 	
 	/* Turn on the digital interface clock */
 	//MCLK->APBAMASK.reg |= MCLK_APBAMASK_GCLK;
@@ -137,3 +155,63 @@ void board_init(void)
 	*/
 	MCLK->CPUDIV.reg = MCLK_CPUDIV_DIV_DIV1;
 }
+
+void clock_init(void){
+	// on Reset, the DFLL48< source clock is on and running at 48MHz
+	// GCLK0 uses DFLL48M as a source and generates GCLK_MAIN
+	// we want to use OSCCTRL to (1) set the DFLL48M to run on a reference clock, in closed-loop mode
+	// (20 then to prescale the DFLL48M such that it runs at 120MHz
+		
+	// for 120mhz do https://github.com/adafruit/ArduinoCore-samd/blob/samd51/cores/arduino/startup.c
+	
+	// something?
+	NVMCTRL->CTRLA.reg |= NVMCTRL_CTRLA_RWS(0);
+	
+	// reset
+	GCLK->CTRLA.bit.SWRST = 1;
+	while(GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_SWRST);
+	
+	// Setup internal reference to gclk gen 3
+	GCLK->GENCTRL[3].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_OSCULP32K) | GCLK_GENCTRL_GENEN;
+	while(GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL3);
+	GCLK->GENCTRL[0].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_OSCULP32K) | GCLK_GENCTRL_GENEN;
+	while(GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL0);
+	
+	// enable DFLL48M clock
+	OSCCTRL->DFLLCTRLA.reg = 0;
+	OSCCTRL->DFLLMUL.reg = OSCCTRL_DFLLMUL_CSTEP(0x1) | OSCCTRL_DFLLMUL_FSTEP(0x1) | OSCCTRL_DFLLMUL_MUL(0);
+	while(OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_DFLLMUL);
+	OSCCTRL->DFLLCTRLB.reg = 0;
+	while(OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_DFLLCTRLB);
+	OSCCTRL->DFLLCTRLA.reg |= OSCCTRL_DFLLCTRLA_ENABLE;
+	while(OSCCTRL->DFLLSYNC.reg & OSCCTRL_DFLLSYNC_ENABLE);
+	OSCCTRL->DFLLCTRLB.reg = OSCCTRL_DFLLCTRLB_WAITLOCK | OSCCTRL_DFLLCTRLB_CCDIS | OSCCTRL_DFLLCTRLB_USBCRM;
+	while(!OSCCTRL->STATUS.bit.DFLLRDY);
+	
+	// a reference for the USB, 48MHz
+	GCLK->GENCTRL[0].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL_Val) |
+	GCLK_GENCTRL_IDC |
+	GCLK_GENCTRL_OE |
+	GCLK_GENCTRL_GENEN;
+	while(GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL0);
+	
+	// this is generating a reference for our 120mhz
+	GCLK->GENCTRL[5].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DFLL_Val) | GCLK_GENCTRL_GENEN | GCLK_GENCTRL_DIV(24u);
+	while(GCLK->SYNCBUSY.bit.GENCTRL5);
+	
+	/*
+	// setup DPLL0 to 120MHz
+	GCLK->PCHCTRL[OSCCTRL_GCLK_ID_FDPLL0].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK5_Val);
+	OSCCTRL->Dpll[0].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0x00) | OSCCTRL_DPLLRATIO_LDR(59);
+	while(OSCCTRL->Dpll[0].DPLLSYNCBUSY.bit.DPLLRATIO);
+	OSCCTRL->Dpll[0].DPLLCTRLB.reg = OSCCTRL_DPLLCTRLB_REFCLK_GCLK | OSCCTRL_DPLLCTRLB_LBYPASS;
+	OSCCTRL->Dpll[0].DPLLCTRLA.reg = OSCCTRL_DPLLCTRLA_ENABLE;
+	while(OSCCTRL->Dpll[0].DPLLSTATUS.bit.CLKRDY == 0 || OSCCTRL->Dpll[0].DPLLSTATUS.bit.LOCK == 0);
+	// set clock to use dpll0
+	
+	GCLK->GENCTRL[0].reg = GCLK_GENCTRL_SRC(GCLK_GENCTRL_SRC_DPLL0) | GCLK_GENCTRL_IDC | GCLK_GENCTRL_GENEN;
+	while(GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL0);
+	*/
+	
+	MCLK->CPUDIV.reg = MCLK_CPUDIV_DIV_DIV1;
+}
\ No newline at end of file