I would also create a new datawindow with as data source your procedure. Then to use it, use the sharedata()
function.
More specifically, if you have a datawidnows control dw_1
holding your 'old' datawindow, create a new (possibly hidden) control dw_new and use the new dataobject in it. Alternatively, you could use a datastore.
Then code:
dw_1.reset // To make sure everything has been flushed
dw_new.retrieve()
dw_new.sharedata(dw_1)
The abolute condition for this to work is to have exactly the same buffer ie the same fields with the same definition.