 
          | Season | League | Team | A | G | Assists | Y/YR/R | MP | 
|---|---|---|---|---|---|---|---|
| 2020/2021 | FA Cup |  Carlisle United | 1 | 0 | 0 | 1/0/0 | 78 | 
| 2020/2021 | EFL Trophy |  Carlisle United | 1 | 0 | 0 | 0/0/0 | 44 | 
| 2020/2021 | League Two |  Carlisle United | 17 | 0 | 2 | 1/0/0 | 675 | 
| 2020/2021 | Carabao Cup |  Carlisle United | 1 | 0 | 0 | 0/0/0 | 45 | 
| 2019/2020 | Premier League |  SuperSport United | 22 | 2 | 0 | 5/0/0 | 1972 | 
| 2019/2020 | MTN8 Cup |  SuperSport United | 4 | 0 | 0 | 1/0/0 | 360 | 
| 2019/2020 | Nedbank Cup |  SuperSport United | 1 | 0 | 0 | 0/0/0 | 90 | 
| 2019 | League Cup |  SuperSport United | 2 | 0 | 0 | 1/0/0 | 180 | 
| 2018/2019 | MTN8 Cup |  SuperSport United | 3 | 1 | 0 | 0/0/0 | 300 | 
| 2018/2019 | Premier League |  SuperSport United | 13 | 0 | 0 | 4/1/0 | 1038 | 
| 2018/2019 | Nedbank Cup |  SuperSport United | 1 | 0 | 0 | 0/0/0 | 90 | 
| 2018 | League Cup |  SuperSport United | 8 | 0 | 0 | 3/0/0 | 641 | 
| 2017/2018 | MTN8 Cup |  SuperSport United | 2 | 0 | 0 | 3/0/0 | 180 | 
| 2017/2018 | Premier League |  SuperSport United | 27 | 1 | 1 | 7/1/0 | 2414 | 
| 2017 | CAF Confederations Cup |  SuperSport United | 8 | 0 | 1 | 3/0/0 | 720 | 
| 2016/2017 | Premier League |  SuperSport United | 27 | 1 | 0 | 8/0/0 | 2430 | 
| 2016/2017 | Nedbank Cup |  SuperSport United | 1 | 0 | 0 | 0/0/0 | 90 | 
| 2015/2016 | Premier League |  SuperSport United | 24 | 1 | 0 | 9/1/0 | 0 | 
| 2014/2015 | League One |  Doncaster Rovers | 34 | 2 | 2 | 6/0/0 | 2791 | 
| 2014/2015 | FA Cup |  Doncaster Rovers | 2 | 0 | 0 | 0/0/0 | 0 | 
| 2014/2015 | Carabao Cup |  Doncaster Rovers | 3 | 0 | 1 | 0/0/0 | 0 | 
| 2013/2014 | Carabao Cup |  Doncaster Rovers | 2 | 0 | 0 | 0/0/0 | 0 | 
| 2013/2014 | Championship |  Doncaster Rovers | 32 | 1 | 0 | 5/1/0 | 2184 | 
| 2012/2013 | FA Cup |  Oldham Athletic | 5 | 0 | 0 | 1/0/0 | 0 | 
| 2012/2013 | League One |  Doncaster Rovers | 8 | 0 | 0 | 1/0/0 | 568 | 
| 2012/2013 | League One |  Oldham Athletic | 28 | 2 | 0 | 6/0/0 | 2214 | 
| 2011/2012 | League One |  Oldham Athletic | 23 | 1 | 0 | 4/0/0 | 1919 | 
| 2011/2012 | FA Cup |  Oldham Athletic | 3 | 1 | 0 | 1/0/0 | 0 | 
| 2010/2011 | League One |  Oldham Athletic | 42 | 5 | 0 | 12/0/0 | 3673 | 
| 2009/2010 | League One |  Oldham Athletic | 38 | 0 | 0 | 10/0/0 | 2846 | 
| 2008/2009 | League Two |  Bradford City | 31 | 4 | 0 | 5/0/0 | 0 | 
| 2007/2008 | Premiership |  Rangers | 1 | 0 | 0 | 0/0/0 | 38 | 
| Total: | 415 | 22 | 7 | 97/4/0 | 27580 | 
| Season | League | Team | A | G | Assists | Y/YR/R | MP | 
|---|---|---|---|---|---|---|---|
| 2021 | Africa Cup of Nations Qualifications |  South Africa | 1 | 0 | 1 | 0/0/0 | 90 | 
| 2019 | Friendly International |  South Africa | 2 | 1 | 0 | 1/0/0 | 134 | 
| 2019 | Africa Cup of Nations Qualifications |  South Africa | 2 | 0 | 0 | 0/0/0 | 114 | 
| 2019 | Africa Cup of Nations |  South Africa | 3 | 0 | 0 | 0/0/0 | 270 | 
| 2018 | World Cup Qualification Africa |  South Africa | 7 | 1 | 0 | 4/0/0 | 572 | 
| 2018 | Friendly International |  South Africa | 2 | 0 | 0 | 0/0/0 | 114 | 
| 2017 | Friendly International |  South Africa | 1 | 0 | 0 | 0/0/0 | 90 | 
| 2016 | Friendly International |  South Africa | 2 | 0 | 0 | 1/0/0 | 180 | 
| 2015 | Africa Cup of Nations |  South Africa | 3 | 0 | 0 | 2/0/0 | 0 | 
| 2014 | World Cup Qualification Africa |  South Africa | 4 | 1 | 0 | 0/0/0 | 0 | 
| 2013 | Africa Cup of Nations |  South Africa | 3 | 0 | 0 | 0/0/0 | 270 | 
| 2013 | Friendly International |  South Africa | 6 | 0 | 0 | 1/0/0 | 0 | 
| 2012 | Friendly International |  South Africa | 8 | 0 | 0 | 1/0/0 | 0 | 
| Total: | 44 | 3 | 1 | 10/0/0 | 1834 | 
| From | To | Date | Amount | 
|---|---|---|---|
|  Rylands |  Altrincham | 28/01/2022 | Free | 
|  Altrincham |  Carlisle United | 25/08/2021 | Free | 
|  Carlisle United |  SuperSport United | 28/08/2020 | N/a | 
|  Doncaster Rovers |  Oldham Athletic | 14/03/2013 | Loan | 
|  Bradford City |  Rangers | 01/08/2008 | Loan |