diff --git a/src/python/dxpy/exceptions.py b/src/python/dxpy/exceptions.py
index <HASH>..<HASH> 100644
--- a/src/python/dxpy/exceptions.py
+++ b/src/python/dxpy/exceptions.py
@@ -45,7 +45,11 @@ class DXJobFailureError(DXError):
     '''Exception produced by :class:`dxpy.bindings.dxjob.DXJob` when a job fails.'''
     pass
 
-class AppError(DXError):
+class ProgramError(DXError):
+    '''Deprecated. Use :class:`AppError` instead.'''
+    pass
+
+class AppError(ProgramError):
     '''
     Base class for fatal exceptions to be raised while using :mod:`dxpy` inside
     DNAnexus execution containers.
@@ -58,10 +62,6 @@ class AppError(DXError):
     '''
     pass
 
-class ProgramError(AppError):
-    '''Deprecated. Use :class:`AppError` instead.'''
-    pass
-
 class AppInternalError(DXError):
     '''
     Base class for fatal exceptions to be raised while using :mod:`dxpy` inside
Reverse dependency order of AppError-ProgramError
Make AppError temporarily depend on (deprecated) ProgramError to work around try..catch logic in python<I>_template that was not updated and tries to catch ProgramError. This results in apps that use the old template with AppError throwing AppInternalError instead.