Ford Puma 2020 review
Our Rating

5/5

Ford Puma 2020 review

Ford has revived the Puma with a new Fiesta-based crossover, but is it good enough to succeed in this crowded market?

Introduction

To many, a Ford Puma is a quirky coupe from the late 1990s and early 2000s. But there’s next to no demand for models like that these days, so instead the Puma name has been revived on a crossover, as after all, these are the models that are selling best now.

The Puma shares plenty in common with the Fiesta, which undoubtedly sets it off on the right foot, though it looks rather different to that car with its distinctive front end – joining the Ecosport, Kuga and Edge in Ford’s crossover and SUV line-up.

A key detail on this new model is its new mild-hybrid powertrains, the first of their kind for Ford cars, though they’ll be added across much of the range later in 2020. It also gains upmarket features like an electric tailgate and massaging seats, along with a full suite of driver assistance kit. But can this be a model that stands out next to a large number of rivals competing in this market?

System.Exception: Exception while creating a value. ---> System.IO.IOException: An unexpected network error occurred.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.ReadCore(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
   at System.IO.BinaryReader.Read(Byte[] buffer, Int32 index, Int32 count)
   at Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.ReadBytes(Byte[] b, Int32 offset, Int32 len, Boolean useBuffer)
   at Lucene.Net.Index.CompoundFileReader.CSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.Refill()
   at Lucene.Net.Store.BufferedIndexInput.ReadByte()
   at Lucene.Net.Store.IndexInput.ReadVInt()
   at Lucene.Net.Index.TermBuffer.Read(IndexInput input, FieldInfos fieldInfos)
   at Lucene.Net.Index.SegmentTermEnum.Next()
   at Lucene.Net.Index.SegmentTermEnum.ScanTo(Term term)
   at Lucene.Net.Index.TermInfosReader.Get(Term term, Boolean useCache)
   at Lucene.Net.Index.TermInfosReader.Terms(Term term)
   at Lucene.Net.Index.SegmentReader.Terms(Term t)
   at Lucene.Net.Index.DirectoryReader.MultiTermEnum..ctor(IndexReader topReader, IndexReader[] readers, Int32[] starts, Term t)
   at Lucene.Net.Index.DirectoryReader.Terms(Term term)
   at Lucene.Net.Search.WildcardTermEnum..ctor(IndexReader reader, Term term)
   at Lucene.Net.Search.WildcardQuery.GetEnum(IndexReader reader)
   at Lucene.Net.Search.MultiTermQuery.ConstantScoreAutoRewrite.Rewrite(IndexReader reader, MultiTermQuery query)
   at Lucene.Net.Search.WildcardQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.IndexSearcher.Rewrite(Query original)
   at Lucene.Net.Search.Query.Weight(Searcher searcher)
   at Lucene.Net.Search.Searcher.CreateWeight(Query query)
   at Lucene.Net.Search.Searcher.Search(Query query, Collector results)
   at Examine.LuceneEngine.SearchResults.DoSearch(Query query, IEnumerable`1 sortField, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\SearchResults.cs:line 110
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 182
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 163
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMediaCacheValues(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.<>c__DisplayClass38_0.<GetCacheValues>b__0()
   at Umbraco.Core.Cache.DictionaryCacheProviderBase.<>c__DisplayClass10_0.<GetSafeLazy>b__0()
   --- End of inner exception stack trace ---
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, CacheDependency dependency)
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Core.Cache.DeepCloneRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetCacheValues(Int32 id, Func`2 func)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMedia(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetById(UmbracoContext umbracoContext, Boolean preview, Int32 nodeId)
   at Umbraco.Web.PublishedCache.ContextualPublishedCache`1.GetById(Boolean preview, Int32 contentId)
   at Umbraco.Web.UmbracoHelper.TypedMedia(Int32 id)
   at ASP._Page_views_partials_grid_editors_media_cshtml.Execute() in D:\home\site\wwwroot\views\partials\grid\editors\media.cshtml:line 6
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model)
   at ASP._Page_Views_Partials_grid_editors_base_cshtml.Execute()

Performance

One of the key highlights of the Puma is the adoption of mild-hybrid technology, which is available initially on the 123bhp and 153bhp versions of Ford’s excellent 1.0-litre EcoBoost petrol engine. The system works by pairing the unit to a 48V battery setup – helping to recuperate lost energy, and subsequently cut emissions and fuel consumption. The gearbox of choice is a six-speed manual gearbox, which is a good match for the Puma, though it can feel notchy at times.

We’re trying the top-spec 153bhp version here, which can sprint from 0-60mph in 8.8 seconds and reach a top speed of 127mph. Yet its mild-hybrid system also means it should be cheap to run, with Ford promising it will return 51.3mpg, with CO2 emissions of 126g/km.

Diesel variants will join the line-up later this year, along with the option for an automatic transmission.

System.Exception: Exception while creating a value. ---> System.IO.IOException: An unexpected network error occurred.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.ReadCore(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
   at System.IO.BinaryReader.Read(Byte[] buffer, Int32 index, Int32 count)
   at Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.ReadBytes(Byte[] b, Int32 offset, Int32 len, Boolean useBuffer)
   at Lucene.Net.Index.CompoundFileReader.CSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.Refill()
   at Lucene.Net.Store.BufferedIndexInput.ReadByte()
   at Lucene.Net.Store.IndexInput.ReadVInt()
   at Lucene.Net.Index.TermBuffer.Read(IndexInput input, FieldInfos fieldInfos)
   at Lucene.Net.Index.SegmentTermEnum.Next()
   at Lucene.Net.Index.SegmentTermEnum.ScanTo(Term term)
   at Lucene.Net.Index.TermInfosReader.Get(Term term, Boolean useCache)
   at Lucene.Net.Index.TermInfosReader.Terms(Term term)
   at Lucene.Net.Index.SegmentReader.Terms(Term t)
   at Lucene.Net.Index.DirectoryReader.MultiTermEnum..ctor(IndexReader topReader, IndexReader[] readers, Int32[] starts, Term t)
   at Lucene.Net.Index.DirectoryReader.Terms(Term term)
   at Lucene.Net.Search.WildcardTermEnum..ctor(IndexReader reader, Term term)
   at Lucene.Net.Search.WildcardQuery.GetEnum(IndexReader reader)
   at Lucene.Net.Search.MultiTermQuery.ConstantScoreAutoRewrite.Rewrite(IndexReader reader, MultiTermQuery query)
   at Lucene.Net.Search.WildcardQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.IndexSearcher.Rewrite(Query original)
   at Lucene.Net.Search.Query.Weight(Searcher searcher)
   at Lucene.Net.Search.Searcher.CreateWeight(Query query)
   at Lucene.Net.Search.Searcher.Search(Query query, Collector results)
   at Examine.LuceneEngine.SearchResults.DoSearch(Query query, IEnumerable`1 sortField, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\SearchResults.cs:line 110
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 182
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 163
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMediaCacheValues(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.<>c__DisplayClass38_0.<GetCacheValues>b__0()
   at Umbraco.Core.Cache.DictionaryCacheProviderBase.<>c__DisplayClass10_0.<GetSafeLazy>b__0()
   --- End of inner exception stack trace ---
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, CacheDependency dependency)
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Core.Cache.DeepCloneRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetCacheValues(Int32 id, Func`2 func)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMedia(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetById(UmbracoContext umbracoContext, Boolean preview, Int32 nodeId)
   at Umbraco.Web.PublishedCache.ContextualPublishedCache`1.GetById(Boolean preview, Int32 contentId)
   at Umbraco.Web.UmbracoHelper.TypedMedia(Int32 id)
   at ASP._Page_views_partials_grid_editors_media_cshtml.Execute() in D:\home\site\wwwroot\views\partials\grid\editors\media.cshtml:line 6
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model)
   at ASP._Page_Views_Partials_grid_editors_base_cshtml.Execute()

Ride and handling

On our Spanish test route, the Puma performed superbly, feeling agile for a crossover and with a good throttle response from the punchy turbocharged petrol engine.

Even on our top-spec ST-Line X model with its 18-inch alloy wheels, the ride never felt uncomfortable and it felt settled in all scenarios. The only slight gripes we noticed was a lack of feel through the steering wheel, though that’s much the same across the crossover class.

But it handles impressively well for a crossover, not feeling much less balanced than the Fiesta, which is often regarded as one of the best cars in its class to drive. The sports suspension on these ST-Line models also impresses when it comes to keeping body roll in check – making the Puma feel impressively nimble for a high-riding model.

System.Exception: Exception while creating a value. ---> System.IO.IOException: An unexpected network error occurred.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.ReadCore(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
   at System.IO.BinaryReader.Read(Byte[] buffer, Int32 index, Int32 count)
   at Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.ReadBytes(Byte[] b, Int32 offset, Int32 len, Boolean useBuffer)
   at Lucene.Net.Index.CompoundFileReader.CSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.Refill()
   at Lucene.Net.Store.BufferedIndexInput.ReadByte()
   at Lucene.Net.Store.IndexInput.ReadVInt()
   at Lucene.Net.Index.TermBuffer.Read(IndexInput input, FieldInfos fieldInfos)
   at Lucene.Net.Index.SegmentTermEnum.Next()
   at Lucene.Net.Index.SegmentTermEnum.ScanTo(Term term)
   at Lucene.Net.Index.TermInfosReader.Get(Term term, Boolean useCache)
   at Lucene.Net.Index.TermInfosReader.Terms(Term term)
   at Lucene.Net.Index.SegmentReader.Terms(Term t)
   at Lucene.Net.Index.DirectoryReader.MultiTermEnum..ctor(IndexReader topReader, IndexReader[] readers, Int32[] starts, Term t)
   at Lucene.Net.Index.DirectoryReader.Terms(Term term)
   at Lucene.Net.Search.WildcardTermEnum..ctor(IndexReader reader, Term term)
   at Lucene.Net.Search.WildcardQuery.GetEnum(IndexReader reader)
   at Lucene.Net.Search.MultiTermQuery.ConstantScoreAutoRewrite.Rewrite(IndexReader reader, MultiTermQuery query)
   at Lucene.Net.Search.WildcardQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.IndexSearcher.Rewrite(Query original)
   at Lucene.Net.Search.Query.Weight(Searcher searcher)
   at Lucene.Net.Search.Searcher.CreateWeight(Query query)
   at Lucene.Net.Search.Searcher.Search(Query query, Collector results)
   at Examine.LuceneEngine.SearchResults.DoSearch(Query query, IEnumerable`1 sortField, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\SearchResults.cs:line 110
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 182
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 163
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMediaCacheValues(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.<>c__DisplayClass38_0.<GetCacheValues>b__0()
   at Umbraco.Core.Cache.DictionaryCacheProviderBase.<>c__DisplayClass10_0.<GetSafeLazy>b__0()
   --- End of inner exception stack trace ---
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, CacheDependency dependency)
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Core.Cache.DeepCloneRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetCacheValues(Int32 id, Func`2 func)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMedia(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetById(UmbracoContext umbracoContext, Boolean preview, Int32 nodeId)
   at Umbraco.Web.PublishedCache.ContextualPublishedCache`1.GetById(Boolean preview, Int32 contentId)
   at Umbraco.Web.UmbracoHelper.TypedMedia(Int32 id)
   at ASP._Page_views_partials_grid_editors_media_cshtml.Execute() in D:\home\site\wwwroot\views\partials\grid\editors\media.cshtml:line 6
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model)
   at ASP._Page_Views_Partials_grid_editors_base_cshtml.Execute()

Interior and equipment

Even though the Puma is based on the already practical Fiesta, Ford has extended the wheelbase and given it a higher body to allow for further rear space. There’s plenty of interior space for occupants throughout the cabin, though visibility isn’t helped by the sloping coupe-like styling.

Ford has also been innovating when it comes to storage, too, fitting the Puma with a cool eight-litre underfloor storage solution, which even comes with a removeable plug meaning that you can wash items in there, and then let any dirty water out. With this feature, it extends the boot to a class-leading 456 litres, while a parcel shelf that’s attached to the boot lid instead of behind the rear seats, which increases practicality even further.

Three main trim levels are offered on the Puma – Titanium, ST-Line and ST-Line X.

System.Exception: Exception while creating a value. ---> System.IO.IOException: An unexpected network error occurred.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.ReadCore(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
   at System.IO.BinaryReader.Read(Byte[] buffer, Int32 index, Int32 count)
   at Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.ReadBytes(Byte[] b, Int32 offset, Int32 len, Boolean useBuffer)
   at Lucene.Net.Index.CompoundFileReader.CSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.Refill()
   at Lucene.Net.Store.BufferedIndexInput.ReadByte()
   at Lucene.Net.Store.IndexInput.ReadVInt()
   at Lucene.Net.Index.TermBuffer.Read(IndexInput input, FieldInfos fieldInfos)
   at Lucene.Net.Index.SegmentTermEnum.Next()
   at Lucene.Net.Index.SegmentTermEnum.ScanTo(Term term)
   at Lucene.Net.Index.TermInfosReader.Get(Term term, Boolean useCache)
   at Lucene.Net.Index.TermInfosReader.Terms(Term term)
   at Lucene.Net.Index.SegmentReader.Terms(Term t)
   at Lucene.Net.Index.DirectoryReader.MultiTermEnum..ctor(IndexReader topReader, IndexReader[] readers, Int32[] starts, Term t)
   at Lucene.Net.Index.DirectoryReader.Terms(Term term)
   at Lucene.Net.Search.WildcardTermEnum..ctor(IndexReader reader, Term term)
   at Lucene.Net.Search.WildcardQuery.GetEnum(IndexReader reader)
   at Lucene.Net.Search.MultiTermQuery.ConstantScoreAutoRewrite.Rewrite(IndexReader reader, MultiTermQuery query)
   at Lucene.Net.Search.WildcardQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.IndexSearcher.Rewrite(Query original)
   at Lucene.Net.Search.Query.Weight(Searcher searcher)
   at Lucene.Net.Search.Searcher.CreateWeight(Query query)
   at Lucene.Net.Search.Searcher.Search(Query query, Collector results)
   at Examine.LuceneEngine.SearchResults.DoSearch(Query query, IEnumerable`1 sortField, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\SearchResults.cs:line 110
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 182
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 163
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMediaCacheValues(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.<>c__DisplayClass38_0.<GetCacheValues>b__0()
   at Umbraco.Core.Cache.DictionaryCacheProviderBase.<>c__DisplayClass10_0.<GetSafeLazy>b__0()
   --- End of inner exception stack trace ---
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, CacheDependency dependency)
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Core.Cache.DeepCloneRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetCacheValues(Int32 id, Func`2 func)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMedia(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetById(UmbracoContext umbracoContext, Boolean preview, Int32 nodeId)
   at Umbraco.Web.PublishedCache.ContextualPublishedCache`1.GetById(Boolean preview, Int32 contentId)
   at Umbraco.Web.UmbracoHelper.TypedMedia(Int32 id)
   at ASP._Page_views_partials_grid_editors_media_cshtml.Execute() in D:\home\site\wwwroot\views\partials\grid\editors\media.cshtml:line 6
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model)
   at ASP._Page_Views_Partials_grid_editors_base_cshtml.Execute()

Standard kit includes 17-inch alloy wheels, cruise control, selectable drive modes and wireless charging to name but a few features.

Choosing the ST-Line adds a sports bodykit, a 12.3-inch digital instrument cluster and sports seats, while the ST-Line X gains 18-inch alloy wheels, part-leather seats, privacy glass and climate control.

From launch, additional First Edition versions available – these adding luxuries like an electric tailgate, heated front seats and a panoramic sunroof, depending on version.

Cost

Given the Puma comes loaded with standard kit, and features more practicality and innovation than many of its rivals, it’s not surprising that list prices are more than some competitors – starting from £20,545. At that price, it’s great value for money, though just think twice about choosing range-topping models and going wild on the options list, as you could soon have a £27,000 Puma. 

System.Exception: Exception while creating a value. ---> System.IO.IOException: An unexpected network error occurred.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.ReadCore(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
   at System.IO.BinaryReader.Read(Byte[] buffer, Int32 index, Int32 count)
   at Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.ReadBytes(Byte[] b, Int32 offset, Int32 len, Boolean useBuffer)
   at Lucene.Net.Index.CompoundFileReader.CSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
   at Lucene.Net.Store.BufferedIndexInput.Refill()
   at Lucene.Net.Store.BufferedIndexInput.ReadByte()
   at Lucene.Net.Store.IndexInput.ReadVInt()
   at Lucene.Net.Index.TermBuffer.Read(IndexInput input, FieldInfos fieldInfos)
   at Lucene.Net.Index.SegmentTermEnum.Next()
   at Lucene.Net.Index.SegmentTermEnum.ScanTo(Term term)
   at Lucene.Net.Index.TermInfosReader.Get(Term term, Boolean useCache)
   at Lucene.Net.Index.TermInfosReader.Terms(Term term)
   at Lucene.Net.Index.SegmentReader.Terms(Term t)
   at Lucene.Net.Index.DirectoryReader.MultiTermEnum..ctor(IndexReader topReader, IndexReader[] readers, Int32[] starts, Term t)
   at Lucene.Net.Index.DirectoryReader.Terms(Term term)
   at Lucene.Net.Search.WildcardTermEnum..ctor(IndexReader reader, Term term)
   at Lucene.Net.Search.WildcardQuery.GetEnum(IndexReader reader)
   at Lucene.Net.Search.MultiTermQuery.ConstantScoreAutoRewrite.Rewrite(IndexReader reader, MultiTermQuery query)
   at Lucene.Net.Search.WildcardQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.IndexSearcher.Rewrite(Query original)
   at Lucene.Net.Search.Query.Weight(Searcher searcher)
   at Lucene.Net.Search.Searcher.CreateWeight(Query query)
   at Lucene.Net.Search.Searcher.Search(Query query, Collector results)
   at Examine.LuceneEngine.SearchResults.DoSearch(Query query, IEnumerable`1 sortField, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\SearchResults.cs:line 110
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams, Int32 maxResults) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 182
   at Examine.LuceneEngine.Providers.BaseLuceneSearcher.Search(ISearchCriteria searchParams) in C:\projects\examine-qvx04\src\Examine\LuceneEngine\Providers\BaseLuceneSearcher.cs:line 163
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMediaCacheValues(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.<>c__DisplayClass38_0.<GetCacheValues>b__0()
   at Umbraco.Core.Cache.DictionaryCacheProviderBase.<>c__DisplayClass10_0.<GetSafeLazy>b__0()
   --- End of inner exception stack trace ---
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, CacheDependency dependency)
   at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Core.Cache.DeepCloneRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetCacheValues(Int32 id, Func`2 func)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetUmbracoMedia(Int32 id)
   at Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedMediaCache.GetById(UmbracoContext umbracoContext, Boolean preview, Int32 nodeId)
   at Umbraco.Web.PublishedCache.ContextualPublishedCache`1.GetById(Boolean preview, Int32 contentId)
   at Umbraco.Web.UmbracoHelper.TypedMedia(Int32 id)
   at ASP._Page_views_partials_grid_editors_media_cshtml.Execute() in D:\home\site\wwwroot\views\partials\grid\editors\media.cshtml:line 6
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model)
   at ASP._Page_Views_Partials_grid_editors_base_cshtml.Execute()

Verdict

The market might not have demanded yet another crossover, and some might say there is little room for another, but this is undoubtedly one of the best small crossovers to date, and it sits right at the forefront of this sector. Its impressively practical and also great to drive – two things that can’t be said about much of the competition.

The mild-hybrid technology is another great introduction, and one that will do well when Ford really pushes it across its line-up. Just avoid the expensive flagship models with their high list prices as otherwise you’ll be driving one of the best mini-SUVs on the market today.

 

Latest Car Reviews

Join the newsletter

Get the latest news, reviews and guides every week. Update your preferences at any time.