diff --git a/dev-python/matplotlib/matplotlib-1.3.1.ebuild b/dev-python/matplotlib/matplotlib-1.3.1.ebuild
new file mode 100644
index 0000000..889455d
--- /dev/null
+++ b/dev-python/matplotlib/matplotlib-1.3.1.ebuild
@@ -0,0 +1,242 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-python/matplotlib/matplotlib-1.3.1.ebuild,v 1.2 2013/12/26 18:55:53 jlec Exp $
+
+EAPI=5
+
+PYTHON_COMPAT=( python{2_7,3_3} )
+
+PYTHON_REQ_USE='tk?'
+
+VIRTUALX_REQUIRED="always"
+
+inherit distutils-r1 eutils flag-o-matic virtualx toolchain-funcs
+
+DESCRIPTION="Pure python plotting library with matlab like syntax"
+HOMEPAGE="http://matplotlib.org/"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"
+
+SLOT="0"
+# Main license: matplotlib
+# Some modules: BSD
+# matplotlib/backends/qt4_editor: MIT
+# Fonts: BitstreamVera, OFL-1.1
+LICENSE="BitstreamVera BSD matplotlib MIT OFL-1.1"
+KEYWORDS="*"
+IUSE="cairo doc excel examples fltk gtk gtk3 latex pyside qt4 test tk wxwidgets"
+
+# #456704 -- a lot of py2-only deps
+PY2_USEDEP=$(python_gen_usedep 'python2*')
+PY3_USEDEP=$(python_gen_usedep python3_3)
+COMMON_DEPEND="
+	dev-python/numpy[${PYTHON_USEDEP}]
+	dev-python/python-dateutil:0[${PYTHON_USEDEP}]
+	dev-python/pytz[${PYTHON_USEDEP}]
+	dev-python/six[${PYTHON_USEDEP}]
+	media-fonts/stix-fonts
+	media-libs/freetype:2
+	media-libs/libpng:0
+	gtk? ( dev-python/pygtk[${PY2_USEDEP}] )
+	wxwidgets? ( >=dev-python/wxpython-2.8[${PY2_USEDEP}] )"
+
+# internal copy of pycxx highly patched
+#	dev-python/pycxx
+
+DEPEND="${COMMON_DEPEND}
+	virtual/pkgconfig
+	doc? (
+		app-text/dvipng
+		virtual/python-imaging[${PYTHON_USEDEP}]
+		dev-python/ipython[${PYTHON_USEDEP}]
+		dev-python/numpydoc[${PY2_USEDEP}]
+		dev-python/xlwt[${PY2_USEDEP}]
+		dev-python/sphinx[${PYTHON_USEDEP}]
+		dev-texlive/texlive-latexextra
+		dev-texlive/texlive-fontsrecommended
+		dev-texlive/texlive-latexrecommended
+		media-gfx/graphviz[cairo]
+	)
+	test? ( dev-python/nose[${PYTHON_USEDEP}] )"
+
+RDEPEND="${COMMON_DEPEND}
+	dev-python/pyparsing[${PYTHON_USEDEP}]
+	cairo? ( dev-python/pycairo[${PYTHON_USEDEP}] )
+	excel? ( dev-python/xlwt[${PY2_USEDEP}] )
+	fltk? ( dev-python/pyfltk[${PY2_USEDEP}] )
+	gtk3? (
+		dev-python/pygobject:3[${PYTHON_USEDEP}]
+		x11-libs/gtk+:3[introspection] )
+	latex? (
+		virtual/latex-base
+		app-text/ghostscript-gpl
+		app-text/dvipng
+		app-text/poppler[utils]
+		dev-texlive/texlive-fontsrecommended
+		dev-texlive/texlive-latexextra
+		dev-texlive/texlive-xetex
+	)
+	pyside? ( dev-python/pyside[X,${PYTHON_USEDEP}] )
+	qt4? ( dev-python/PyQt4[X,${PYTHON_USEDEP}] )"
+
+PY2_FLAGS="|| ( $(python_gen_useflags python2*) )"
+REQUIRED_USE="
+	doc? ( ${PY2_FLAGS} )
+	excel? ( ${PY2_FLAGS} )
+	fltk? ( ${PY2_FLAGS} )
+	gtk? ( ${PY2_FLAGS} )
+	wxwidgets? ( ${PY2_FLAGS} )
+	test? (
+		cairo fltk latex pyside qt4 tk wxwidgets
+		|| ( gtk gtk3 )
+		)"
+
+RESTRICT="mirror"
+
+# A few C++ source files are written to srcdir.
+# Other than that, the ebuild shall be fit for out-of-source build.
+DISTUTILS_IN_SOURCE_BUILD=1
+
+use_setup() {
+	local uword="${2:-${1}}"
+	if use ${1}; then
+		echo "${uword} = True"
+		echo "${uword}agg = True"
+	else
+		echo "${uword} = False"
+		echo "${uword}agg = False"
+	fi
+}
+
+python_prepare_all() {
+# Generates test failures, but fedora does it
+#	local PATCHES=(
+#		"${FILESDIR}"/${P}-unbundle-pycxx.patch
+#		"${FILESDIR}"/${P}-unbundle-agg.patch
+#	)
+#	rm -r agg24 CXX || die
+#	rm -r agg24 || die
+
+	sed -i \
+		-e "s:\<pkg-config\>:$(tc-getPKG_CONFIG):" \
+		setupext.py || die
+	epatch "${FILESDIR}"/${P}-cross-compile.patch
+
+	sed \
+		-e 's/matplotlib.pyparsing_py[23]/pyparsing/g' \
+		-i lib/matplotlib/{mathtext,fontconfig_pattern}.py \
+		|| die "sed pyparsing failed"
+
+	# suggested by upstream
+	sed \
+		-e '/tol/s:32:35:g' \
+		-i lib/matplotlib/tests/test_mathtext.py || die
+
+	if use gtk || use gtk3; then
+		export XDG_RUNTIME_DIR="${T}/runtime-dir"
+		mkdir "${XDG_RUNTIME_DIR}" || die
+		chmod 0700 "${XDG_RUNTIME_DIR}" || die
+	fi
+
+	distutils-r1_python_prepare_all
+}
+
+python_configure_all() {
+	append-flags -fno-strict-aliasing
+}
+
+python_configure() {
+	mkdir -p "${BUILD_DIR}" || die
+
+	# create setup.cfg (see setup.cfg.template for any changes).
+
+	# common switches.
+	cat > "${BUILD_DIR}"/setup.cfg <<-EOF
+		[directories]
+		basedirlist = ${EPREFIX}/usr
+		[provide_packages]
+		pytz = False
+		dateutil = False
+		[gui_support]
+		agg = True
+		$(use_setup cairo)
+		$(use_setup pyside)
+		$(use_setup qt4)
+		$(use_setup tk)
+	EOF
+
+	if use gtk3 && use cairo; then
+		echo "gtk3cairo = True" >> "${BUILD_DIR}"/setup.cfg || die
+	else
+		echo "gtk3cairo = False" >> "${BUILD_DIR}"/setup.cfg || die
+	fi
+
+	if $(python_is_python3); then
+		cat >> "${BUILD_DIR}"/setup.cfg <<-EOF
+			six = True
+			fltk = False
+			fltkagg = False
+			gtk = False
+			gtkagg = False
+			wx = False
+			wxagg = False
+		EOF
+	else
+		cat >> "${BUILD_DIR}"/setup.cfg <<-EOF
+			six = False
+			$(use_setup fltk)
+			$(use_setup gtk)
+			$(use_setup gtk3)
+			$(use_setup wxwidgets wx)
+		EOF
+	fi
+}
+
+wrap_setup() {
+	local MPLSETUPCFG=${BUILD_DIR}/setup.cfg
+	export MPLSETUPCFG
+
+	# Note: remove build... if switching to out-of-source build
+	"${@}" build --build-lib="${BUILD_DIR}"/build/lib
+}
+
+python_compile() {
+	VIRTUALX_COMMAND="wrap_setup distutils-r1_python_compile"
+	virtualmake
+}
+
+python_compile_all() {
+	if use doc; then
+		cd doc || die
+
+		# necessary for in-source build
+		local -x PYTHONPATH="${BUILD_DIR}"/build/lib:${PYTHONPATH}
+
+		unset DISPLAY # bug #278524
+		VARTEXFONTS="${T}"/fonts \
+		"${PYTHON}" ./make.py --small html || die
+	fi
+}
+
+python_test() {
+	wrap_setup distutils_install_for_testing
+
+	cd "${TMPDIR}" || die
+	VIRTUALX_COMMAND="${PYTHON}"
+	virtualmake -c "import sys, matplotlib as m; sys.exit(0 if m.test(verbosity=2) else 1)" || \
+		die "Tests fail with ${EPYTHON}"
+}
+
+python_install() {
+	wrap_setup distutils-r1_python_install
+}
+
+python_install_all() {
+	use doc && local HTML_DOCS=( doc/build/html/. )
+
+	distutils-r1_python_install_all
+
+	if use examples; then
+		dodoc -r examples
+		docompress -x /usr/share/doc/${PF}/examples
+	fi
+}
