I used the QGIS Plugin Builder to create a plugin where the *main.py* file imports dockwidgets and class from its own file and from other files. A button on the toolbar executes the `run(self)` function in *main.py* where it loads the imported dockwidgets, classes, connecting buttons to functions etc. Another button on the toolbar closes the plugin by executing the `onClosePlugin(self)` function. This function only closes dockwidgets loaded from *main.py* (so not from other files) and disconnects its buttons. The imported classes are untouched. However, when I close the plugin, QGIS continues to run but a lot slower than usual. It also takes longer to close down, sometimes I get an error report. I'm guessing this is because of all the resources my plugin loads but is still in memory when the plugin is closed. **How can I remove/unload all resources that have been imported/loaded by the plugin?** When I import dockwidgets and classes from other files, I use the following in my *main.py* from some_Dockwidget import someDockwidget from general_Class import generalClass Which are then called in `run(self)`: self.someDockwidget = someDockwidget() self.generalClass = generalClass() --- I found [this post](https://gis.stackexchange.com/questions/353598/qgis-plugin-closing-all-open-pyqt-dialogs) which closes all QDialog boxes. I have used the following to close all dockwidgets but can it be adapted to close/unload/delete everything that has been imported/loaded? items = vars(self) for i in items: item = items[i] if isinstance(item, QDockWidget): item.close()