A system for delivering neurostimulation pulses through a plurality of electrodes, comprising: a storage device configured to store a plurality of individually definable waveforms; a programming control circuit configured to generate a plurality of stimulation parameters controlling the delivery of the neurostimulation pulses according to a pattern of the neurostimulation pulses; and a graphical user interface coupled to the storage device and the control circuit and configured to define the pattern of the neurostimulation pulses using one or more waveforms selected from the plurality of individually definable waveforms, the GUI configured to: display waveform tags each selectable for access to a waveform of the plurality of individually definable waveforms, the waveform tags including one or more waveform addition tags each selectable for adding a new waveform to the plurality of individually definable waveforms; and display a waveform builder in response to selection of a waveform tag of the waveform tags, the waveform builder configured to present a graphical representation of the accessed waveform and allow for the accessed waveform to be adjusted by editing the graphical representation of the accessed waveform on the GUI, the waveform builder displayed in response to selection of a waveform addition tag of the one or more waveform addition tags allowing for creation and editing of a graphical representation of the new waveform on the GUI. a storage device configured to store a plurality of individually definable waveforms; a programming control circuit configured to generate a plurality of stimulation parameters controlling the delivery of the neurostimulation pulses according to a pattern of the neurostimulation pulses; and a graphical user interface coupled to the storage device and the control circuit and configured to define the pattern of the neurostimulation pulses using one or more waveforms selected from the plurality of individually definable waveforms, the GUI configured to: display waveform tags each selectable for access to a waveform of the plurality of individually definable waveforms, the waveform tags including one or more waveform addition tags each selectable for adding a new waveform to the plurality of individually definable waveforms; and display a waveform builder in response to selection of a waveform tag of the waveform tags, the waveform builder configured to present a graphical representation of the accessed waveform and allow for the accessed waveform to be adjusted by editing the graphical representation of the accessed waveform on the GUI, the waveform builder displayed in response to selection of a waveform addition tag of the one or more waveform addition tags allowing for creation and editing of a graphical representation of the new waveform on the GUI. display waveform tags each selectable for access to a waveform of the plurality of individually definable waveforms, the waveform tags including one or more waveform addition tags each selectable for adding a new waveform to the plurality of individually definable waveforms; and display a waveform builder in response to selection of a waveform tag of the waveform tags, the waveform builder configured to present a graphical representation of the accessed waveform and allow for the accessed waveform to be adjusted by editing the graphical representation of the accessed waveform on the GUI, the waveform builder displayed in response to selection of a waveform addition tag of the one or more waveform addition tags allowing for creation and editing of a graphical representation of the new waveform on the GUI.