diff --git a/.python-dmidecode.metadata b/.python-dmidecode.metadata
new file mode 100644
index 0000000..28d59f7
--- /dev/null
+++ b/.python-dmidecode.metadata
@@ -0,0 +1 @@
+e3473db49f81b30aa50f4e05c9a91512399788ab SOURCES/python-dmidecode-3.10.13.tar.xz
diff --git a/README.md b/README.md
deleted file mode 100644
index 0e7897f..0000000
--- a/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-The master branch has no content
- 
-Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6
- 
-If you find this file in a distro specific branch, it means that no content has been checked in yet
diff --git a/SOURCES/SIGILL-catcher.patch b/SOURCES/SIGILL-catcher.patch
new file mode 100644
index 0000000..f99e474
--- /dev/null
+++ b/SOURCES/SIGILL-catcher.patch
@@ -0,0 +1,122 @@
+diff --git a/src/util.c b/src/util.c
+index 2eebf30..4d1be64 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -44,6 +44,7 @@
+ #include <string.h>
+ #include <fcntl.h>
+ #include <errno.h>
++#include <signal.h>
+ 
+ #include "types.h"
+ #include "util.h"
+@@ -87,6 +88,23 @@ int checksum(const u8 * buf, size_t len)
+         return (sum == 0);
+ }
+ 
++/* Static global variables which should only
++ * be used by the sigill_handler()
++ */
++static int sigill_error = 0;
++static Log_t *sigill_logobj = NULL;
++
++void sigill_handler(int ignore_this) {
++	sigill_error = 1;
++        if( sigill_logobj ) {
++                log_append(sigill_logobj, LOGFL_NODUPS, LOG_WARNING,
++                           "SIGILL signal caught in mem_chunk()");
++        } else {
++                fprintf(stderr,
++                        "** WARNING ** SIGILL signal caught in mem_chunk()\n");
++        }
++}
++
+ /*
+  * Copy a physical memory chunk into a memory buffer.
+  * This function allocates memory.
+@@ -100,15 +118,20 @@ void *mem_chunk(Log_t *logp, size_t base, size_t len, const char *devmem)
+         size_t mmoffset;
+         void *mmp;
+ #endif
+-
+-        if((fd = open(devmem, O_RDONLY)) == -1) {
+-		log_append(logp, LOGFL_NORMAL, LOG_WARNING, "%s: %s", devmem, strerror(errno));
+-                return NULL;
++        sigill_logobj = logp;
++	signal(SIGILL, sigill_handler);
++        if(sigill_error || (fd = open(devmem, O_RDONLY)) == -1) {
++		log_append(logp, LOGFL_NORMAL, LOG_WARNING,
++                           "Failed to open memory buffer (%s): %s",
++                           devmem, strerror(errno));
++		p = NULL;
++                goto exit;
+         }
+ 
+-        if((p = malloc(len)) == NULL) {
+-		log_append(logp, LOGFL_NORMAL, LOG_WARNING, "malloc: %s", strerror(errno));
+-                return NULL;
++        if(sigill_error || (p = malloc(len)) == NULL) {
++		log_append(logp, LOGFL_NORMAL, LOG_WARNING,"malloc: %s", strerror(errno));
++		p = NULL;
++		goto exit;
+         }
+ #ifdef USE_MMAP
+ #ifdef _SC_PAGESIZE
+@@ -122,33 +145,49 @@ void *mem_chunk(Log_t *logp, size_t base, size_t len, const char *devmem)
+          * to read from /dev/mem using regular read() calls.
+          */
+         mmp = mmap(0, mmoffset + len, PROT_READ, MAP_SHARED, fd, base - mmoffset);
+-        if(mmp == MAP_FAILED) {
++        if(sigill_error || (mmp == MAP_FAILED)) {
+                 log_append(logp, LOGFL_NORMAL, LOG_WARNING, "%s (mmap): %s", devmem, strerror(errno));
+                 free(p);
+-                return NULL;
++		p = NULL;
++		goto exit;
+         }
+ 
+         memcpy(p, (u8 *) mmp + mmoffset, len);
+-
+-        if(munmap(mmp, mmoffset + len) == -1) {
++	if (sigill_error) {
++                log_append(logp, LOGFL_NODUPS, LOG_WARNING,
++                           "Failed to do memcpy() due to SIGILL signal");
++		free(p);
++		p = NULL;
++		goto exit;
++	}
++
++        if(sigill_error || (munmap(mmp, mmoffset + len) == -1)) {
+                 log_append(logp, LOGFL_NORMAL, LOG_WARNING, "%s (munmap): %s", devmem, strerror(errno));
++		free(p);
++		p = NULL;
++		goto exit;
+         }
+ #else /* USE_MMAP */
+-        if(lseek(fd, base, SEEK_SET) == -1) {
++        if(sigill_error || (lseek(fd, base, SEEK_SET) == -1)) {
+                 log_append(logp, LOGFL_NORMAL, LOG_WARNING, "%s (lseek): %s", devmem, strerror(errno));
+                 free(p);
+-                return NULL;
++                p = NULL;
++		goto exit;
+         }
+ 
+-        if(myread(logp, fd, p, len, devmem) == -1) {
++        if(sigill_error || (myread(logp, fd, p, len, devmem) == -1)) {
+                 free(p);
+-                return NULL;
++		p = NULL;
++		goto exit;
+         }
+ #endif /* USE_MMAP */
+ 
+         if(close(fd) == -1)
+                 perror(devmem);
+ 
++ exit:
++	signal(SIGILL, SIG_DFL);
++        sigill_logobj = NULL;
+         return p;
+ }
+ 
diff --git a/SOURCES/dmispec-remove.patch b/SOURCES/dmispec-remove.patch
new file mode 100644
index 0000000..76a0191
--- /dev/null
+++ b/SOURCES/dmispec-remove.patch
@@ -0,0 +1,39 @@
+From 39869fb9346cd46097bd6d70a90f351938d30296 Mon Sep 17 00:00:00 2001
+From: David Sommerseth <davids@redhat.com>
+Date: Fri, 5 Apr 2013 18:25:23 +0200
+Subject: [PATCH 1/2] Do not add explictly 'dmispec' attributes inside
+ switch() in dmi_decode()
+
+The dmispec attribute is added outside the switch() call, and must not be
+duplicated.  If this happens, an invalid XML file will be generated.
+(Un)fortunately, libxml2 is quite forgiving to this error.  But xmllint
+will complain about it and other XML libraries (such as python-lxml)
+may reject such XML data.
+
+Signed-off-by: David Sommerseth <davids@redhat.com>
+---
+ src/dmidecode.c |    2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/dmidecode.c b/src/dmidecode.c
+index 17f2130..215c3f4 100644
+--- a/src/dmidecode.c
++++ b/src/dmidecode.c
+@@ -4784,7 +4784,6 @@ xmlNode *dmi_decode(xmlNode *prnt_n, dmi_codes_major *dmiMajor, struct dmi_heade
+ 
+         case 40:               /* 3.3.41 Additional Information */
+                 dmixml_AddAttribute(sect_n, "subtype", "AdditionalInformation");
+-                dmixml_AddAttribute(sect_n, "dmispec", "3.3.41");
+ 
+                 if(h->length < 0x0B) {
+                         break;
+@@ -4795,7 +4794,6 @@ xmlNode *dmi_decode(xmlNode *prnt_n, dmi_codes_major *dmiMajor, struct dmi_heade
+ 
+         case 41:               /* 3.3.42 Onboard Device Extended Information */
+                 dmixml_AddAttribute(sect_n, "subtype", "OnboardDeviceExtendedInformation");
+-                dmixml_AddAttribute(sect_n, "dmispec", "3.3.42");
+ 
+                 if(h->length < 0x0B) {
+                         break;
+-- 
+1.7.10.2
diff --git a/SOURCES/generate-tarball.sh b/SOURCES/generate-tarball.sh
new file mode 100755
index 0000000..b266b4b
--- /dev/null
+++ b/SOURCES/generate-tarball.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+VERSION=$1
+
+# git clone ssh://git.fedorahosted.org/git/python-dmidecode.git
+# cd python-dmidecode
+git archive --format=tar --prefix=python-dmidecode-$VERSION/ -o python-dmidecode-$VERSION.tar v$VERSION 
+tar -xvf python-dmidecode-$VERSION.tar
+rm -r python-dmidecode-$VERSION/debian
+tar -cJvf python-dmidecode-$VERSION.tar.xz python-dmidecode-$VERSION
diff --git a/SOURCES/installed-invalid.patch b/SOURCES/installed-invalid.patch
new file mode 100644
index 0000000..e318883
--- /dev/null
+++ b/SOURCES/installed-invalid.patch
@@ -0,0 +1,31 @@
+From 69a1c9ca658c9708698cde6aee32af7bb2e16f9a Mon Sep 17 00:00:00 2001
+From: David Sommerseth <davids@redhat.com>
+Date: Thu, 20 Jun 2013 12:58:12 +0200
+Subject: [PATCH] Fixed a missing break statement in a switch for DMI section
+ 3.3.7.2
+
+This missing break could cause duplicated 'installed' attributes in
+<InstalledSize/> or <EnabledSize/> XML tags.  This is only happening
+when dmi_memory_module_size() is called and only on some hardware.
+
+Signed-off-by: David Sommerseth <davids@redhat.com>
+---
+ src/dmidecode.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/dmidecode.c b/src/dmidecode.c
+index 215c3f4..dae2fef 100644
+--- a/src/dmidecode.c
++++ b/src/dmidecode.c
+@@ -1516,6 +1516,7 @@ void dmi_memory_module_size(xmlNode *node, const char *tagname, u8 code)
+         case 0x7F:
+                 dmixml_AddAttribute(data_n, "installed", "0");
+                 check_conn = 0;
++                break;
+         default:
+                 dmixml_AddAttribute(data_n, "installed", "1");
+                 dmixml_AddAttribute(data_n, "unit", "MB");
+-- 
+1.7.10.2
+
+
diff --git a/SPECS/python-dmidecode.spec b/SPECS/python-dmidecode.spec
new file mode 100644
index 0000000..fbd6dad
--- /dev/null
+++ b/SPECS/python-dmidecode.spec
@@ -0,0 +1,142 @@
+%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
+%{!?python_ver: %global python_ver %(%{__python} -c "import sys ; print sys.version[:3]")}
+
+Summary: Python module to access DMI data
+Name: python-dmidecode
+Version: 3.10.13
+Release: 9%{?dist}
+License: GPLv2
+Group: System Environment/Libraries
+URL: http://projects.autonomy.net.au/python-dmidecode/
+Source0: %{name}-%{version}.tar.xz
+Source1: generate-tarball.sh
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
+Requires: libxml2-python
+BuildRequires: libxml2-python
+BuildRequires: libxml2-devel
+BuildRequires: python-devel
+
+# already in restored upstream git
+Patch1: SIGILL-catcher.patch
+# email: upstream why not in git, planed for release
+Patch2: dmispec-remove.patch
+# email: git postponed but planned for release
+Patch3: installed-invalid.patch
+
+%description
+python-dmidecode is a python extension module that uses the
+code-base of the 'dmidecode' utility, and presents the data
+as python data structures or as XML data using libxml2.
+
+%prep
+%setup -q
+%patch1 -p1 -b .SIGILL-catcher
+%patch2 -p1 -b .dmispec-remove
+%patch3 -p1 -b .install-invalid
+
+%build
+make build
+cd unit-tests
+make
+cd ..
+
+%install
+rm -rf $RPM_BUILD_ROOT
+python src/setup.py install --root $RPM_BUILD_ROOT --prefix=%{_prefix}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files
+%defattr(-,root,root,-)
+%doc README doc/README.upstream doc/LICENSE doc/AUTHORS doc/AUTHORS.upstream
+%{python_sitearch}/dmidecodemod.so
+%{python_sitearch}/dmidecode.py
+%{python_sitearch}/dmidecode.py[co]
+%if "%{python_ver}" >= "2.5"
+%{python_sitearch}/*.egg-info
+%endif
+%{_datadir}/python-dmidecode/
+
+%changelog
+* Mon Jun 20 2013 Ales Ledvinka <aledvink@redhat.com> - 3.10.13-9
+- Attribute installed may appear as duplicate and cause invalid XML.
+
+* Mon Jun 17 2013 Ales Ledvinka <aledvink@redhat.com> - 3.10.13-8
+- Attribute dmispec may cause invalid XML on some hardware.
+- Signal handler for SIGILL.
+
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.10.13-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.10.13-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Thu Jul 19 2012 Ales Ledvinka <aledvink@redhat.com> 3.10.14-5
+- Upstream relocated. Document source tag and tarball generation.
+
+* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.10.13-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.10.13-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Thu Jul 22 2010 David Malcolm <dmalcolm@redhat.com> - 3.10.13-2
+- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
+
+* Tue Jun 15 2010 Roman Rakus <rrakus@redhat.com> - 3.10.13-1
+- Update to new release
+
+* Fri Mar 12 2010 Nima Talebi <nima@it.net.au> - 3.10.12-1
+- Update to new release
+
+* Tue Feb 16 2010 Nima Talebi <nima@it.net.au> - 3.10.11-1
+- Update to new release
+
+* Tue Jan 12 2010 Nima Talebi <nima@it.net.au> - 3.10.10-1
+- Update to new release
+
+* Thu Jan 07 2010 Nima Talebi <nima@it.net.au> - 3.10.9-1
+- Update to new release
+
+
+* Thu Dec 15 2009 Nima Talebi <nima@it.net.au> - 3.10.8-1
+- New Upstream release.
+- Big-endian and little-endian approved.
+- Packaged unit-test to tarball.
+- Rewritten unit-test to be able to run as non-root user, where it will not
+  try to read /dev/mem.
+- Added two dmidump data files to the unit-test.
+
+* Thu Nov 26 2009 David Sommerseth <davids@redhat.com> - 3.10.7-3
+- Fixed even more .spec file issues and removed explicit mentioning
+  of /usr/share/python-dmidecode/pymap.xml
+
+* Wed Nov 25 2009 David Sommerseth <davids@redhat.com> - 3.10.7-2
+- Fixed some .spec file issues (proper Requires, use _datadir macro)
+
+* Wed Sep 23 2009 Nima Talebi <nima@it.net.au> - 3.10.7-1
+- Updated source0 to new 3.10.7 tar ball
+
+* Wed Jul 13 2009 David Sommerseth <davids@redhat.com> - 3.10.6-6
+- Only build the python-dmidecode module, not everything
+
+* Wed Jul 13 2009 David Sommerseth <davids@redhat.com> - 3.10.6-5
+- Added missing BuildRequres for libxml2-python
+
+* Wed Jul 13 2009 David Sommerseth <davids@redhat.com> - 3.10.6-4
+- Added missing BuildRequres for python-devel
+
+* Wed Jul 13 2009 David Sommerseth <davids@redhat.com> - 3.10.6-3
+- Added missing BuildRequres for libxml2-devel
+
+* Wed Jul 13 2009 David Sommerseth <davids@redhat.com> - 3.10.6-2
+- Updated release, to avoid build conflict
+
+* Wed Jun 10 2009 David Sommerseth <davids@redhat.com> - 3.10.6-1
+- Updated to work with the new XML based python-dmidecode
+
+* Sat Mar  7 2009 Clark Williams <williams@redhat.com> - 2.10.3-1
+- Initial build.
+