= Extending and customizing iplt = Extending and customizing IPLT can be done on multiple levels and in various forms, since the framework consists of several well defined layers. In particular, the transition between Python and C++, i.e. crossing the language barrier, should be fairly smooth, since the vast majority of class names and methods available in the IPLT Python API is identical to the ones in C++. The easiest way is certainly to write little scripts or larger modules in Python, which can be called either from the [wiki:IpltMisc command-line] (`iplt`) or [wiki:gui/PythonShell graphical version] (`giplt`) of IPLT, combining standard Python code with specialized IPLT functionality. Graphical user interface elements can be added on the Python level using [http://www.riverbankcomputing.co.uk/software/pyqt PyQt4] See [wiki:GuiWithPyQt this tutorial] for an example on how to do this. A second possibility is to write [wiki:DataViewerOverlay Overlays] for the [wiki:gui/DataViewer DataViewer]. As a third way, stand-alone widgets can be written in C++ using `Qt4`. Image manipulation routines are added using [wiki:IpltAlgorithmConcepts algorithm objects], either on the level of the [wiki:BaseImageHandle], using [wiki:CustomDataAlgorithms custom data algorithms], or with more more involved, yet more powerful [wiki:CustomImageStateAlgorithms custom image state algorithms], accessing the [wiki:BaseImageState image states] directly.