[MOD][DSP] simpleDSP installation into MTCD/E inside (ImprovedSound)

Search This thread

cs-x(RU)

Senior Member
Jul 13, 2018
149
184
simpleDSP installation into MTCD/E inside (ImprovedSound)
after in the summer of 2017 I disasseble the MTCB/C MCU firmware, I decided to try to improve the sound of these head units and bought a DSP test card based on the low-cost ADAU1401/1701 chip and started experiments with it to solve all the flaws in the sound settings of the Chinese head units.
In February 2018, Chinese vendors began the first sales of MTCE head units with internal DSP modules installed based on the ADAU1701 chip. A detailed analysis showed that the new hardware version of the head unit does not differ much from the previous one based on the sound processor BD3702, so I can try adding this module to me myself, because the Chinese refused to separately sell the DSP module for me.

[fig.1] photo of the main board of the new MTCE head unit with built-in DSP module
View attachment 4561586

[fig.2] photo of the main board of a typical MTCD/E head unit with a sound processor
View attachment 4561611

[fig.3] screenshot of the fake 9-band EQ of a typical MTCD/E head unit with a sound processor
View attachment 4561612

[fig.4] electrical circuit schematic of the sound processor of a typical MTCD/E head unit
View attachment 4561619

[fig.5] electrical circuit schematic of the sound switch of a typical MTCD/E head unit
View attachment 4561621

[fig.6] photo of the PX3(1GB) CPU coreboard of a typical MTCD/E head unit
View attachment 4561630

[fig.7] photo of the PX3/PX5 CPU coreboard of a typical MTCD/E head unit
View attachment 4561637

[fig.8] sigmaDSP ADAU1701 LQFP48 pinout
View attachment 4561645

[fig.9] sigmaDSP ADAU1401/1701 test board
View attachment 4561646

[fig.10] electrical circuit schematic of the ADAU1701 test board
View attachment 4561651

[fig.11] chinese built-in DSP ADAU1701 sub board
View attachment 4562327

As a result of comparing the MCU firmwares of the head units with the sound processor and with the integrated DSP module, we see that the same firmware is used.
When analyzing the behavior of the MCU firmware, it is found that after the start, it first polls the I2C bus on the sound processor chip and if it answers its own address, the head unit operates normally. If there is no sound processor, i.e. it does not respond to its own address, then the DSP chip is polled. If the DSP chip responds to its own address, then the head unit is already operating in the mode of improved sound with a real 15-band equalizer.
The sound processor chip BD37033 is powered by a 9-volt voltage source, and the AMS1117-3.3 stabilizer is used on the sigmaDSP test board, which allows operation from a voltage of up to 15 volts, so connect the DSP test board to the voltage of the sound processor chip on the main board. Disconnect from the I2C-bus of the MCU chip of the sound processor BD37033 and instead connect to the DSP chip ADAU1401/1701.
A real check showed that the software support of the DSP is in the MCU firmware from version 2.72 and higher and in Android builds versions 6.0.1, 7.1.2 and 8.0 and this mod is compatible with most MTCD/E head units

[fig.12] screenshot of the real 15-band EQ of a modified MTCD/E head unit with a DSP inside
View attachment 4562339

Since there is no electrical circuit schematic of the Chinese DSP module, then compare visually the board of the Chinese embedded DSP module with the DSP test board. The test board uses a onboard 12.288MHz crystal oscillator for clocking, and there is no resonator on the Chinese board and uses an 11.296MHz external clock from the CPU coreboard (I2S bit clock frequency for the sampling rate frequency of 44.1kHz).
Unsolder the crystal oscillator from the DSP test board, find the output of the clock signal on the CPU coreboard and provide a master clock signal to the 32-pin chip of the DSP chip ADAU1401/1701.

I and most my friends in the car listen only digital sounds from Android and analog sound from the FM radio tuner, so in the simplest version of the upgrade can do without using an analog audio switch that will simplify the finalization of the head unit.
On the new PX3/PX5 coreboards there are an additional 4 pins on which the I2S digital audio signals are output. These signals are connected to the DSP test board (the MCLKI signal of the external clock was already connected a little earlier).

[fig.13] digital I2S sound output from CPU coreboard
View attachment 4562387

On the older PX3(1GB) coreboars not are an additional pins for external output, but the I2S digital audio output can be founded on the onboard Wolfson audio codec chip pins. However, I have not connected such a coreboard yet and I do not know about real software compatibility with the Android build of version 5.1.1, but I suppose that this should be possible without much additional effort, but need to try...

[fig.14] digital I2S sound output from CPU to Wolfson audiocodec on coreboard
View attachment 4562396

Digital signals from Android sources must be connected to ADAU1401/1701 as follows:
-- Master CLOCK to 32 pin (MCLK) throu 100 Ohm resistor;
-- SDATA to 11 pin (MP0);
-- BLCK to 9 pin (MP5);
-- LRCLK to 8 pin (MP4)

The DSP chip has two built-in ADCs, so the analogue sound from the FM radio tuner can be connected to the sound processor pins as follows:
-- FM-R (pin 10) to 2 pin (ADC0);
-- FM-L (pin 11) to 4 pin (ADC1)

The DSP chip has four built-in DACs, so analog audio output can be connected for the power amplifier input to the sound processor pins as follows:
-- FR (pin 23) to 46 pin (DAC3);
-- FL (pin 22) to 45 pin (DAC2);
-- RR (pin 21) to 44 pin (DAC1);
-- RL (pin 20) to 43 pin (DAC0)

If do not need an additional output for an external subwoofer, then this is enough to enjoy improved sound due to the presence of a full 15-band equalizer, the ability to set delays, etc. (see screenshots at the end of this post), else if need to connect the external subwoofer, need to add the I2S DAC chip ES7144LV and connect it as follows:
-- Master CLOCK to pin 4 (CLKIN);
-- SDATA (MP6 pin 15) to pin 1;
-- SCLK (MP11 pin 19) to pin 2;
-- LRCLK (MP10 pin 16) to pin 3

[fig.15] electrical cuircuit schematic of the I2S DAC
View attachment 4562429

[fig.16] wire connections
View attachment 4564796

Verification showed that the improved sound is excellent
[fig.17]
Screenshot_20180730-165118.jpg
[fig.18]
Screenshot_20180730-170839.jpg
[fig.19]
Screenshot_20180730-170849.jpg
[fig.20]
Screenshot_20180730-170902.jpg
 
Last edited:

Xorit

Senior Member
Jan 21, 2011
197
23
You are missing some pics there :)



[11]
[12]
[13]

in the process of filling information


[digital I2S sound output from CPU to Wolfson audiocodec on coreboard]

[digital I2S sound output from CPU coreboard]



[screenshot of the real 15-band EQ of a modified MTCD/E head unit with a DSP inside]

[...]
 

Xorit

Senior Member
Jan 21, 2011
197
23
As a result of comparing the MCU firmwares of the head units with the sound processor and with the integrated DSP module, we see that the same firmware is used.
When analyzing the behavior of the MCU firmware, it is found that after the start, it first polls the I2C bus on the sound processor chip and if it answers its own address, the head unit operates normally. If there is no sound processor, i.e. it does not respond to its own address, then the DSP chip is polled. If the DSP chip responds to its own address, then the head unit is already operating in the mode of improved sound with a real 15-band equalizer.

Please correct me :)

The 7floor mod just re-routes and cuts some traces to control the in-build DSP directly and if i got it correct, people got full access to the DSP after.

You say that in the boot process the MCU polls it's hardware interfaces and if it detects the internal DSP it operates in "normal" mode.

Could this normal mode be modified to remove the config restriction and fully control the internal DSP? Or instead boot in "improved" mode?

// In my car (Opel Astra J) the HU is heavily mounted inside the dash and it's not fun to rip the whole thing apart every time.
Also I have a DVD drive installed and the space inside the silverbox is super limited due to that.

Or is this a "prove of concept" for people who don't have an in-built DSP and just a "stage" before you come up with a software solution? (You mentioned that in the other thread)
 

cs-x(RU)

Senior Member
Jul 13, 2018
149
184
Please correct me :)
The 7floor mod just re-routes and cuts some traces to control the in-build DSP directly and if i got it correct, people got full access to the DSP after.
You say that in the boot process the MCU polls it's hardware interfaces and if it detects the internal DSP it operates in "normal" mode.
Could this normal mode be modified to remove the config restriction and fully control the internal DSP? Or instead boot in "improved" mode?
// In my car (Opel Astra J) the HU is heavily mounted inside the dash and it's not fun to rip the whole thing apart every time.
Also I have a DVD drive installed and the space inside the silverbox is super limited due to that.
Or is this a "prove of concept" for people who don't have an in-built DSP and just a "stage" before you come up with a software solution? (You mentioned that in the other thread)
English is not native to me, so I apologize if I misunderstood you, but head units now have two options - with a sound processor and with a built-in DSP.

All the features of the sound processor are determined by the specific chip BD3702 / 37534/37033, etc, soldered on the HU mainboard. Since some of the audio presets are fixed in the MCU firmware, some do not like this sound and they want to customize it to their preferences. This can be achieved either by modifying the MCU firmware, or by direct control of the sound processor, for example, as in 7floor mod, but the audio capabilities are still low functional and are limited by the sound processor chip itself.

The possibilities of DSP for sound are very huge and diverse, but the Chinese sellers do not sell it separately for MTCD/E head units, so I suggested an alternative option by purchasing an affordable low-cost inexpensive DSP test board on Aliexpress and installing it inside the head unit to get a very improved sound, because all the software support has already been present and verified in the Android builds of versions from 6.0.1 to 8.0 and only need to connect the electrical circuits to the main board correctly.
I did it in practice and checked that it really works and it improves the sound very much, sorry, but if I did not answer your questions, please clarify them again for my understanding (my English is very pour)
 
  • Like
Reactions: marchnz

Xorit

Senior Member
Jan 21, 2011
197
23
English is not native to me, so I apologize if I misunderstood you, but head units now have two options - with a sound processor and with a built-in DSP.

All the features of the sound processor are determined by the specific chip BD3702 / 37534/37033, etc, soldered on the HU mainboard. Since some of the audio presets are fixed in the MCU firmware, some do not like this sound and they want to customize it to their preferences. This can be achieved either by modifying the MCU firmware, or by direct control of the sound processor, for example, as in 7floor mod, but the audio capabilities are still low functional and are limited by the sound processor chip itself.

The possibilities of DSP for sound are very huge and diverse, but the Chinese sellers do not sell it separately for MTCD/E head units, so I suggested an alternative option by purchasing an affordable low-cost inexpensive DSP test board on Aliexpress and installing it inside the head unit to get a very improved sound, because all the software support has already been present and verified in the Android builds of versions from 6.0.1 to 8.0 and only need to connect the electrical circuits to the main board correctly.
I did it in practice and checked that it really works and it improves the sound very much, sorry, but if I did not answer your questions, please clarify them again for my understanding (my English is very pour)

Nah you got me completly right there and I fully understood what you wrote. (not a native english myself :) )

So basically this MOD provided by you is an alternative method of "super-improving" the sound with a standard car sound system (speaker connected to the radio directly).

This, because if you have a factory amp like bose preinstalled or you have already upgraded the sound system with a DSP/amp you don't want to have the audio processed in the HU, but rather have clean signals to your installed DSP in the car.

Let me shortcut:

version 1: add DSP board for standard sound system to be improved (THIS THREAD)
version 2: have full control of the standard sound processor already present to get rid of the MCU presets. (MY IDEA)

For me personally it would be super great to just have the 7floor mod in software. My factory amp does all the audio magic, but I need more control of the HU output and it would totally be enough to control the TDA7388 PDF file

This is my Witson seller MX HU W2-V5754
 
Last edited:

Octane70

Senior Member
Dec 26, 2010
734
388
Okanagan
cs-x(RU) Could you share a picture of the installed ADAU1401/1701 chip in your unit, give us an idea what were looking at?, It all makes sense to me now.
Also in there a new amplifer.apk with the 15 band eq that you show in fig. 17 to fig. 20?
 

cs-x(RU)

Senior Member
Jul 13, 2018
149
184
cs-x(RU) Could you share a picture of the installed ADAU1401/1701 chip in your unit, give us an idea what were looking at?, It all makes sense to me now.
Also in there a new amplifer.apk with the 15 band eq that you show in fig. 17 to fig. 20?
In the summer of 2017 I bought this DSP test board for experimentation and subsequent installation in my MTCC head unit, but a significant software change was needed, so I suspended these works before the New Year 2018, and put a test card in the garage.
In April 2018 I decided to go back to the experiments to connect the test board to the MTCE head unit, but for a long time I could not find the card in the garage and was able to find it only last week. Immediately my friend asked me to install this DSP test board in his head unit, so I lasted all last Saturday and checked it on his head unit, but did not do the photo, and on Sunday he installed in the car and now I can not take the photo. Therefore, I can only sketch and specify the soldering points on the main board, but I'm going to do the next modification with the sound switch and ordered another DSP test board on Aliexpress.
A new apk with the 15 band eq that shown in fig. 17 to fig. 20 already present in the original Chinese Android build versions from 6.0.1 to 8.0 for MTCE head units and do not need to add anything yourself, since to activate the improved equalizer mode, it is sufficient only that the MCU firmware detects a DSP chip on the I2C bus and sends the command to the Android device
 
Last edited:

cs-x(RU)

Senior Member
Jul 13, 2018
149
184
This, because if you have a factory amp like bose preinstalled or you have already upgraded the sound system with a DSP/amp you don't want to have the audio processed in the HU, but rather have clean signals to your installed DSP in the car.
For me personally it would be super great to just have the 7floor mod in software. My factory amp does all the audio magic, but I need more control of the HU output
I have plans to try to make a completely software solution similar to 7floor, but without soldering, but so far there is no time for such experiments, becouse need to debug everything well
For your case, can do it simply - set the zero frequency response and prevent it from changing, and only your external amplifier with DSP can control any frequency response (very small changes in the MCU firmware code needed and not need in Android build)
 

Xorit

Senior Member
Jan 21, 2011
197
23
I have plans to try to make a completely software solution similar to 7floor, but without soldering, but so far there is no time for such experiments, becouse need to debug everything well
For your case, can do it simply - set the zero frequency response and prevent it from changing, and only your external amplifier with DSP can control any frequency response (very small changes in the MCU firmware code needed and not need in Android build)

Would you maybe provide a version to test in the other thread? Would be happy to try! :)

No need to rush things tho!

Many thanks!
 

cs-x(RU)

Senior Member
Jul 13, 2018
149
184
Will this mod work on an Intel Sofia mtcd unit? Thanks in advance
I do not know, because I do not have Intel Sofia and can not test -- tested only on Rockchip PX5 with Android 8.0 and on Rockchip PX3 with Android 7.1.2 and on Rockchip PX5 with Android 6.0.1, not tested on Rockchip PX3 with Android 5.1.1
 
Last edited:
  • Like
Reactions: brickbeats

cs-x(RU)

Senior Member
Jul 13, 2018
149
184
cs-x(RU) Could you share a picture of the installed ADAU1401/1701 chip in your unit, give us an idea what were looking at?, It all makes sense to me now.
added wire connection (see fig.16) in the first post of the topic
P.S.
the chip of the sound processor can not be removed from the main board, but then you must unsolder its SDA and SCL pins (26 and 25 pin of the BD37033)
 
Last edited:

Ben.suffolk

Senior Member
May 28, 2018
242
29
Bristol
This looks very interesting. Out of interest is there a solution to get additional analogue audio? I use the aux input as well?

I use dab most of the time so could potentially do without fm if there was not an option to switch the analogue audio as well
 

cs-x(RU)

Senior Member
Jul 13, 2018
149
184
This looks very interesting. Out of interest is there a solution to get additional analogue audio? I use the aux input as well?
I use dab most of the time so could potentially do without fm if there was not an option to switch the analogue audio as well
in the current implementation there is one digital input for sounds from Android applications and one analog input for other sounds without a switch. Since I and my friends are listening to FM radio, I made the connection just for it. If you need another analog source, then instead of FM radio you can connect either AUX-input or DAB-radio according to your desire.
I ordered another same DSP test board on Aliexpress and in the next implementation I plan to add an analog audio switcher for the possibility of programmatically selecting any of the sound sources
 

Ben.suffolk

Senior Member
May 28, 2018
242
29
Bristol
in the current implementation there is one digital input for sounds from Android applications and one analog input for other sounds without a switch. Since I and my friends are listening to FM radio, I made the connection just for it. If you need another analog source, then instead of FM radio you can connect either AUX-input or DAB-radio according to your desire.
I ordered another same DSP test board on Aliexpress and in the next implementation I plan to add an analog audio switcher for the possibility of programmatically selecting any of the sound sources

Ok great,

I assume that there must be a switcher built into the MTCE units with DSP, and I see your schematic for a switcher in the first post, but I will wait until you have figured out what it connects to so it works to switch the sources.

As it happens DAB is USB, so will be audio via the Android card (Digital), so I can use Aux and Digital, just meaning I don't have a fall back to FM if I loose DAB. Thats ok for the moment, and I'll upgrade to switched later.

Thanks for this mod.
 

kaise123

Senior Member
Aug 22, 2013
70
38
Adelaide
Thankyou so much for posting this, this is exactly what I have been looking for to improve sound quality of my unit. I have already ordered an ADAU1401 eval board.

I just wanted to confirm, if I add the ES7144LV as described, will I be able to control the sub channel selerately using the amp app on the unit without any additional modification?

Also, I am correct in thinking that if I make the correct electrical modifications the app will automatically identify the changes and I will not need to make any software changes?

Would it be possible to get a higher quality picture of where to connect the pins? I am finding the text hard to read in certain areas.

Thanks again!
 

Top Liked Posts

  • There are no posts matching your filters.
  • 17
    simpleDSP installation into MTCD/E inside (ImprovedSound)
    after in the summer of 2017 I disasseble the MTCB/C MCU firmware, I decided to try to improve the sound of these head units and bought a DSP test card based on the low-cost ADAU1401/1701 chip and started experiments with it to solve all the flaws in the sound settings of the Chinese head units.
    In February 2018, Chinese vendors began the first sales of MTCE head units with internal DSP modules installed based on the ADAU1701 chip. A detailed analysis showed that the new hardware version of the head unit does not differ much from the previous one based on the sound processor BD3702, so I can try adding this module to me myself, because the Chinese refused to separately sell the DSP module for me.

    [fig.1] photo of the main board of the new MTCE head unit with built-in DSP module
    View attachment 4561586

    [fig.2] photo of the main board of a typical MTCD/E head unit with a sound processor
    View attachment 4561611

    [fig.3] screenshot of the fake 9-band EQ of a typical MTCD/E head unit with a sound processor
    View attachment 4561612

    [fig.4] electrical circuit schematic of the sound processor of a typical MTCD/E head unit
    View attachment 4561619

    [fig.5] electrical circuit schematic of the sound switch of a typical MTCD/E head unit
    View attachment 4561621

    [fig.6] photo of the PX3(1GB) CPU coreboard of a typical MTCD/E head unit
    View attachment 4561630

    [fig.7] photo of the PX3/PX5 CPU coreboard of a typical MTCD/E head unit
    View attachment 4561637

    [fig.8] sigmaDSP ADAU1701 LQFP48 pinout
    View attachment 4561645

    [fig.9] sigmaDSP ADAU1401/1701 test board
    View attachment 4561646

    [fig.10] electrical circuit schematic of the ADAU1701 test board
    View attachment 4561651

    [fig.11] chinese built-in DSP ADAU1701 sub board
    View attachment 4562327

    As a result of comparing the MCU firmwares of the head units with the sound processor and with the integrated DSP module, we see that the same firmware is used.
    When analyzing the behavior of the MCU firmware, it is found that after the start, it first polls the I2C bus on the sound processor chip and if it answers its own address, the head unit operates normally. If there is no sound processor, i.e. it does not respond to its own address, then the DSP chip is polled. If the DSP chip responds to its own address, then the head unit is already operating in the mode of improved sound with a real 15-band equalizer.
    The sound processor chip BD37033 is powered by a 9-volt voltage source, and the AMS1117-3.3 stabilizer is used on the sigmaDSP test board, which allows operation from a voltage of up to 15 volts, so connect the DSP test board to the voltage of the sound processor chip on the main board. Disconnect from the I2C-bus of the MCU chip of the sound processor BD37033 and instead connect to the DSP chip ADAU1401/1701.
    A real check showed that the software support of the DSP is in the MCU firmware from version 2.72 and higher and in Android builds versions 6.0.1, 7.1.2 and 8.0 and this mod is compatible with most MTCD/E head units

    [fig.12] screenshot of the real 15-band EQ of a modified MTCD/E head unit with a DSP inside
    View attachment 4562339

    Since there is no electrical circuit schematic of the Chinese DSP module, then compare visually the board of the Chinese embedded DSP module with the DSP test board. The test board uses a onboard 12.288MHz crystal oscillator for clocking, and there is no resonator on the Chinese board and uses an 11.296MHz external clock from the CPU coreboard (I2S bit clock frequency for the sampling rate frequency of 44.1kHz).
    Unsolder the crystal oscillator from the DSP test board, find the output of the clock signal on the CPU coreboard and provide a master clock signal to the 32-pin chip of the DSP chip ADAU1401/1701.

    I and most my friends in the car listen only digital sounds from Android and analog sound from the FM radio tuner, so in the simplest version of the upgrade can do without using an analog audio switch that will simplify the finalization of the head unit.
    On the new PX3/PX5 coreboards there are an additional 4 pins on which the I2S digital audio signals are output. These signals are connected to the DSP test board (the MCLKI signal of the external clock was already connected a little earlier).

    [fig.13] digital I2S sound output from CPU coreboard
    View attachment 4562387

    On the older PX3(1GB) coreboars not are an additional pins for external output, but the I2S digital audio output can be founded on the onboard Wolfson audio codec chip pins. However, I have not connected such a coreboard yet and I do not know about real software compatibility with the Android build of version 5.1.1, but I suppose that this should be possible without much additional effort, but need to try...

    [fig.14] digital I2S sound output from CPU to Wolfson audiocodec on coreboard
    View attachment 4562396

    Digital signals from Android sources must be connected to ADAU1401/1701 as follows:
    -- Master CLOCK to 32 pin (MCLK) throu 100 Ohm resistor;
    -- SDATA to 11 pin (MP0);
    -- BLCK to 9 pin (MP5);
    -- LRCLK to 8 pin (MP4)

    The DSP chip has two built-in ADCs, so the analogue sound from the FM radio tuner can be connected to the sound processor pins as follows:
    -- FM-R (pin 10) to 2 pin (ADC0);
    -- FM-L (pin 11) to 4 pin (ADC1)

    The DSP chip has four built-in DACs, so analog audio output can be connected for the power amplifier input to the sound processor pins as follows:
    -- FR (pin 23) to 46 pin (DAC3);
    -- FL (pin 22) to 45 pin (DAC2);
    -- RR (pin 21) to 44 pin (DAC1);
    -- RL (pin 20) to 43 pin (DAC0)

    If do not need an additional output for an external subwoofer, then this is enough to enjoy improved sound due to the presence of a full 15-band equalizer, the ability to set delays, etc. (see screenshots at the end of this post), else if need to connect the external subwoofer, need to add the I2S DAC chip ES7144LV and connect it as follows:
    -- Master CLOCK to pin 4 (CLKIN);
    -- SDATA (MP6 pin 15) to pin 1;
    -- SCLK (MP11 pin 19) to pin 2;
    -- LRCLK (MP10 pin 16) to pin 3

    [fig.15] electrical cuircuit schematic of the I2S DAC
    View attachment 4562429

    [fig.16] wire connections
    View attachment 4564796

    Verification showed that the improved sound is excellent
    [fig.17]
    Screenshot_20180730-165118.jpg
    [fig.18]
    Screenshot_20180730-170839.jpg
    [fig.19]
    Screenshot_20180730-170849.jpg
    [fig.20]
    Screenshot_20180730-170902.jpg
    5
    I can confirm this works on a GS based Android 8 unit, although mine is running Malaysk's Android 6 rom. Pretty janky test bench setup at the moment, but it sounds good. I have also added the additional sub channel, and can confirm it works, including the sub control.

    When I have it all done neatly I will upload very high res photos with annotations.


    Pictures so far:

    IMG_20180909_201520.jpg

    IMG_20180909_201326.jpg

    IMG_20180909_201319.jpg

    IMG_20180909_201302.jpg

    IMG_153648964721F.jpg

    IMG_20180909_194619.jpg

    IMG_20180909_194614.jpg
    4
    I have attached the schematic of my board. Maybe it will help someone.
    4
    Hi

    I have attached the gerber files of my board. With this and the schematics the board can be replicated.
    Who wants to build the board, can upload the zip file to jlcpcb and order the pcb for a low price.
    3
    Hi,

    I have attached the bom of the board. The most parts have a 0402 footprint. The space on the board is limited. I have soldered by hand with hot-air and solder paste. I think this is the easiest way to do this.