diff --git a/SOURCES/BZ-1063181-upgrades-for-install-only.patch b/SOURCES/BZ-1063181-upgrades-for-install-only.patch
new file mode 100644
index 0000000..f7e3023
--- /dev/null
+++ b/SOURCES/BZ-1063181-upgrades-for-install-only.patch
@@ -0,0 +1,42 @@
+commit fada4b8dbd30d0335a9c07067a74dccec0abbedb
+Author: James Antill <james@and.org>
+Date:   Mon Sep 29 11:40:54 2014 -0400
+
+    Don't look for upgrades for install only packages. BZ 1063181.
+
+diff --git a/yum/__init__.py b/yum/__init__.py
+index a8a4e80..83a546a 100644
+--- a/yum/__init__.py
++++ b/yum/__init__.py
+@@ -4654,6 +4654,9 @@ much more problems).
+             # don't have to.
+             return po.pkgtup in self.up.updating_dict
+ 
++        if self.allowedMultipleInstalls(po):
++            return False
++
+         for ipkg in ipkgs:
+             if po.verLE(ipkg):
+                 continue
+diff -up yum-3.4.3/test/simpleupdatetests.py.old yum-3.4.3/test/simpleupdatetests.py
+--- yum-3.4.3/test/simpleupdatetests.py.old	2014-09-30 11:01:39.000000000 +0200
++++ yum-3.4.3/test/simpleupdatetests.py	2014-09-30 11:02:19.513283044 +0200
+@@ -1230,3 +1230,18 @@ class SimpleUpdateTests(OperationsTests)
+ 
+         self.assert_(self._pkg2txmbr(foo11).reason == 'user')
+         self.assert_(self._pkg2txmbr(bar11).reason == 'blahg')
++
++    def testInstall_kernel_intermediate(self):
++        #  Make sure we don't break this again...
++        k11 = FakePackage('kernel', '1', '1', '0', 'i386')
++        k12 = FakePackage('kernel', '1', '2', '0', 'i386')
++        k13 = FakePackage('kernel', '1', '3', '0', 'i386')
++        k14 = FakePackage('kernel', '1', '4', '0', 'i386')
++        k15 = FakePackage('kernel', '1', '5', '0', 'i386')
++
++        res, msg = self.runOperation(['install', 'kernel-1-2'],
++                                     [k11, k13, k14],
++                                     [k11, k12, k13, k14, k15])
++
++        self.assert_(res=='ok', msg)
++        self.assertResult((k11, k12, k13, k14))
diff --git a/SOURCES/BZ-1087911-update-minimal-manpage.patch b/SOURCES/BZ-1087911-update-minimal-manpage.patch
new file mode 100644
index 0000000..58e7896
--- /dev/null
+++ b/SOURCES/BZ-1087911-update-minimal-manpage.patch
@@ -0,0 +1,16 @@
+@@ -, +, @@ 
+---
+ docs/yum.8 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+--- a/docs/yum.8	
++++ a/docs/yum.8	
+@@ -25,7 +25,7 @@ gnome\-packagekit application\&.
+ .br 
+ .I \fR * update-to [package1] [package2] [\&.\&.\&.]
+ .br 
+-.I \fR * minimal-update [package1] [package2] [\&.\&.\&.]
++.I \fR * update-minimal [package1] [package2] [\&.\&.\&.]
+ .br 
+ .I \fR * check\-update
+ .br 
+-- 
diff --git a/SOURCES/BZ-1095146-file-uris-normpath.patch b/SOURCES/BZ-1095146-file-uris-normpath.patch
new file mode 100644
index 0000000..e4d704d
--- /dev/null
+++ b/SOURCES/BZ-1095146-file-uris-normpath.patch
@@ -0,0 +1,18 @@
+commit bec81af1bffdd3c3511ad8861fb66b376bee89e9
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Thu Mar 27 16:56:19 2014 +0100
+
+    normpath() file URIs. BZ 1009499
+
+diff --git a/yum/__init__.py b/yum/__init__.py
+index 84ca658..ac01435 100644
+--- a/yum/__init__.py
++++ b/yum/__init__.py
+@@ -562,6 +562,7 @@ class YumBase(depsolve.Depsolve):
+             # if we don't do this then anaconda likes to not  work.
+             if os.path.exists(self.conf.installroot+'/'+reposdir):
+                 reposdir = self.conf.installroot + '/' + reposdir
++            reposdir = os.path.normpath(reposdir)
+ 
+             if os.path.isdir(reposdir):
+                 for repofn in sorted(glob.glob('%s/*.repo' % reposdir)):
diff --git a/SOURCES/BZ-1095157-traceback-when-empty-history.patch b/SOURCES/BZ-1095157-traceback-when-empty-history.patch
new file mode 100644
index 0000000..708fd2a
--- /dev/null
+++ b/SOURCES/BZ-1095157-traceback-when-empty-history.patch
@@ -0,0 +1,80 @@
+commit 1c557629752d26dca86948c5e933d8f31448818d
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Thu Apr 17 16:15:22 2014 +0200
+
+    Fix traceback when the history dir is empty. BZ 875610
+
+diff --git a/yum/history.py b/yum/history.py
+index 3f20128..2f423d9 100644
+--- a/yum/history.py
++++ b/yum/history.py
+@@ -697,7 +697,9 @@ class YumHistory:
+             break
+ 
+         if self._db_file is None:
+-            self._create_db_file()
++            if not self._create_db_file():
++                # Couldn't create a db file
++                return
+         
+         # make an addon path for where we're going to stick 
+         # random additional history info - probably from plugins and what-not
+@@ -1603,8 +1605,10 @@ class YumHistory:
+             if os.path.exists(_db_file + '-journal'):
+                 os.rename(_db_file  + '-journal', _db_file + '-journal.old')
+         self._db_file = _db_file
++        if not self.conf.writable:
++            return False
+         
+-        if self.conf.writable and not os.path.exists(self._db_file):
++        if not os.path.exists(self._db_file):
+             # make them default to 0600 - sysadmin can change it later
+             # if they want
+             fo = os.open(self._db_file, os.O_CREAT, 0600)
+@@ -1659,6 +1663,7 @@ class YumHistory:
+         for op in self._update_ops_3:
+             cur.execute(op)
+         self._commit()
++        return True
+ 
+ # Pasted from sqlitesack
+ _FULL_PARSE_QUERY_BEG = """
+commit 8c6cd83a4825155d1ee9ddcd29b023682944e3e6
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Wed Mar 12 15:41:30 2014 +0100
+
+    Fix traceback when history files don't exist and user is not root.
+
+diff --git a/yum/history.py b/yum/history.py
+index 6f60f54..3f20128 100644
+--- a/yum/history.py
++++ b/yum/history.py
+@@ -668,6 +668,7 @@ class YumHistory:
+ 
+         self.releasever = releasever
+ 
++        self._db_file = None
+         if not os.path.exists(self.conf.db_path):
+             try:
+                 os.makedirs(self.conf.db_path)
+@@ -680,7 +681,6 @@ class YumHistory:
+                 self.conf.writable = True
+ 
+         DBs = glob.glob('%s/history-*-*-*.sqlite' % self.conf.db_path)
+-        self._db_file = None
+         for d in reversed(sorted(DBs)):
+             fname = os.path.basename(d)
+             fname = fname[len("history-"):-len(".sqlite")]
+diff --git a/yumcommands.py b/yumcommands.py
+index 4e72a71..75b3ce2 100644
+--- a/yumcommands.py
++++ b/yumcommands.py
+@@ -3051,7 +3051,7 @@ class HistoryCommand(YumCommand):
+         if extcmds and extcmds[0] in ('repeat', 'redo', 'undo', 'rollback', 'new'):
+             checkRootUID(base)
+             checkGPGKey(base)
+-        elif not os.access(base.history._db_file, os.R_OK):
++        elif not (base.history._db_file and os.access(base.history._db_file, os.R_OK)):
+             base.logger.critical(_("You don't have access to the history DB."))
+             raise cli.CliError
+ 
diff --git a/SOURCES/BZ-1095161-setopt-spaces-handling.patch b/SOURCES/BZ-1095161-setopt-spaces-handling.patch
new file mode 100644
index 0000000..1811bc2
--- /dev/null
+++ b/SOURCES/BZ-1095161-setopt-spaces-handling.patch
@@ -0,0 +1,19 @@
+commit 0954b42554b7f78809d9050886b419a99e28d289
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Tue May 13 15:50:52 2014 +0200
+
+    Make --setopt handle spaces properly. BZ 1094373
+
+diff --git a/cli.py b/cli.py
+index c1ef023..aa73278 100755
+--- a/cli.py
++++ b/cli.py
+@@ -193,7 +193,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+             if len(vals) < 2:
+                 bad_setopt_ne.append(item)
+                 continue
+-            k,v = vals
++            k, v = [i.strip() for i in vals]
+             period = k.rfind('.')
+             if period != -1:
+                 repo = k[:period]
diff --git a/SOURCES/BZ-1096147-history-search-crash.patch b/SOURCES/BZ-1096147-history-search-crash.patch
new file mode 100644
index 0000000..f237571
--- /dev/null
+++ b/SOURCES/BZ-1096147-history-search-crash.patch
@@ -0,0 +1,36 @@
+commit 5efc1e1b88398da7f89dcb9055d62481bb288a8a
+Author: James Antill <james@and.org>
+Date:   Tue Sep 16 16:33:33 2014 -0400
+
+    Workaround history searching for [abc] character lists failures. BZ 1096147.
+
+diff --git a/yum/history.py b/yum/history.py
+index 2f423d9..fd80191 100644
+--- a/yum/history.py
++++ b/yum/history.py
+@@ -20,6 +20,7 @@
+ import time
+ import os, os.path
+ import glob
++import re
+ from weakref import proxy as weakref
+ 
+ from sqlutils import sqlite, executeSQL, sql_esc_glob
+@@ -1422,6 +1423,17 @@ class YumHistory:
+         if cur is None:
+             return set()
+ 
++        #  This is kind of a hack, we can't do 'y[u]m' in SQL. In real yum
++        # we manually load everything and then do it inside yum (which is slow
++        # and a lot of code, but nobody uses it anyway and we already had the
++        # code). Here we don't have the code though, and still nobody will use
++        # it. So we cheat:
++        #  1. Convert 'y[u]m' into 'y?m' ... it returns more answers than it
++        #     should, but the correct answers are there.
++        #  2. Convert 'y[m' info 'y!m' ... neither will match anything, so w/e.
++        patterns = [re.sub('\[[^]]+\]', '?', x).replace('[', '!')
++                    for x in patterns]
++
+         data = _setupHistorySearchSQL(patterns, ignore_case)
+         (need_full, npatterns, fields, names) = data
+ 
diff --git a/SOURCES/BZ-1097383-usr-readonly.patch b/SOURCES/BZ-1097383-usr-readonly.patch
new file mode 100644
index 0000000..145eb70
--- /dev/null
+++ b/SOURCES/BZ-1097383-usr-readonly.patch
@@ -0,0 +1,77 @@
+commit 507182919894e9bf75b08a75cb22c49d852c8278
+Author: James Antill <james@and.org>
+Date:   Wed May 21 15:14:55 2014 -0400
+
+    Check /usr for writability before running a transaction.
+
+diff --git a/docs/yum.conf.5 b/docs/yum.conf.5
+index 4ec7689..c39544d 100644
+--- a/docs/yum.conf.5
++++ b/docs/yum.conf.5
+@@ -892,6 +892,11 @@ shouldn't be needed as yum should always solve or fail, however it has been
+ observed that it can loop forever with very large system upgrades. Setting
+ this to `0' (or "<forever>") makes yum try forever. Default is `100'.
+ 
++.IP
++\fBusr_w_check\fR
++Either `0' or `1'. Set this to `0' to disable the checking for writability on
++/usr in the installroot (when going into the depsolving stage). Default is `1'
++(perform the check).
+ 
+ .SH "[repository] OPTIONS"
+ .LP 
+diff --git a/yum/config.py b/yum/config.py
+index 7bb56d0..f0f4e96 100644
+--- a/yum/config.py
++++ b/yum/config.py
+@@ -906,6 +906,8 @@ class YumConf(StartupConf):
+ 
+     check_config_file_age = BoolOption(True)
+ 
++    usr_w_check = BoolOption(True)
++
+     _reposlist = []
+ 
+     def dump(self):
+diff --git a/yummain.py b/yummain.py
+index fa76af8..ee8d632 100755
+--- a/yummain.py
++++ b/yummain.py
+@@ -209,6 +209,17 @@ def main(args):
+             logger.critical(msg)
+         if unlock(): return 200
+         return 3
++
++    # Mainly for ostree, but might be useful for others.
++    if base.conf.usr_w_check:
++        usrinstpath = base.conf.installroot + "/usr"
++        usrinstpath = usrinstpath.replace('//', '/')
++        if not os.access(usrinstpath, os.W_OK):
++            logger.critical(_('No write access to %s directory') % usrinstpath)
++            logger.critical(_('  Maybe this is an ostree image?'))
++            logger.critical(_('  To disable you can use --setopt=usr_w_check=false'))
++            if unlock(): return 200
++            return 1
+             
+     # Depsolve stage
+     verbose_logger.log(logginglevels.INFO_2, _('Resolving Dependencies'))
+commit 6e64b142014dc3c5489aed7966f0948948054fb7
+Author: James Antill <james@and.org>
+Date:   Wed May 21 18:29:28 2014 -0400
+
+    Check for existance, so mock etc. is happy.
+
+diff --git a/yummain.py b/yummain.py
+index ee8d632..24bbe6c 100755
+--- a/yummain.py
++++ b/yummain.py
+@@ -214,7 +214,8 @@ def main(args):
+     if base.conf.usr_w_check:
+         usrinstpath = base.conf.installroot + "/usr"
+         usrinstpath = usrinstpath.replace('//', '/')
+-        if not os.access(usrinstpath, os.W_OK):
++        if (os.path.exists(usrinstpath) and
++            not os.access(usrinstpath, os.W_OK)):
+             logger.critical(_('No write access to %s directory') % usrinstpath)
+             logger.critical(_('  Maybe this is an ostree image?'))
+             logger.critical(_('  To disable you can use --setopt=usr_w_check=false'))
diff --git a/SOURCES/BZ-1102585-variable-substitution.patch b/SOURCES/BZ-1102585-variable-substitution.patch
new file mode 100644
index 0000000..97c120b
--- /dev/null
+++ b/SOURCES/BZ-1102585-variable-substitution.patch
@@ -0,0 +1,69 @@
+commit 28cc43d16664a408f7e4315767230544d7f52618
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Mon May 19 16:21:46 2014 +0200
+
+    Replace vars in include lines in .repo files. BZ 977380
+
+diff --git a/yum/parser.py b/yum/parser.py
+index b165ef2..5110cb5 100644
+--- a/yum/parser.py
++++ b/yum/parser.py
+@@ -18,6 +18,8 @@ def varReplace(raw, vars):
+     @return: Input raw string with substituted values.
+     '''
+ 
++    if not vars:
++        return raw
+     done = []                      # Completed chunks to return
+ 
+     while raw:
+@@ -136,6 +138,7 @@ class ConfigPreProcessor:
+                              'Error parsing config %s: include must specify file to include.' % (self.name)
+                     else:
+                         # whooohoo a valid include line.. push it on the stack
++                        url = varReplace(url, self._vars)
+                         fo = self._pushfile( url )
+                 else:
+                     # check if the current line starts a new section
+@@ -156,9 +159,7 @@ class ConfigPreProcessor:
+             line = line.lstrip()
+         # at this point we have a line from the topmost file on the stack
+         # or EOF if the stack is empty
+-        if self._vars:
+-            return varReplace(line, self._vars)
+-        return line
++        return varReplace(line, self._vars)
+     
+     
+     def _absurl( self, url ):
+commit 04c46c81f556e3e5ee72630f9501e243d00528a7
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Wed Jun 11 11:13:00 2014 +0200
+
+    Read env vars in readStartupConfig() to make them work in yum.conf. BZ 1102575
+
+diff --git a/yum/config.py b/yum/config.py
+index f0f4e96..6e0ecdc 100644
+--- a/yum/config.py
++++ b/yum/config.py
+@@ -1042,6 +1042,11 @@ def readStartupConfig(configfile, root, releasever=None):
+     startupconf.config_file_path = configfile
+     parser = ConfigParser()
+     confpp_obj = ConfigPreProcessor(configfile)
++
++    yumvars = _getEnvVar()
++    confpp_obj._vars = yumvars
++    startupconf.yumvars = yumvars
++
+     try:
+         parser.readfp(confpp_obj)
+     except ParsingError, e:
+@@ -1076,7 +1081,7 @@ def readMainConfig(startupconf):
+     # ' xemacs syntax hack
+ 
+     # Set up substitution vars
+-    yumvars = _getEnvVar()
++    yumvars = startupconf.yumvars
+     yumvars['basearch'] = startupconf.basearch
+     yumvars['arch'] = startupconf.arch
+     yumvars['releasever'] = startupconf.releasever
diff --git a/SOURCES/BZ-1113395-verify-permissions-mask.patch b/SOURCES/BZ-1113395-verify-permissions-mask.patch
new file mode 100644
index 0000000..c625d61
--- /dev/null
+++ b/SOURCES/BZ-1113395-verify-permissions-mask.patch
@@ -0,0 +1,28 @@
+commit bb6908d630966d9e385659516c2759c47c0e2ee7
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Fri Mar 28 10:41:39 2014 +0100
+
+    Mask st_mode to fix verifying permissions for ghost files. BZ 1045415
+
+diff --git a/yum/packages.py b/yum/packages.py
+index 69c612f..9522235 100644
+--- a/yum/packages.py
++++ b/yum/packages.py
+@@ -2033,11 +2033,14 @@ class YumInstalledPackage(YumHeaderPackage):
+                     problems.append(prob)
+ 
+                 my_mode = my_st.st_mode
++                pf_mode = pf.mode
++                perm_mask = 0777
+                 if 'ghost' in ftypes: #  This is what rpm does, although it
+-                    my_mode &= 0777   # doesn't usually get here.
+-                if check_perms and pf.verify_mode and my_mode != pf.mode:
++                    my_mode &= perm_mask   # doesn't usually get here.
++                    pf_mode &= perm_mask
++                if check_perms and pf.verify_mode and my_mode != pf_mode:
+                     prob = _PkgVerifyProb('mode', 'mode does not match', ftypes)
+-                    prob.database_value = pf.mode
++                    prob.database_value = pf_mode
+                     prob.disk_value     = my_st.st_mode
+                     problems.append(prob)
+ 
diff --git a/SOURCES/BZ-1130939-dont-create-lockdir-directories.patch b/SOURCES/BZ-1130939-dont-create-lockdir-directories.patch
new file mode 100644
index 0000000..fc70f26
--- /dev/null
+++ b/SOURCES/BZ-1130939-dont-create-lockdir-directories.patch
@@ -0,0 +1,51 @@
+commit ffb40e6a1b9c3f4b5b08151a04a5922fc5a9b521
+Author: James Antill <james@and.org>
+Date:   Wed Jan 29 16:04:18 2014 -0500
+
+    Don't create lockdir directories, as they are magic now. BZ 975864
+
+diff --git a/yum/__init__.py b/yum/__init__.py
+index 222a378..0604d63 100644
+--- a/yum/__init__.py
++++ b/yum/__init__.py
+@@ -2136,7 +2136,11 @@ much more problems).
+         lockfile = os.path.normpath(lockfile) # get rid of silly preceding extra /
+         
+         mypid=str(os.getpid())    
+-        while not self._lock(lockfile, mypid, 0644):
++        while True:
++            ret = self._lock(lockfile, mypid, 0644)
++            if ret:
++                break
++
+             oldpid = self._get_locker(lockfile)
+             if not oldpid:
+                 # Invalid locker: unlink lockfile and retry
+@@ -2147,6 +2151,13 @@ much more problems).
+             # Another copy seems to be running.
+             msg = _('Existing lock %s: another copy is running as pid %s.') % (lockfile, oldpid)
+             raise Errors.LockError(0, msg, oldpid)
++
++        if ret == 2:
++            #  Means lockdir isn't setup, out of bad options just run without
++            # locks.
++            return
++
++        assert ret == 1
+         # We've got the lock, store it so we can auto-unlock on __del__...
+         self._lockfile = lockfile
+     
+@@ -2186,7 +2197,12 @@ much more problems).
+         lockdir = os.path.dirname(filename)
+         try:
+             if not os.path.exists(lockdir):
+-                os.makedirs(lockdir, mode=0755)
++                #  We used to os.makedirs(lockdir, mode=0755) ... but that
++                # causes problems now due to /var/run being a magic systemd dir.
++                #  So we now just give up and run, hopefully nobody runs N
++                # instances before the magic dir. is activate.
++                return 2
++
+             fd = os.open(filename, os.O_EXCL|os.O_CREAT|os.O_WRONLY, mode)    
+             os.write(fd, contents)
+             os.close(fd)
diff --git a/SOURCES/BZ-1138205-needs-restarting.patch b/SOURCES/BZ-1138205-needs-restarting.patch
new file mode 100644
index 0000000..4defc36
--- /dev/null
+++ b/SOURCES/BZ-1138205-needs-restarting.patch
@@ -0,0 +1,75 @@
+commit 7ef0f4ad556e3d4bfe0eeebd1f110de745adec3c
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Wed Mar 19 16:24:58 2014 +0100
+
+    Make utils.get_process_info() respect executable names with spaces.
+
+diff --git a/utils.py b/utils.py
+index 0b7191c..b00d312 100755
+--- a/utils.py
++++ b/utils.py
+@@ -114,18 +114,20 @@ def get_process_info(pid):
+             break
+     if boot_time is None:
+         return
+-    ps_stat = open("/proc/%d/stat" % pid).read().split()
+-    ps['utime'] = jiffies_to_seconds(ps_stat[13])
+-    ps['stime'] = jiffies_to_seconds(ps_stat[14])
+-    ps['cutime'] = jiffies_to_seconds(ps_stat[15])
+-    ps['cstime'] = jiffies_to_seconds(ps_stat[16])
+-    ps['start_time'] = boot_time + jiffies_to_seconds(ps_stat[21])
++    ps_stat = open("/proc/%d/stat" % pid).read().strip()
++    # Filename of the executable might contain spaces, so we throw it away
++    ps_stat = ps_stat[ps_stat.rfind(')') + 2:].split()
++    ps['utime'] = jiffies_to_seconds(ps_stat[11])
++    ps['stime'] = jiffies_to_seconds(ps_stat[12])
++    ps['cutime'] = jiffies_to_seconds(ps_stat[13])
++    ps['cstime'] = jiffies_to_seconds(ps_stat[14])
++    ps['start_time'] = boot_time + jiffies_to_seconds(ps_stat[19])
+     ps['state'] = {'R' : _('Running'),
+                    'S' : _('Sleeping'),
+                    'D' : _('Uninterruptible'),
+                    'Z' : _('Zombie'),
+                    'T' : _('Traced/Stopped')
+-                   }.get(ps_stat[2], _('Unknown'))
++                   }.get(ps_stat[0], _('Unknown'))
+                    
+     return ps
+ 
+commit cf0464bea74f6e8d4650afee4e66d66bff2bc9a1
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Wed Mar 19 17:19:32 2014 +0100
+
+    Refactored utils.get_process_info() to make parts of it reusable.
+
+diff --git a/utils.py b/utils.py
+index b00d312..dbcd605 100755
+--- a/utils.py
++++ b/utils.py
+@@ -107,13 +107,21 @@ def get_process_info(pid):
+         return
+     if 'vmsize' not in ps:
+         return
+-    boot_time = None
+-    for line in open("/proc/stat"):
+-        if line.startswith("btime "):
+-            boot_time = int(line[len("btime "):-1])
+-            break
++    boot_time = get_boot_time()
+     if boot_time is None:
+         return
++    ps.update(get_process_time(pid, boot_time))
++    return ps
++
++
++def get_boot_time():
++    for line in open("/proc/stat"):
++        if line.startswith("btime "):
++            return int(line[len("btime "):-1])
++
++
++def get_process_time(pid, boot_time):
++    ps = {}
+     ps_stat = open("/proc/%d/stat" % pid).read().strip()
+     # Filename of the executable might contain spaces, so we throw it away
+     ps_stat = ps_stat[ps_stat.rfind(')') + 2:].split()
diff --git a/SOURCES/BZ-1147992-debuginfo-install-dolock-exception.patch b/SOURCES/BZ-1147992-debuginfo-install-dolock-exception.patch
new file mode 100644
index 0000000..24aeb0e
--- /dev/null
+++ b/SOURCES/BZ-1147992-debuginfo-install-dolock-exception.patch
@@ -0,0 +1,18 @@
+commit 221d46dde594ca9b69915ac128fc1a9a19f984a1
+Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
+Date:   Mon Feb 17 12:31:59 2014 +0100
+
+    Fix debuginfo-install doLock() traceback. BZ 1062479
+
+diff --git a/yum/__init__.py b/yum/__init__.py
+index 3b6ed82..37ab468 100644
+--- a/yum/__init__.py
++++ b/yum/__init__.py
+@@ -2165,6 +2165,7 @@ much more problems).
+                 self._unlock(lockfile)
+                 continue
+             if oldpid == os.getpid(): # if we own the lock, we're fine
++                ret = 1
+                 break
+             # Another copy seems to be running.
+             msg = _('Existing lock %s: another copy is running as pid %s.') % (lockfile, oldpid)
diff --git a/SOURCES/yum.conf.centos b/SOURCES/yum.conf.centos
deleted file mode 100644
index 367126f..0000000
--- a/SOURCES/yum.conf.centos
+++ /dev/null
@@ -1,26 +0,0 @@
-[main]
-cachedir=/var/cache/yum/$basearch/$releasever
-keepcache=0
-debuglevel=2
-logfile=/var/log/yum.log
-exactarch=1
-obsoletes=1
-gpgcheck=1
-plugins=1
-installonly_limit=5
-bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
-distroverpkg=centos-release
-
-
-#  This is the default, if you make this bigger yum won't see if the metadata
-# is newer on the remote and so you'll "gain" the bandwidth of not having to
-# download the new metadata and "pay" for it by yum not having correct
-# information.
-#  It is esp. important, to have correct metadata, for distributions like
-# Fedora which don't keep old packages around. If you don't like this checking
-# interupting your command line usage, it's much better to have something
-# manually check the metadata once an hour (yum-updatesd will do this).
-# metadata_expire=90m
-
-# PUT YOUR REPOS HERE OR IN separate files named file.repo
-# in /etc/yum.repos.d
diff --git a/SPECS/yum.spec b/SPECS/yum.spec
index 6dbb5b0..d34bde3 100644
--- a/SPECS/yum.spec
+++ b/SPECS/yum.spec
@@ -36,11 +36,11 @@ BuildRequires: bash-completion
 Summary: RPM package installer/updater/manager
 Name: yum
 Version: 3.4.3
-Release: 118%{?dist}
+Release: 125%{?dist}
 License: GPLv2+
 Group: System Environment/Base
 Source0: http://yum.baseurl.org/download/3.4/%{name}-%{version}.tar.gz
-Source1: yum.conf.centos
+Source1: yum.conf.fedora
 Source2: yum-updatesd.conf.fedora
 Patch1: yum-distro-configs.patch
 Patch5: geode-arch.patch
@@ -63,6 +63,20 @@ patch39: BZ-1062959-add-fs-command.patch
 patch40: BZ-1052436-group-bundle-docs.patch
 patch41: BZ-1058297-remove-del-for-weird-anaconda-C-NULL-exception.patch
 
+# rhel-7.1
+Patch100: BZ-1130939-dont-create-lockdir-directories.patch
+Patch101: BZ-1113395-verify-permissions-mask.patch
+Patch102: BZ-1097383-usr-readonly.patch
+Patch103: BZ-1095161-setopt-spaces-handling.patch
+Patch104: BZ-1095157-traceback-when-empty-history.patch
+Patch106: BZ-1138205-needs-restarting.patch
+Patch107: BZ-1102585-variable-substitution.patch
+Patch108: BZ-1096147-history-search-crash.patch
+Patch109: BZ-1087911-update-minimal-manpage.patch
+Patch110: BZ-1063181-upgrades-for-install-only.patch
+Patch111: BZ-1147992-debuginfo-install-dolock-exception.patch
+Patch112: BZ-1095146-file-uris-normpath.patch
+
 URL: http://yum.baseurl.org/
 BuildArchitectures: noarch
 BuildRequires: python
@@ -85,7 +99,6 @@ Requires: python-iniparse
 Requires: python-sqlite
 Requires: python-urlgrabber >= 3.9.0-8
 Requires: yum-metadata-parser >= 1.1.0
-Requires: yum-plugin-fastestmirror
 Requires: pygpgme
 # rawhide is >= 0.5.3-7.fc18 ... as this is added.
 Requires: pyliblzma
@@ -205,6 +218,20 @@ Install this package if you want auto yum updates nightly via cron.
 %patch40 -p1
 %patch41 -p1
 
+# rhel-7.1
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+%patch110 -p1
+%patch111 -p1
+%patch112 -p1
+
 # Do distro config. changes after everything else.
 %patch1 -p1
 
@@ -431,11 +458,47 @@ exit 0
 %endif
 
 %changelog
-* Fri Jun 27 2014 Karanbir Singh <kbsingh@centos.org> - 3.4.3-118.el7.centos
-- Make yum require yum-plugin-fastestmirror
-- use the CentOS bug tracker url 
-- retain 5 for installonlyn
-- ensure distrover is always from centos-release
+* Mon Jan 12 2015 Valentina Mukhamedzhanova <vmukhame@redhat.com> - 3.4.3-125
+- Roll back the broken lvm patch.
+- Related: bug#1047793
+
+* Thu Nov 13 2014 Valentina Mukhamedzhanova <vmukhame@redhat.com> - 3.4.3-124
+- normpath() file URIs.
+- Resolves: bug#1095146
+
+* Mon Nov 10 2014 Valentina Mukhamedzhanova <vmukhame@redhat.com> - 3.4.3-123
+- Fix debuginfo-install doLock() traceback.
+- Resolves: bug#1147992
+
+* Mon Sep 29 2014 Valentina Mukhamedzhanova <vmukhame@redhat.com> - 3.4.3-122
+- Don't look for upgrades for install only packages.
+- Resolves: bug#1063181
+
+* Wed Sep 24 2014 Valentina Mukhamedzhanova <vmukhame@redhat.com> - 3.4.3-121
+- Fix variable substitution.
+- Resolves: bug#1102585
+- Fix history searching for [abc] character lists failures.
+- Resolves: bug#1096147
+- Fix update-minimal command in the man page.
+- Resolves: bug#1087911
+
+* Thu Sep  4 2014 Valentina Mukhamedzhanova <vmukhame@redhat.com> - 3.4.3-120
+- Fix and refactor utils.get_process_info().
+- Resolves: bug#1138205
+
+* Thu Sep  4 2014 Valentina Mukhamedzhanova <vmukhame@redhat.com> - 3.4.3-119
+- Don't create lockdir directories.
+- Resolves: rhbz#1130939
+- Mask st_mode to fix verifying permissions for ghost files.
+- Resolves: rhbz#1113395
+- Check /usr for writability before running a transaction.
+- Resolves: rhbz#1097383
+- Make --setopt handle spaces properly.
+- Resolves: rhbz#1095161
+- Fix traceback when the history dir is empty.
+- Resolves: rhbz#1095157
+- Test for lvm binary before using.
+- Resolves: rhbz#1047793
 
 * Tue Apr 15 2014 James Antill <james.antill@redhat.com> - 3.4.3-118
 - Remove CHUNK argument from open() for weird anaconda C NULL exception.