diff -ur icu.org/source/config/mh-aix-gcc icu/source/config/mh-aix-gcc
--- icu.org/source/config/mh-aix-gcc	2016-06-15 20:58:17.000000000 +0200
+++ icu/source/config/mh-aix-gcc	2017-04-21 21:58:49.731432198 +0200
@@ -18,84 +18,29 @@
 GEN_DEPS.c=	$(CC) -E -MM $(DEFS) $(CPPFLAGS)
 GEN_DEPS.cc=	$(CXX) -E -MM $(DEFS) $(CPPFLAGS)
 
-## Commands to link
-## We need to use the C++ linker, even when linking C programs, since
-##  our libraries contain C++ code (C++ static init not called)
-LINK.c=		$(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS) 
-LINK.cc=	$(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS) 
-
-## Shared library options
-LD_SOOPTIONS= -Wl,-bsymbolic
-
-## Commands to make a shared library
-SHLIB.c=    $(AIX_PREDELETE) $(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,-bexpall $(LD_SOOPTIONS)
-SHLIB.cc=   $(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -Wl,-bexpall $(LD_SOOPTIONS)
-
-## Compiler switch to embed a runtime search path
-LD_RPATH=	-I
-LD_RPATH_PRE=	
+## Flags for position independent code
+SHAREDLIBCFLAGS = -fPIC
+SHAREDLIBCXXFLAGS = -fPIC
+SHAREDLIBCPPFLAGS = -DPIC
+
+## Additional flags when building libraries and with threads
+THREADSCPPFLAGS = -D_REENTRANT -D_THREAD_SAFE
+LIBCPPFLAGS =
 
-## enable the shared lib loader
-LDFLAGS += -Wl,-bbigtoc
+LD_RPATH=
+LD_RPATH_PRE=
 
 ## These are the library specific LDFLAGS
 LDFLAGSICUDT=-nodefaultlibs -nostdlib
 
-## We need to delete things prior to linking, or else we'll get
-## SEVERE ERROR: output file in use ..  on AIX. 
-## But, shell script version should NOT delete target as we don't
-## have $@ in that context.  (SH = only shell script, icu-config)
-AIX_PREDELETE=rm -f $@ ; 
-#SH# AIX_PREDELETE=
-
 ## Environment variable to set a runtime search path
 LDLIBRARYPATH_ENVVAR = LIBPATH
 
-## Override Versioned target for a shared library.
-FINAL_SO_TARGET=  $(basename $(SO_TARGET))$(SO_TARGET_VERSION).$(SO)
-MIDDLE_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO)
-SHARED_OBJECT = $(notdir $(FINAL_SO_TARGET:.$(SO)=.$(SOBJ)))
-SHARED_OBJECT_NO_VERSION = $(basename $(SO_TARGET)).$(SOBJ)
-
-# The following is for Makefile.inc's use.
-ICULIBSUFFIX_VERSION = $(LIB_VERSION_MAJOR)
-
-# this one is for icudefs.mk's use
-ifeq ($(ENABLE_SHARED),YES)
-SO_TARGET_VERSION_SUFFIX = $(SO_TARGET_VERSION_MAJOR)
-endif
-
-## Compiler switch to embed a library name. Not present on AIX.
-LD_SONAME = 
-
-## The type of assembly needed when pkgdata is used for generating shared libraries.
-GENCCODE_ASSEMBLY=-a xlc
-
 ## Shared object suffix
-SOBJ=   so
-# without the -brtl option, the library names use .a. AIX is funny that way.
-SO=	a
-A=	a
+SO=	so
 
 ## Non-shared intermediate object suffix
-STATIC_O = o
-
-## Special AIX rules
-
-## Build archive from shared object
-%.a : %.so
-	ln -f $< $(SHARED_OBJECT_NO_VERSION)
-	$(AR) $(ARFLAGS) $@ $(SHARED_OBJECT_NO_VERSION)
-	rm -f $(SHARED_OBJECT_NO_VERSION)
-$(LIBDIR)/%.a : %.so
-	ln -f $< $(SHARED_OBJECT_NO_VERSION)
-	$(AR) $(ARFLAGS) $@ $(SHARED_OBJECT_NO_VERSION)
-	rm -f $(SHARED_OBJECT_NO_VERSION)
-
-## Build import list from export list
-%.e : %.exp
-	@echo "Building an import list for $<"
-	@$(SHELL) -ec "echo '#! $*.a($*.so)' | cat - $< > $@"
+STATIC_O = ao
 
 ## Compilation rules
 %.$(STATIC_O): $(srcdir)/%.c
@@ -123,10 +68,10 @@
 		[ -s $@ ] || rm -f $@'
 
 ## Versioned libraries rules
-%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
-	$(RM) $@ && ln -s ${*F}$(SO_TARGET_VERSION).$(SO) $@
-%.$(SO): %$(SO_TARGET_VERSION).$(SO)
-	$(RM) $@ && ln -s ${*F}$(SO_TARGET_VERSION).$(SO) $@
+%.$(SO).$(SO_TARGET_VERSION_MAJOR): %.$(SO).$(SO_TARGET_VERSION)
+	$(RM) $@ && ln -s ${<F} $@
+%.$(SO): %.$(SO).$(SO_TARGET_VERSION_MAJOR)
+	$(RM) $@ && ln -s ${*F}.$(SO).$(SO_TARGET_VERSION) $@
 
 
 ## BIR  - bind with internal references [so app data and icu data doesn't collide]
diff -ur icu.org/source/tools/pkgdata/pkgdata.cpp icu/source/tools/pkgdata/pkgdata.cpp
--- icu.org/source/tools/pkgdata/pkgdata.cpp	2017-03-21 02:03:49.000000000 +0100
+++ icu/source/tools/pkgdata/pkgdata.cpp	2017-04-21 21:58:49.732432195 +0200
@@ -934,7 +934,7 @@
 
         uprv_strcat(pkgDataFlags[SO_EXT], ".");
         uprv_strcat(pkgDataFlags[SO_EXT], pkgDataFlags[A_EXT]);
-#elif U_PLATFORM == U_PF_OS400 || defined(_AIX)
+#elif U_PLATFORM == U_PF_OS400
         sprintf(libFileNames[LIB_FILE_VERSION_TMP], "%s%s%s",
                 libFileNames[LIB_FILE],
                 FILE_EXTENSION_SEP,
@@ -1407,15 +1407,6 @@
                 pkgDataFlags[LDICUDTFLAGS],
                 targetDir,
                 libFileNames[LIB_FILE_CYGWIN_VERSION],
-#elif U_PLATFORM == U_PF_AIX
-        sprintf(cmd, "%s %s%s;%s %s -o %s%s %s %s%s %s %s",
-                RM_CMD,
-                targetDir,
-                libFileNames[LIB_FILE_VERSION_TMP],
-                pkgDataFlags[GENLIB],
-                pkgDataFlags[LDICUDTFLAGS],
-                targetDir,
-                libFileNames[LIB_FILE_VERSION_TMP],
 #else
         sprintf(cmd, "%s %s -o %s%s %s %s%s %s %s",
                 pkgDataFlags[GENLIB],