Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Cheltenham | 2013/14 – 2026/27 | 59 | 1 | 0 |
| Bristol Rovers | 2023/24 – 2024/25 | 80 | 3 | 3 |
| Plymouth | 2021/22 – 2022/23 | 95 | 1 | 5 |
| Ipswich | 2019/20 – 2020/21 | 49 | 2 | — |
| Lincoln | 2017/18 – 2018/19 | 25 | 2 | — |
| Walsall | 2017/18 – 2018/19 | 20 | 1 | — |
| Sheffield Utd | 2016/17 | 10 | 1 | — |
| Oldham | 2013/14 – 2015/16 | 109 | 2 | — |
| Wales | 2013 – 2014 | 1 | 0 | — |
| Bristol City | 2008/09 – 2013/14 | 32 | 0 | — |
| Wales U21 | 2011 | 3 | 1 | — |
| Brentford | 2008/09 – 2009/10 | 1 | 0 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 1 Jul 2023 | Plymouth | Bristol Rovers | Free |
| 1 Jun 2021 | Ipswich | Plymouth | Free |
| 2 Jul 2019 | Lincoln | Ipswich | Free |
| 12 Jan 2018 | Sheffield Utd | Lincoln | Free |
| 17 Jul 2017 | Sheffield Utd | Walsall | Loan |
| 5 Jul 2016 | Oldham | Sheffield Utd | Free |
| 31 Jan 2014 | Bristol City | Oldham | Free |
| 14 Oct 2013 | Cheltenham | Bristol City | — |
| 13 Sept 2013 | Bristol City | Cheltenham | Loan |
| 1 Jul 2011 | Brentford | Bristol City | — |
| 20 Aug 2009 | Bristol City | Brentford | Loan |
| 8 Nov 2008 | Brentford | Bristol City | — |
| 7 Aug 2008 | Bristol City | Brentford | Loan |
| 28 Jul 2025 | Bristol Rovers | Cheltenham | Free Transfer |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | EFL Trophy | Cheltenham | 1 | 1 | 135 | 0 | 0 | 0 | 0 | 6.63 |
| 2026/27 | League Two | Cheltenham | 8 | 5 | 497 | 0 | 0 | 0 | 0 | 6.59 |
| 2025/26 | League Cup | Cheltenham | 1 | 1 | 78 | 1 | 0 | 0 | 0 | 8.60 |
| 2025/26 | FA Cup | Cheltenham | 3 | 3 | 90 | 0 | 0 | 0 | 0 | 6.60 |
| 2025/26 | League Two | Cheltenham | 42 | 41 | 3693 | 0 | 0 | 4 | 0 | 6.55 |
| 2024/25 | League One | Bristol Rovers | 46 | 46 | 4140 | 2 | 2 | 9 | 0 | 6.98 |
| 2024/25 | EFL Trophy | Bristol Rovers | 1 | 0 | 26 | 0 | 0 | 0 | 0 | 6.70 |
| 2024/25 | FA Cup | Bristol Rovers | 2 | 1 | 164 | 0 | 0 | 0 | 0 | 7.20 |
| 2023/24 | League One | Bristol Rovers | 26 | 25 | 2201 | 0 | 1 | 7 | 1 | 6.66 |
| 2023/24 | EFL Trophy | Bristol Rovers | 3 | 3 | 182 | 0 | — | 0 | 0 | 7.00 |
| 2023/24 | FA Cup | Bristol Rovers | 2 | 1 | 59 | 1 | — | 0 | 0 | — |
| 2022/23 | League One | Plymouth | 41 | 37 | 3194 | 1 | 3 | 6 | 1 | 6.81 |
| 2022/23 | League Cup | Plymouth | 1 | 1 | 90 | 0 | — | 1 | 0 | 6.70 |
| 2022/23 | EFL Trophy | Plymouth | 3 | 3 | 300 | 0 | — | 0 | 0 | 7.30 |
| 2022/23 | FA Cup | Plymouth | 1 | 0 | 49 | 0 | — | 0 | 0 | — |
| 2021/22 | League One | Plymouth | 42 | 42 | 3736 | 0 | 2 | 6 | 0 | 6.92 |
| 2021/22 | EFL Trophy | Plymouth | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2021/22 | League Cup | Plymouth | 1 | 1 | 90 | 0 | — | 0 | 0 | 7.90 |
| 2021/22 | FA Cup | Plymouth | 4 | 4 | 390 | 0 | — | 1 | 0 | 6.10 |
| 2020/21 | League One | Ipswich | 17 | 17 | 1519 | 2 | — | 2 | 0 | 7.10 |
| 2020/21 | League Cup | Ipswich | 1 | 1 | 90 | 0 | — | 0 | 0 | 7.00 |
| 2019/20 | League One | Ipswich | 23 | 21 | 1928 | 0 | — | 3 | 0 | 6.77 |
| 2019/20 | FA Cup | Ipswich | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2019/20 | League Cup | Ipswich | 1 | 1 | 90 | 0 | — | 0 | 0 | 5.90 |
| 2019/20 | EFL Trophy | Ipswich | 4 | 4 | 350 | 0 | — | 1 | 0 | 6.90 |
| 2018/19 | League Two | Lincoln | 11 | 4 | 614 | 1 | — | 1 | 0 | — |
| 2018/19 | League Cup | Lincoln | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2018/19 | EFL Trophy | Lincoln | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2018/19 | FA Cup | Lincoln | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | League Two | Lincoln | 10 | 7 | 645 | 1 | — | 2 | 0 | — |
| 2017/18 | League One | Walsall | 19 | 19 | 1699 | 1 | — | 5 | 0 | — |
| 2017/18 | EFL Trophy | Walsall | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2016/17 | League One | Sheffield Utd | 7 | 7 | 574 | 1 | — | 0 | 0 | — |
| 2016/17 | League Cup | Sheffield Utd | 1 | 1 | 120 | 0 | — | 0 | 0 | — |
| 2016/17 | EFL Trophy | Sheffield Utd | 2 | 2 | 170 | 0 | — | 0 | 0 | — |
| 2015/16 | League One | Oldham | 43 | 42 | 3703 | 0 | — | 1 | 0 | — |
| 2015/16 | League Cup | Oldham | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2015/16 | EFL Trophy | Oldham | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2015/16 | FA Cup | Oldham | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2014/15 | League One | Oldham | 41 | 40 | 3605 | 1 | — | 5 | 0 | — |
| 2014/15 | League Cup | Oldham | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2014/15 | EFL Trophy | Oldham | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2014/15 | FA Cup | Oldham | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2014 | UEFA World Cup Qualifiers | Wales | 1 | 0 | 33 | 0 | — | 0 | 0 | — |
| 2013/14 | League One | Oldham | 16 | 16 | 1440 | 1 | — | 2 | 0 | — |
| 2013/14 | League Two | Cheltenham | 4 | 4 | 360 | 0 | — | 0 | 0 | — |
| 2012/13 | Championship | Bristol City | 6 | 5 | 452 | 0 | — | 1 | 0 | — |
| 2012/13 | FA Cup | Bristol City | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2011/12 | Championship | Bristol City | 21 | 14 | 1314 | 0 | — | 4 | 1 | — |
| 2011/12 | League Cup | Bristol City | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2011/12 | FA Cup | Bristol City | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2011 | UEFA U21 Championship | Wales U21 | 3 | 1 | 162 | 1 | — | 0 | 0 | — |
| 2009/10 | FA Cup | Brentford | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2008/09 | Championship | Bristol City | 2 | 0 | 48 | 0 | — | 0 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Suspended | 6 Oct 2019 | 21 Oct 2019 | 15 |
| Suspended | 29 Oct 2017 | 5 Nov 2017 | 7 |
| Suspended | 30 Nov 2014 | 7 Dec 2014 | 7 |
Trophies
| Competition | Season | Place |
|---|---|---|
| League One (England) | 2022/2023 | Winner |
| League One (England) | 2016/2017 | Winner |
| EFL Trophy (England) | 2017/2018 | Winner |
| EFL Trophy (England) | 2022/2023 | 2nd Place |
| League Two (England) | 2018/2019 | Winner |
