Press "Enter" to skip to content

Category: cycling

Making an Online RAMBA Trails Map

RAMBA Trails Map v1.0 (Default View w/ Epic Loop Layer)

Introduction

Kristen and I have been spending a good deal of time in the Ishpeming and Negaunee area this year, and I’ve made it a personal goal to become more familiar the local trails — both RAMBA-supported and otherwise — and get them documented OpenStreetMap (OSM). Having these trails in OSM provides two big benefits: they appear in other mapping tools (such as OsmAnd, GaiaGPS, Strava, MapMyRide/MapMyRun) and the trail data can be freely used to build other tools.

Official RAMBA Map v6 from 2018

Over the years of making trail maps with OpenStreetMap I’ve mostly produced PDFs for printing, leaving mobile and online mapping to other apps. These work well, but have the big downside of rendering routes with their style. That is, online maps via these tools’ show the routes, but look quite different from print maps, even if all the data for them to display more data (such as colour=* tags on relations) is in OSM.

While these apps work pretty well, and I use them myself routinely for navigation, I got the itch to see if I could make a web-based map that looked more like locally produced print maps than app-based renderings. It seemed like a good project, a good way to learn some basics of modern web development, and maybe make something useful.

What I ended up with was a slippy map of showing the RAMBA trails that uses layers of pre-rendered tiles to show the different official trail routes, placed over a background map. The map viewer is client-side JavaScript that loads static tiles from a basic web server, making this a very simple app to host (just a bunch of static files on a site).

In this post I intend to document the major steps of how I made this map, why I used the tools I did, and share the code to reproduce (and update) this build. Hopefully this’ll allow others to get their head around these map presentation basics, perhaps even reusing this work to make and host another map.

Update OSM Data

Strava Global Heatmap in JOSM

Mostly outside the scope of this article but worth a mention, a significant amount of time was spent ensuring that the RAMBA area trails are accurately listed in OSM. Without good data it would not be possible to go further, as the OSM data is the base data used to create other maps.

By combining information from a bunch of sources, and doing some personal surveying of trails while riding and hiking, I was able to get all of the official RAMBA trails documented, along with numerous other paths and tracks in the area. This building a complete picture of the usable trails in the area.

Information used to get the RAMBA trails in OSM included:

  • My own recorded ride/hiking data, notes, etc.
  • Strava Heatmap data.
  • Official route files (GPXs) from events such as Marji Gesick and Polar Roll.
  • The official RAMBA map.
  • Hand-annotated map from Danny Hill listing local trail names.

These sources were combined in JOSM, cross-referenced, ways drawn and tagged, relations built out, and before long a complete picture of the RAMBA-area trails — official and otherwise — were in OpenStreetMap.

Most importantly, beyond documenting the trail locations, trails were grouped into route relations to show each official route, and then all the official routes were grouped into a superroute for all the RAMBA trails. As of time of writing, relation RAMBA Trails (12425503) is the superroute that aggregates the individual trail routes such as Epic Loop (8467869) and Malton Loop (8468010).

The result of this is accurate trail data that’s easy to query for and style using other tools.

Rendering Tiles with Maperitive

There are myriad ways to render tiles from OSM data, with most of these involving setting up a database server and a toolchain which’ll generate, cache, and serve tiles on demand. For most large data sets this makes a lot of sense, but for a small trail system I really wanted to use static tiles I could serve from a simple webserver.

Eventually I came across Maperitive, a desktop application for Windows that takes GIS data (including OSM), stylizes it with a relatively simple ruleset, and can generate tiles in the standard XYZ format for use elsewhere. It can also be scripted, which meant I could use it as part of an automated workflow to generate new tiles as the OSM data changes. This seemed like a good solution, so I set about writing some rulesets that would reasonably show the RAMBA trail routes and some automation around it all.

After a lot of experimenting I settled on a having separate tile set for each of the official loops, an overview of all trails, and a base map. The base map would always be shown, and a user can toggle between layers which highlight all the trails or individual loops.

After a few iterations of custom rules, I settled on a simplified set based on the Default.mrules file which comes with Maperitive for rendering the base map. The only modification was changing the font to Michael Adams’ Roadgeek 2005 Transport Medium font, as it looks nicer than the default, Verdana. For the overview and route layers I created simple rules based on the the default rendering of highway=path, using the Heavy version of the font. The rule for each trail route (relation) selects the trails in a given relation then colors them accordingly.

Creating these rules took a bit of fiddling, as Maperitive is both a bit of a dead project, not completely documented, and (in the latest Beta) sort-of buggy where sometimes the map display would stop updating. Still, even though I’m not great at making attractive things, I was able to come up with something that worked well enough.

Conveniently, Maperitive also comes with a command line version (Maperitive.Console.exe). After settling on rendering rules and a tile generation script, I used this as part of an automated workflow which downloaded OSM data directly then rendered each of the tile sets.

After tile generation I used a Windows binary of OptiPNG to losslessly compress the tiles, resulting in a ~62% space savings (original: 746MB, optimized: 286MB) which’ll reduce storage and bandwidth overhead.

The Front End

Editing in VS Code

With tiles generated I needed a way to display them. It turns out that OpenLayers was easy to use and it all ran as simple client side application in a browser. By using npm and parcel, with Visual Studio Code for editing, it was quite easy to get the site developed, tested, and bundled up for deployment. The only component I had to add was ol-layerswitcher control, which provides an easy way to toggle between layers.

Prior to this I had very little experience with modern web development, with my exposure to JavaScript pretty much limited to reading others’ code to figure out what it’s doing. After a bit of confusion (and having to accept the hidden complexity of using an application bundler), I was able to focus solely on writing a single main.js file with a basic index.html that together do what I wanted:

  • Run full screen by default.
  • Show all trails by default, with toggles for the defined routes (layers of the map).
  • Show an attractive background map below the routes to show the rest of the area.
  • Offer controls to use geolocation to showing one’s location on the map and reset the view to the original map extents.
  • Look sane on desktop and mobile devices.

This ended up being much easier than I thought, and between the OpenLayers Examples and just some basic programming I was able to get something I’m happy with. Far more time was spent designing the tiles and thinking about what I wanted it to do than writing the code to display it all.

Tile Hosting

The actual map tiles are a number of small PNG files, and a typical session of viewing and panning around the map can result in hundreds of image loads. This was seeming a bit slow when being served from nuxx.net via HTTP/1.1, so I looked into using HTTP/2 to improve performance.

Unfortunately, it was not simple to turn on HTTP/2 here at nuxx.net as I’m using PHP for WordPress, which in turn requires MPM prefork, which precludes mod_http2. I could have set up another web server and such, but for now I’m hosting the tiles in AWS, with the tiles uploaded to an S3 bucket and served via CloudFront.

This should allow for better tile download performance than what I can do from my server. Despite potentially incurring a bit of a financial cost it is a good experiment in hosting tiles in the cloud. I may change this in the future, particularly if it becomes cost prohibitive, but for now it’s working well.

Follow Along At Home

If you would like to generate this same map, start by downloading this ZIP file: ramba_trails_map_code_1.0.zip. It contains the scripts and rules needed to generate the map tiles (ramba.mscript and the .mrules files), the index.html, main.js, and package.json for the OpenLayers-based front end, the .osm file used to generate the first release of the map, and a few batch files that tie it all together.

You will need to download Maperitive (latest beta: link — from this post / mirror), curl, OptiPNG, and the Roadgeek 2005 fonts to generate and optimize the tiles. These scripts may work fine with older/release versions of Maperitive, but betas incorporate a bit of collision detection for text, making things look nicer.

These batch files are included to will help you out, but may need some editing to fit on your environment:

  • fetch_osm.bat: Uses curl to download all OSM data within a bounding box that encompasses the Ishpeming/Negaunee area.
  • generate_tiles.bat: Runs ramba.mscript via Maperitive.Console.exe to generate the tiles.
  • optimize_tiles.bat: Copies the unoptimized tiles from the .../tile_output/raw output directory to the .../tile_output/optimized directory, then runs OptiPNG against the tiles to optimize them in place.

To build the web app you’ll need to install npm, parcel, create a new OpenLayers app as per the directions here. Then install ol-layerswitcher (npm install ol-layerswitcher), replace the default index.html, main.js, and package.json with the ones I provided, and you should be ready to go.

Updating the Map

As you can see, the map is two major pieces: the front end and the tiles. Whenever the map data changes in OSM the tiles can be regenerated to update those layers. The code for the front end web app only needs to change if the storage location changes, features are going to be added, etc.

Conclusion

This map has worked out rather well and I’m happy calling it v1.0. It’s been a great learning experience, and I’ve even managed to produce something useful that didn’t exist before: an interactive map of some of the most rugged single track trails in Michigan; one of my favorite places to ride mountain bikes.

It’s far from perfect, and there are some things I could do differently, but for now, I’m considering it a success. When in Negaunee for vacation last week I successfully used development versions of this map to find my way around, so I know it’s better than nothing.

If you find any quirks in the map data — such as trails with wrong names or in the wrong location — please take a screenshot and show me what’s wrong and email that to steve@nuxx.net. I’ve done my best to ensure the RAMBA trails are accurately mapped, but I’ve certainly missed some things.

Problems

  • No key or other ancillary information (such as logos) as are normally found on print maps.
  • No terrain. While 1m DEM elevation data is available from the USGS, I couldn’t figure out how to use it in Maperitive for generating hillshading.
  • No easy way to add clickable items to show additional info, link to external map apps (eg: for navigation).
  • Maperitive’s text rendering isn’t the best, resulting in goofy looking text at some zoom levels.
  • Long trails only have one label placed on the middle. Trails with one name broken into multiple ways will be labeled numerous times.
  • Due to being run in a browser it’s a sufficient, but not great, mobile experience. Specifically, selecting the geolocation, recenter, and layer controls can be fiddly because they are so small.
  • Does not work offline, but thankfully most of the RAMBA area now has good mobile data coverage.

Things To Investigate

  • Keep an eye on AWS cost and performance.
  • Look at Leaflet for the front end, as it seems a bit more modern.
  • Consider rendering map tiles with TileMill. This will add a lot of complexity both in setup and styling tiles, but once done should allow a lot more flexibility in styling and overcome most of Maperitive’s problems. mapbox/mbutil should work for getting XYZ PNGs out of MBTiles files.
  • Consider using a tile server if I don’t want to deal with discrete files.
  • Look more into using vector tiles with client-side styling. (I passed on this for now, as a GeoJSON file showing each of the route is a large download and had no benefit over raster tiles.)
  • Maperitive should run under Mono, and OptiPNG is available for many platforms, meaning it should be possible to reproduce this build under macOS or Linux. Note that the GUI for Maperitive will not currently run on macOS due to Windows.Forms currently being based on Carbon, which is not available for 64-bit macOS. So while the CLI should work, the GUI version isn’t currently compatible with macOS 11.5 (Big Sur) and higher.
Comments closed

New Trail Bike: Pivot Trail 429 v3

For years the Pivot Trail 429 series of bikes have been a sort-of Holy Grail bike for me. The ultimate aggressive cross country / trail mountain bike, and something I really wanted to try. In August of 2020 I was able to spend a few hours riding v2 of the bike around some of my favorite Marquette and RAMBA trails and fell in love. Something about the bike and I clicked, and I came away wanting one. After that trip I sold my beloved Specialized Camber and got ready to buy a new bike.

With the COVID-19 related bike industry shortages it took a lot longer than I’d hoped, but almost a year after that demo — in August of 2021 — I made a quick trip up to Bellaire (three hours each way) and picked my new bike from Patrick at Paddles & Pedals: a Pivot Trail 429, v3, Race XT build, with the crank and wheels upgraded to high end carbon bits.

While I hadn’t ridden this new v3 of the Trail 429, and it’s a much longer reach bike than v2, I’d stared at geometry numbers for hours, comparing it to my current bikes, and figured that a size large in this model would also be right for me. After getting the bike and swapping the usual contact points, fitting the larger rotors that I wanted, and some other little bits, it was all ready to ride.

Using the Low bottom bracket setting (the higher of the two), a 35mm stem, an upper stack height of 30mm (headset upper cover + 15mm spacer) and the 11° sweep Salsa Salt Flat Carbon bar the RAD ended up just 5mm shorter of the Timberjack and feels pretty good on its first ride.

I may experiment with the Lower setting, which’d slacken the head tube and seat tube angle by 0.5°, bring the reach in and increase the stack, but this’ll likely require a 50mm stem to get the fit where I want it. At the same time, it’d bring the bottom bracket height closer to that of the Camber’s, which might be really nice. Between suspension setup and such, I’ve got a lot of experimenting to do.

Current build details are as follows:

Frame: Pivot Trail 429 v3, Large, Silver Metallic
Fork: Fox 2021 Performance Series 34 FLOAT 29 130 (Short ID: D4SW / 2021, 34, A, FLOAT, 29in, P-S, 130, Grip, 3Pos, Matte Blk, No Logo, 15QRx110, 1.5 T, 51mm Rake, OE)
Fork TA Parts: QR15 Geared Cam and Hardware
Rear Shock: Fox 2021 Series FLOAT (Short ID: D9N4 / 2022_21, FLOAT DPS, P-S, A, 3pos, Trunnion, Evol LV, Pivot, Trail 429, 165, 45, 0.9 Spacer, LCM, LRM, CML, No Logo)
Headset: Pivot Precision Sealed Cartridge (OE)
Crankset: RaceFace Next SL (170mm)
Bottom Bracket: RaceFace BB92 Cinch 30
Chainring: RaceFace 1x Chainring, Cinch Direct Mount- SHI 12 (32t)
Chain: Shimano CN-M7100
Derailleur: Shimano XT RD-M8100-SGS
Shifter: Shimano XT SL-M8100-IR
Shift Cables / Housing: Jagwire LEX-SL
Cassette: Shimano SLX CS-M7100-12
Brakes: Shimano SLX, Rotor: BL-M7100 / Caliper, BR-M7120
Brake Pads: Shimano N04C
Front Rotor: Shimano RT-MT800 M
Rear Rotor: Shimano RT-MT800 L
Front Brake Adapter: Shimano SM-MA-F203P/P (160mm Post to 203mm Post)
Stem: ENVE Alloy Mountain Stem (31.8mm clamp, 35mm length)
Bar: Salsa Salt Flat Carbon (750mm)
Wheels: Reynolds Black Label 309/289 XC
Tires: Maxxis Rekon (29 x 2.6″, 3C/EXO/TR)
Seatpost: Fox Transfer Performance Elite (175mm, 31.6mm)
Dropper Lever:Wolf Tooth ReMote Light Action (Black, 22.2mm Clamp)
Seatpost Collar: Pivot OE
Saddle:Specialized Power Expert (143mm)
Pedals: Shimano XTR PD-M985
Grips:ESI Extra Chunky (Black)
Bottle Cages:Specialized Zee Cage II (Black Gloss, 1x Left)
Computer:Garmin Edge 530, Garmin Speed and Cadence Sensors (v1), Best Tek Garmin Stem Mount
Bell: RockBros Handlebar Stainless Steel Bell (Black)
Derailleur Hanger: SRAM Universal Derailleur Hanger
Frame Protection Tape: McMaster-Carr UHMW PE

Comments closed

Industry Nine Hydra / Light Bicycle AM930 Wheel Build

Both the Electric Queen and Timberjack were fitted with the same Industry Nine Trail S Hydra 28H wheelset; a really nice value wheelset which mates the amazing Hydra hubs with aluminum rims. Despite slightly denting (and fixing) the rear rim, these have held up great and been wonderful to ride, but I still occasionally found myself missing the stiffness (and durability) of carbon rims.

As the bike sat over winter I figured it’d be a good time to upgrade to the carbon rims, so just before Thanksgiving when Light Bicycle was offering a bit of a sale I ordered a set of rims and got the process started. Between these value rims and (literally) slow-boat-from-China [1] shipping, eBay special spokes, and spare nipples from previous builds I was able to put together a nice, solid, carbon wheelset for about $550 less than if I’d bought a complete similar set from I9. And I’ll have some rims to sell (or reuse).

The Trail S Hydra rims come with straightpull hubs that I9 doesn’t sell separately, but they were nice enough to send me the specifications for them. With some forward/backward checking against the original rims and spokes (597mm ERD, 303mm spokes) I found the DT Swiss Spoke Calculator to work great for these hubs as well.

For rims I chose the Light Bicycle Recon Pro AM930 rim, which is their high end 30mm internal 29er rim with a nude unidirectional carbon finish. As options I chose 28h drilling, black logos, and black valve stems to match the hubs and any bike. (Silver logos would also have been fine to match the hub logos, but I really prefer plain looking rims.)

When shopping around for spokes a deal popped up on eBay offering a whole box of 298mm DT Swiss Competition straightpull spokes, which perfectly match Squorx nipples left over from previous wheel builds. I love working with nipples like these, because they are tightened with a T-handle tool from the back side, which makes building way more comfortable and faster than with a traditional spoke wrench. And it means no chance to mar the anodizing on the nipples.

The wheels were built up using Ultra Tef-Gel as thread prep, to a maximum tension of ~131kgf. Before starting the build I hadn’t realized that the inner and outer spokes on each side of the rim would be a different tension. As their flange offset is a bit different for each set of spokes on each side, necessary so the straight spokes don’t interfere with each other, the bracing angle is slightly different resulting in a different tension.

I did have a slight issue where, when bringing the front wheel to tension and trying to hit the Light Bicycle recommended tension of ~145kgf, the inner Squorx heads broke off three nipples. After this I detensioned the wheel and brought it back up to a lower, but still appropriate, spec. (In the process of figuring this out I ended up cutting two spokes as the nipples couldn’t easily be turned. After the third I detensioned the wheel and decided to build to a lower tension.)

Final tension for the wheels are as follows, with the small number the indicator on a Park Tool TM-1:

Front Wheel (NDS / L / Brake Side is Steeper Bracing Angle):

NDS (L) Inner: 22 (117 kgf)
NDS (L) Outer: 21 (105 kgf)
DS (R) Inner: 20 (94 kgf)
DS (R) Outer: 19 (85 kgf)

Rear Wheel (DS / R / Cassette Side is Steeper Bracing Angle):

NDS (L) Inner: 20 (20 kgf)
NDS (L) Outer: 19 (85 kgf)
DS (R) Inner: 23 (131 kgf)
DS (R) Outer: 22 (117 kgf)

Per usual with carbon rims building is a matter of centering the rim, eliminating runout, and detensioning the spokes. There’s really no truing (in the traditional sense) because single-spoke tension doesn’t really affect a stiff carbon rim.

Out of pocket cost was $651.13 on top of of the original wheelset, for a total of $1519.27 (excluding tires and sealant and whatever I can sell the old rims for):

Original Trail S Hydra 28H Wheelset: $868.14
LB AM930 Rims (w/ Valves + Tape): $563.14
DT Swiss Competition Spokes: $87.99
Total: $1519.27

A complete Industry Nine Hydra Trail S Carbon would cost about $2015 (with Shipping + Tax), about $500 more than the end cost of building these. While this set doesn’t have the US-made Reynolds Blacklabel rims, I’ve been happy with Light Bicycle rims on previous bikes and anticipate these’ll be just as good.

The final build, without tape/valves/tires/rotors/cassette, comes in at 794g for the front wheel and 917g for the rear wheel (1711g total). This is a 51g savings over the Trail S Hydra build when going to wider and stiffer rims. This isn’t enough weight savings to notice, but at least it didn’t add anything.

When putting the wheels back together I fitted the old tires as they still have a good bit of life left. I also used the original valve stems from Industry Nine as they are a bit shorter and I prefer the brass body versus the aluminum valves that came with the rims. It also turns out that Light Bicycle provided more than 2x as much tape as needed for the rims, which is great for future spare use. (The rims came with two rolls, one roll did both with plenty to spare.)


[1] The shipping notification states: “It is scheduled to board a Matson Liner’ ship for a sea journey of about 3-4 weeks before its arrival at Los Angeles port in the US. Then UPS will pick the package up to manage the local delivery for you. It is only when the pickup is made, the information at UPS website will be updated further as well as you could reach out to UPS by calling 800-742-5877 for quicker help then.”

Comments closed

Salsa Kingpin Deluxe Fork, DT Swiss 350 Big Ride Centerlock Hubs, 31mm Torque Cap Dropouts

For years I’ve been riding my beloved, custom-built, blue and black 2017 Salsa Mukluk with a set of DT Swiss 350 Big Ride-based wheels. This fall I noticed a very small crack in a non-critical part of the frame and Salsa quickly swapped me to a new 2019 Mukluk frame. Along with the new frame came a bit of an upgrade; Salsa’s Kingpin Deluxe fork.

31mm dropout for Torque Caps on the Salsa Kingpin Deluxe fork.

In looking at photos of the fork, test fitting with end caps, and as confirmed by Salsa directly, the Kingpin Deluxe has 31mm dropouts designed to fit the SRAM-developed Torque Cap end caps. Originally intended to make suspension forks less prone to twisting, the larger 31mm OD end caps, instead of the standard 21mm OD, strengthen the wheel/axle interface. This is well documented elsewhere, and end caps are available for most higher end wheel sets (I9, DT Swiss, etc), but it only appeared on non-fatbike RockShox suspension forks… until now.

It’s not clear to me why Salsa chose to put 31mm dropouts on the already-stiff, rigid, carbon Kingpin Deluxe fork, but they did. My guess is they saw potential for dynamo hubs — which generate power via forces between the still axle and moving hub shell — to use Torque Caps so they have a larger interface with the hub. After all, one of the new features of the Kingpin Deluxe fork is internal routing for dynamo hubs.

Parts from two DT Swiss HWGXXX0009100S kits for converting the 350 Big Ride hubs to Torque Caps.

The only downside to including 31mm dropouts is that without Torque Cap end caps on the hub the wheel won’t self-center on the axle making wheel installation a little bit fiddly. In practice this isn’t a problem, and Newmen made stick-on Torque Cap Fork Reducers to mitigate it, but I wanted to see if I could get some actual Torque Caps for my DT Swiss 350 Big Ride Center Lock hubs (H350DCIXR32SA6259S) to do it right.

After a bit of email with Logan, one of the ever-helpful folks at DT Swiss, I learned that unlike all their other hubs, these have equal-length end caps and until now there weren’t any fat bike forks with 31mm dropouts, so DT doesn’t have a Torque Cap kit for these hubs. Logan suggested that I pick up two of the HWGXXX0009100S kits for regular 350 hubs, then use the longer pieces on each side of the hub, figuring this should fit. While this was a bit pricey (~$65), it felt like the right choice so the wheel would match the fork.

Torque Cap end caps fitted to a DT Swiss 350 Big Ride front hub.

The kits arrived and just as Logan had calculated these caps dropped right in and now the end caps and fork match. Hopefully in the future DT Swiss will offer a kit that has just the necessary parts so others won’t have to buy two as well.

Comments closed

CycleOps (Saris) Hammer Rattle: Belt Tension?

I’ve had a CycleOps (now Saris) Hammer smart trainer since late 2017 and it’s been working great, but lately has been making a slight rattling sound during post-ride spindown just before the flywheel stopped. It felt fine during use so I kept riding, but then when putting out a couple hard, short efforts during high resistance periods (in slope mode via Zwift) it made a loud clank/bang sound. I would also sometimes get a rumbling feeling as if the notches on the belt weren’t smoothly engaging with the notched pulleys. Various posts online attribute this to a worn belt, so I opened up the trainer to take a look.

What I found led me to believe the issue is with the belt tensioner coming loose, not a worn belt. I suspect for many the belt replacement fixes the problem because the replacement process includes re-tensioning the belt.

Inside the trainer there is an idler pully whose tension is adjusted via a threaded rod on a spring. This rod is turned via a 5mm hex head accessible from the bottom of the trainer (without opening it). The threads on this rod seemed a bit worn, it seemed loose, and shaking it made a similar metal-on-metal sound to the rattling and clank that I’ve been hearing.

As the belt is a motor-type timing belt, it’s pretty unlikely that human-level output in clean conditions will stretch it much. Removing and inspecting the belt and all pulleys showed that everything was clean and free of damage, so I reassembled it, tightened the tensioner to compress the spring a bit and tension the belt, and rode the trainer a few times. After this there was no more rattle and I was unable to reproduce the clank/bang during hard efforts.

It seems the cause of the noise was the lack of tension on the threaded rod, spring, and idler and it likely came loose over time. The rattle was from the tension rod rattling as the as the heavy flywheel and main fan wheel and belt came to rest. The bang noise was from the sudden heavy pedal load vs. the strong resistance unit removing all belt pressure on the idler and it all slamming back together when my pedal stroke dropped off.

So, if you’re hearing this same sort of noise and rumbling, try using a long 5mm wrench to tighten up the tensioner a couple turns. If this works for you it’s much quicker (and cheaper) than replacing a belt.


This trainer is an original CycleOps Hammer, sometimes referred to as the H1, and the whole Hammer/H2/H3 family of trainers is now sold under the Saris name. (The CycleOps brand has been owned by Saris for years, but now all products are sold under the Saris name.)

To open a Hammer (H1) trainer you need a 1/18″ hex tool for the small screws, a T-30 Torx for the large screws. The cassette must first be removed, and after removing the screws the snug-fitting side panel pulls away. Belt tension can be adjusted with a 5mm hex and the fastener is accessible without opening the trainer. The stock belt is an MBL 150S5M930 and available for under $10 online. (Saris sells the replacement belt with the three required tools for $59.99 + shipping.)

Comments closed

Presta O-Ring for Lezyne ABS-1 PRO HV Flip Chuck

I have an older Lezyne Digital Overdrive floor pump which has generally worked great, except when the original slide-lock chuck failed. Nicely, Lezyne sent me a new chuck — ABS-1 PRO HV — and this worked great until earlier this year when the Presta side began leaking unless I held the hose just-right.

It turns out the o-ring on the presta valve side of the flip chuck, which seals against the valve body, had worn to the point where it no longer sealed well. The photo above shows the worn o-ring on the left and a new one on the right.

I emailed Lezyne asking for the o-ring spec so I could get some, and they instead sent me two of the parts. Popping out the old o-ring and fitting in a new one sorted everything out.

When fitting the o-ring I measured it, figuring it’d be nice to know the size in case I want a quicker replacement of this wear part next time:

ID: 5.2mm
OD: 9mm
Profile: 1.9mm

This is the kind of customer service I really like. Getting exactly the small part that I needed to fix the pump is perfect. Repairing something is always better than replacing, and this was a very simple repair.

Comments closed

For Sale: Salsa El Mariachi Single Speed

After a lot of thought I’ve decided to sell my beloved steel Salsa El Mariachi Single Speed. This is an amazing cross-country (XC) single speed, and I love riding it, but it’s time for it to go.

This is a custom build, based around the final year of the beloved Salsa El Mariachi Single Speed frame and rigid fork. While the frame, headset, crank, and bottom bracket are original, everything else has been upgraded to make one of the best single speed builds you’ll find. This is the updated El Mariachi geometry with kinked seat tube and shorter chainstays to improve handling on single track. And yes, it rides wonderfully.

Originally shipping with only a rigid fork, this bike has both the original fork and a Fox 32 (with GRIP damper). Crown races and brake adapters are fitted to both, so switching between forks can be done in a couple minutes with a multi-tool. The fork was rebuilt by Fox in early 2020 when the GRIP damper upgrade happened, so it’s in great shape and ready to ride.

Cosmetically the frame is in great shape. There’s a couple small rub marks from heels and kicked up sticks, and one small scratch on the top tube just behind the headset, but no dents or serious marks. The wheels are solid and true and the tubeless sealant was refreshed on November 30th. Tires are in good shape, with plenty of life left.

Appropriate for a single speed, the wheels are built around a Hope Pro 4 Trials/Single Speed rear hub, and matching front. With 88 points of engagement there’s never any slop when ratcheting over stuff or spinning at high RPMs. A single speed-specific rear hub means a more symmetric (and strong) wheel build. These wheels are built around WTB KOM i29 rims to keep the tires nice and wide, and Sapim D-Light spokes to keep things light but strong. Spoke tension is spot on and the wheels have never needed any truing, but spare spokes and nipples (from when the wheels were built) will be included.

The drivetrain is built around Surly stainless steel cog and chainring and the Surly spacer kit. Gearing is currently at 32:17 — perfect for everything from River Bends to Stony Creek to Pontiac Lake — but if you’re wanting something a little taller I’d be glad to swap to a 16t. With Salsa’s Alternator dropouts adjusting chain tension is simply a matter of loosening a couple bolts, turning a couple set screws, and snugging things back down. Included is a large bottle of Squirt chain lube, same as has been used on the chain to date (it works well for single speeds). Also included are the original colored chainring bolts, which I replaced for black when I removed the other orange bits from the bike.

Finishing it all off are a Thomson seatpost clamp, Thomson X4 stem, Salsa bar, and super-durable Cane Creek 40 headset. Grips are the super-comfortable ESI Extra Chunkies with BMX-sized aluminum bar plugs for appropriate fit with foam grips.

I’m ~5’10” with a 30″ inseam and the bike fits me perfect. For reference, I also can ride a Large in Salsa bikes with a short stem, a stock large in Specialized stuff, and either 54cm or 56cm ETT road bikes with appropriate length stems.

Price is US $1300 (Sold!), detailed high-res photos can be found here.

(MSRP on the original bike was $1499, and between the wheels, Thomson components, and everything else there’s over $1000 in upgrades in the bike.)

Specifics of the build are as follows. If you’re interested, please email steve@nuxx.net. I’m glad to ship the bike at the buyer’s expense, or I can meet up outdoors in the Shelby Township area.

Frame: Salsa El Mariachi SS (Medium, Gray Green, 2015)
Suspension Fork: Fox 32, 100mm Travel, Tapered, 15mm TA, Upgraded to GRIP Damper in 2020
Rigid Fork: Salsa CroMoto Grande, Tapered, 15mm TA, With Maxle
Headset: Cane Creek 44 (Black, ZS44/EC44)
Crankset: Stock Single Speed
Bottom Bracket: Stock (Great Condition)
Chainring: Surly 32t (Stainless)
Cog: Surly 17t (Stainless)
SS Spacer Kit: Surly
Chain: SRAM 8 Speed
Brakes: Shimano Deore M615
Brake Rotors: TRP, 180mm front, 160mm Rear
Stem: Thomson X4, 100mm x 0°
Bar: Salsa Salt Flat (710mm)
Seatpost: Thomson Elite, 410mm x 27.2mm
Seatpost Clamp: Thomson
Hubs: Hope Pro 4 Trials/Single Speed, Black
Rims: WTB KOM i29
Spokes: Sapim D-Light
Tires: Schwalbe Racing Ralph 2.35″ (Tubeless)
Tubeless Valves: Stan’s
Tubeless Sealant: Stan’s
Saddle: Specialized Phenom (143mm)
Grips: ESI Extra Chunky (Black)
Bar Plugs: Black Aluminum
Pedals: VP Components VP Grind (VPE-535 / Composite)

Comments closed

Thoughts on Classic and Modern Mountain Bike Fit

High Rock Bay, Keewenaw Peninsula, Michigan (East End of Point Trail Phase II)

How I Confused Myself

I’ve been riding mountain bikes for around 13 years, drop bar bikes for for seven on gravel and occasional road stuff, and spend a few hours a week on a trainer in winter. During all of this I’ve had a particular interest in ensuring my bikes fit well, so when I switch between bikes the contact points (pedals, saddle, grips, brakes, shifters, etc) are consistent and the bikes’ other characteristics (geometry, travel, tire size, etc) are the difference in how they ride. I like knowing that I can hop on any of my bikes and the fit won’t feel weird or limit what I can do or how long I can ride for.

In pursuing a good fit I’ve had a total of two full bike fits (Ryan Katulic at Apto Cycling and Jessica Bratus at fitmi!), two small/adjustment fits (Ernie Dell at Cycletherapy and Chris Goddard at Fraser Bicycle). I’ve read a ton of articles and papers on bike fit and spent countless hours measuring my bikes and building and using spreadsheets to compare and calculate geometry, tweaking everything from stem length and bar sweep to saddle height and setback.

Between these fits and my research everything coalesced into a spreadsheet of measurements (crank length, saddle setback from crank spindle, bar distance from saddle nose, bar drop from saddle, etc) that worked very well and I could copy to all my bikes. Switching between, say, my hard tail Salsa El Mariachi XC bike, my Salsa Mukluk fatbike, and my Specialized Camber trail bike all felt the same fit-wise; the bikes’ geometries and suspension made them ride differently. As the 2016 Camber is a “modern” geometry mountain bike, to make the fit match I had to place the saddle as far rearward as possible and use a relatively long (75mm) stem. At the time I figured this was just what needed to be done.

The saddle height and setback was the same across all my bikes — road and mountain — and in general it seemed to work well. My back might get a little sore when doing a lot of hard seated climbing, but isn’t that just what happens when leaned way over and pushing on the pedals?

As time moved on and my technical mountain biking abilities advanced I began looking at new bikes. I found that what’s called “modern” mountain bike geometry — steeper seat tubes, dropper posts, longer reach, shorter stems, and wider bars — was present on all new bikes. This was a step beyond the Camber, which had already pushed what I could do with my chosen bike fit. Seat tubes are getting steep enough that I’d need a setback post to match my current setup, but there’s very few setback droppers available and they are rarely seen. Wider bars and shorter stems, touted for handling and stability, seemed like they would compromise handling on twisty trails.

Clearly the bike manufacturers weren’t all screwing things up, so I figured something had to be off with my thinking about bike fit as it relates to modern mountain bike geometry, so I set out to understand the changes.

What I came to realize was that much of the traditional mountain bike geometry and fit was based around effectively do-all bikes; hard tail XC (cross-country) geometry frames that were great when pedaled hard on relatively smooth surfaces, handled well in tight and twisty trees, and were manageable over rough sections. They climbed fine, descended fine, cornered fine, but still had roots in staying seated, pedaling hard, standing to eek out short/steep pitches; going fast while putting out power and dealing with rough spots along the way. Sure, they could be ridden very capably on serious, rough mountain bike trails, but they are more at home on smooth trails with slow corners.

As mountain bikes evolved the “modern” geometry made leaps and bounds with off-road handling with minimal compromises from the classic do-all XC bikes. With these modern geometry bikes, attempts at copying a classic mountain bike’s fit using the classic saddle setback and saddle-to-bar distance will be frustrating and result in an awkward-steering bike. And it’ll throw away many of the modern geometry’s benefits.

What I realized is that my fit was for a classic mountain bike geometry, thus for a modern bike I needed to learn more about bike fit.

Steep Seat Tubes and Dropper Posts

I feel that a dropper post is practically essential equipment for a mountain bike. The ability to get the saddle down and out of the way opens up possibilities for handling that outweigh added mechanical complexity and weight. For everything from moving the saddle away to float through blown out gravely downhills and allowing the bike to move around under me on rough stuff, from moving the saddle for leaning, balancing, and railing berms and flat corners to jumping something along a trail, dropper posts have significantly enhanced my mountain bike riding. Like any bike control dropper posts have a learning curve, but once understood it make riding more fun.

Modern geometry frames tend to have fairly steep seat tubes, and copying my classic saddle position was going to require a setback seatpost. Nearly every dropper post out there (except for the Command Post IRcc) has no setback, which meant I couldn’t have a modern frame, a dropper, and the saddle setback I’d previously used; this seemed like a problem.

It’s often claimed that a steeper seat tube angle makes climbing easier, but…. how? At first this seemed silly, because wouldn’t you want efficient pedaling via an optimized saddle-crank position? Which, for me, required more setback than a modern frame and seatpost would allow?

Climbing is typically where one puts out maximum power on a mountain bike. Looking at how just a couple of degrees of seat tube angle can move the saddle too far behind the crank, it turns out that even a moderate climb effectively moves the saddle far enough back to be a problem. For example, with a 725mm saddle height on a 75° seat tube, a basic 5% climb changes the effective seat tube angle by ~3°, moving the saddle ~35mm rearward. (These are rough numbers that presume the bike rotates around the bottom bracket.)

Think of how uncomfortable and inefficient it would be to ride with your saddle an inch and a half behind where it should be… This is why steeper seat tubes are said to climb better: they tend to result in an optimised-for-power position when the bike is tilted up and climbing. Even better, being centered on the bike instead of hanging over the rear wheel enhances control when climbing; chunky roots and rocks are easier, with the front end less likely to lift and wander around.

When on flat ground or descents the saddle is a bit forward for optimal pedaling, but that’s okay. It feels fine, it’s still possible to put out plenty of power, and it’s a great trade-off for improved climbing.

Sometimes when riding hard and doing a lot of seated pedaling, particularly when climbing on a full suspension, my lower back would start to hurt. While strengthening my core helped, it turned out that modern geometry did the most to sort this out, because moving the seat forward meant that when climbing my hip angle is more open and thus pulling less on my lower back. Now when climbing hard on trails while seated my lower back feels better, the same as when I’m really hammering on the road.

While this steeper seat tube angle makes a slight compromise in that it’s not quite as efficient when pedaling on dirt road type stuff, it’s fine. I’ve done long rides linking up trails using dirt roads, and even long dirt road rides (eg: The Crusher 40-mile) and the different position when pedaling on flat ground isn’t noticeable… The improvements in off-road climbing more than than make up for it.

Long Frame Reach / Short Stem / Wide Bar

When I first tried out a wider bar (760mm, from my usual 710mm) with what I thought was a short 75mm stem on a nearly straight bar I felt the bike steered slowly. Pedaling seated and weaving through the tightest sections I knew of, it felt like I was constantly wrestling the bike and dumping it into corners to stay on the trail. It didn’t feel in control.

When I began looking at modern geometry mountain bikes, I was amazed at just how long the frame reach (the distance forward from the bottom bracket to the center of the top of the head tube) was. Going purely off of frame numbers it looked like unless I went to a short stem — which seemed awkward — I should be riding smaller size frames than in the past.

Narrow trees on the North Country Trail near Mile 682.

It turns out that what I thought was a shorter stem really wasn’t, and I needed an even shorter stem (60mm) for the bike to fit me properly. With the wide bar spreading my arms out more, and with the longer reach of the frame, the stem I had was too long. The awkward feeling came from riding what was effectively too large of a bike and needing to steer with my shoulders instead of my arms. By moving to an appropriate length stem the distance from my feet to my hands (more on this later) became appropriate and steering once again felt under control.

For a given size frame, modern mountain bike geometry will have a longer reach, so the overall distance forward from the bottom bracket to the grips ends up being the same when paired with a shorter stem. The shorter stem better positions the body over the center of the bike, making for a more stable ride.

Wider bars offer greater leverage, which makes everything from countersteering around fast corners to staying on a desired line in rough terrain easier. As wider bars spread out one’s arms, the stem needs to be even shorter to keep from being leaned over too far reaching for bars that are too far away. By having the bars an appropriate distance from the body steering is done with the arms, eliminating that whole-body wrestling feeling just to get around corners.

While a modern geometry bike does steer a bit slower at low speeds due to the shorter stem, wider bars, and slacker head tube angles, getting the right length stem keeps steering in the arms, mitigating most of this. For the sluggishness that remains, the benefits strongly outweigh the negatives; a well-fit bike has well balanced handling whether technical or not at low or high speeds.

Dialed Brought It All Together

The RideLogic basics of fitting a bike.

In researching fit to modern geometry mountain bikes, I came across Lee McCormack’s book Dialed: The secret math of a perfect mountain bike setup about his RideLogic bike fit. While some parts are a bit prescriptive and didn’t give me the understanding I wanted, the ideas and results seemed interesting, so as an experiment I went about fitting all my bikes using this method.

For the basics of this method, check out Lee McCormack’s Guide to Bike Set-Up on Pinkbike. For specifics, buy a copy of Dialed here and read it. (Neither this post nor the Pinkbike article are a replacement for the book. I suggest getting the PDF as it’s cheaper than print, and having it in print doesn’t add much value.)

In Dialed and the RideLogic fit the focus is a measurement called RAD (Rider Area Distance); the distance from the bottom bracket spindle to where your hands sit on the bars along the centerline of the bike. This is how well your bike fits your body, and unless your frame is way too large or small, can mostly be handled by changing the length of your stem.

Dialed then focuses on RAAD (Rider Area Angle in Degrees), or the angle of that line between the bottom bracket/grip and the ground. The shallower the angle the more flat/XC-friendly the bike is, the steeper the more downhill/trail-ish it is. Recommendations for RAAD range from ~55° for XC race to ~57° for XC/trail all the way to ~62° for downhill.

Finally, SHO (Steering/Hands Offset), or the distance your hands are forward of the steerer tube axis. This should be set up for the type of bike and riding you do, which per Dialed close to 0mm is ideal for trail / DH riding, but XC racers will often find themselves with something much longer. Changing stem length is the easiest way to change SHO, but needs to be balanced with RAD being more important. For example, I currently have a ~27mm SHO on my trail bike, but can’t get this much shorter without decreasing the RAD too far.

(Dialed goes into far more, like how to measure your body to determine your RAD needs, how to choose a frame based on your measurements, bar width, crank length, and saddle positioning specifics, so read the book and watch the referenced videos.)

Once you know your RAD and the RAAD and SHO for your type of bike and riding, you can swap around stem length/rise, spacers, and handlebar rise and sweep to get it right for you. Position the saddle for appropriate leg extension and generally pretty centered on the seatpost, and for most people you’ll be fine. (Remember: All that matters is hand position relative to your feet and the bike’s steerer axis. Whether you use a riser bar or stem or add spacers, all that matters is where your hands end up.)

Thus, so long as your bike is in the right size range, doing a really good setup of a new bike is only a matter of measure, adjust, and ride.

Standing over my bike, with pedals resting on two picnic tables, to check RAD.

Dialed suggests placing your bike in a gap, such as between two picnic tables, with pedals balanced on each side to see how your current bike’s RAD matches your body. In November 2019 I visited a local park, pushed some picnic tables together, and checked out my RAAD, just like Lee does in his demonstration videos. I found my Salsa El Mariachi SS and Mukluk were already perfect RAD, but the Camber’s was too long.

Fitting on a 15mm shorter stem on the Camber fixed the RAD problem and I moved the saddle forward from my road-like slammed-back previous position to something centered and average. I then rode the it all spring and summer on everything I could in Michigan, but from the first test ride it felt right. I’d been riding it for three full years thinking it felt fine, like a big trail bike that I sometimes had to throw around; I thought this was normal for that kind of bike. After going through the Dialed fit, mostly to adjust RAD (and consequently with a shorter SHO) and putting the saddle into a standard modern geometry position, it all came together. Whether flat/twisty trails, long climbs and descents, techy/steep rock, loose gravely sand — pretty much everything I could find in the Lower and Upper Peninsulas of Michigan — the bike felt great.

Specialized Camber set up for measuring RAD, RAAD, and SHO.

So why did it work? If the bar is too far away, and especially with a long stem, steering is mostly done by leaning the body and slightly turning the arms. This isn’t good for handling a mountain bike, as good bike-body separation (a cornerstone of handling a bike) requires steering without needing to move the torso too much. The shorter the stem, and the closer the bar is to the optimal distance from your body, the more you steer with just your arms.

When RAD is set up right, leaning and countersteering on fast stuff works well, turning the bars in slow stuff is comfortable without feeling like a wrestling match, and lifting the front end of the bike and navigating rough stuff is comfortable. And all of this good handling requires both a short SHO (to support steering with the arms) and having the appropriate RAAD (to keep properly balanced on the bike).

That’s when it all made sense: Modern mountain bike geometry, with a longer reach, shorter stem, and wider bars, allows for a shorter SHO with appropriate RAD and RAAD. This allows steering more with the arms resulting in better handling on all surfaces where mountain bikes get ridden. This is why modern mountain bikes have these (modern) geometries.

How I Fit Myself to a Modern Mountain Bike

After finally realizing how modern mountain bike geometry and the Dialed method of fitting a mountain bike work in tandem, I set out to use it when building up the All-City Electric Queen and the Salsa Timberjack which replaced it. Starting with my desired RAD (~835mm) and RAAD (~57°) I did the following:

Measuring RAD and RAAD on the Timberjack.
  1. Use the stack and reach of the frame, coupled with the headset and bar dimensions to estimate stem and spacer requirements to reach desired RAD and RAAD. I typically check a couple size frames and pick one that’ll work best. (yojimg.net’s Stem Comparison Tool is very helpful for this.)
  2. Assemble the bike with a placeholder stem, then set it on level ground. (I clamp the rear wheel to a post in the basement, then use a Flop Stop Handlebar Holder to hold the front wheel straight.)
  3. Tape a piece of string, taut, between the center of each hand position.
  4. Place a long straightedge along the string, using masking tape to hold it in place.
  5. Insert a hex tool in the bottom bracket bolt, wrap a string around the hex tool, and secure the other end to the straightedge.

With a tape measure, dial gauge angle finder, and a hex tool to fit in the top cap I can get all the necessary measurements:

  • RAD: Distance along the string from BB to hand position.
  • RAAD: Angle of string from BB to grip.
  • SHO: Distance from string between grips to steerer axis. (Inserting a hex tool into the top cap to extend the steerer axis makes this easier.)

Then, based on the measurements of the bike’s current RAD, RAAD, and SHO, the stem, spacers, and bar can be adjusted or swapped to get my desired setup.

On my Timberjack I was able to get a 835mm RAD, 58° RAAD, and 27mm SHO during assembly; from the first ride it handled perfectly. Setting the saddle to 735mm height (top/center of saddle to BB spindle) is spot-on for 175mm cranks, and just slightly behind centered in the rails has been great for everything from pedaling on flat ground to grinding up 20% slopes.

With all of this together I now have a bike that fits me well, is comfortable when pedaling hard either on flat ground or when climbing very steep stuff, is easy to handle at low or high speeds, and handles great on technical trails. And thanks to this process I have a set of numbers, which I understand the reasoning behind, that can be used to set up a new bike to fit me properly and thus ride well.

The Obligatory Summary

A modern geometry mountain bike, properly set up with modern fit, comes together into a great package that is incredibly capable and fun to ride. Trying to force a classic fit and stem length on a modern frame doesn’t work well, and will result in a weird-handling less-capable bike.

By adopting modern geometry and using the methodology spelled out in Dialed it’s straightforward to get a good fitting mountain bike that makes riding easier and more enjoyable. Even if you think your fit is fine, it’s worth checking RAD, RAAD, and SHO and experimenting with suggested changes. You may be as surprised as I was with how a few small changes that make riding even better.

Leave a Comment

Industry Nine Trail S Hydra 28h Wheelset Hub and Rim Details

On my Salsa Timberjack I have a set of Industry Nine (I9) Trail S Hydra 28h wheels. These have been a great high-end yet thrifty wheelset, combining a relatively low cost and high quality 27mm internal width aluminum rim and straight-pull steel spokes with high-end Hydra hubs.

This wheelset uses a straight-pull hub that is not sold separately or listed on the website, which makes finding specifications a little difficult if one wants to rebuild the wheels with different rims, replace spokes, etc. I’m considering replacing the aluminum rims with some carbon fiber rims over the winter, so I set about gathering all the specs so I could look into options.

Thankfully I9’s customer service is top notch, and the folks there told me everything I wanted to know about the wheelset. Since this info is otherwise difficult to find, and to maybe save the support folks some hassle, I figured I’d share them here:

Industry Nine – Trail S Hydra 28h Wheelset (29er, XD Driver, Six Bolt) Specs:

  • Hubs: Industry Nine Hydra (28 hole, straight pull, six-bolt, XD driver, black)
    • Front (Diagram)
      • NDS Flange Ø (A): 46mm
      • NDS Center to Flange (B): 28mm
      • DS Center to Flange (C): 43mm
      • DS Flange Ø (D): 46mm
    • Rear (Diagram)
      • NDS Flange Ø (A): 46mm
      • NDS Center to Flange (B): 24mm
      • DS Center to Flange (C): 37mm
      • DS Flange Ø (D):60mm
    • Freehub Lube: Dumonde Tech PRO X Freehub Oil
  • Rims: Industry Nine Trail S (28 hole, 597mm ERD for 29er, symmetric / 0mm offset)
  • Spokes: Sapim Race Straightpull (303mm for 29er, 285mm for 27.5)
  • Nipples: Sapim Double square (14mm, 2.0mm, black, alloy)

(Note, these are for a wheelset purchased in May 2020, specs documented on 2020-Nov-20. These specs could change with future revisions.)

Comments closed

Rebuilding Shimano SLX (BL-M7000) Brake Levers

Within the past few months I’ve started to notice oil on the main lever pivots of the Shimano SLX (BL-M7000) brakes on my Salsa Mukluk and the brakes have started to feel like they need a bleed. It was recommended that I try rebuilding them — cleaning them out and re-greasing the seals — before replacing.

Using some Danco Silicone Faucet Grease and following a couple of YouTube videos to understand the teardown process I was able to easily get both levers apart and back together, and after my first test ride they seem to be working great. I believe these were getting dirty after a few years of exposure to all sorts of conditions and the seals needed a bit of freshening up. (In this design the end of the piston and thus a thin piece of seal is exposed to the elements.)

The overall process was quite straightforward, and between these two videos (1, 2) I had no problems figuring out what to do. While the first video is a bit dark, the subtitles helped tremendously. The second is in Tagalog, but shows the process clearly. EV-BL-M7000-3978.pdf, Shimano’s exploded view of the lever, is also somewhat helpful but does not show the details of the piston nor the push rod. If you are reasonably mechanically inclined, and can work with small parts, you’ll have no problem.

Here’s the major steps, along with notes. These steps apply to both the BL-M7000 (SLX) and BL-M8000 (XT) levers and are likely applicable to other similar levers. I recommend that you do levers one at a time, or take photos as you go, to see how the parts fit together. The lever return spring is particularly fiddly to get into place and it’s location is not immediately obvious during reassembly.

Disassembly:

  1. Disconnect brake hose and remove lever from bar.
  2. Remove bleed port, squeeze lever a few times to drain excess oil.
  3. Remove the small rubber plug which covers the set screw holding the pivot pin (Lever Axle, #5 on EV) in place. Back out but do not remove this set screw (Lever Axle Fixing Bolt and Cap, #4 on EV).
  4. Press out pivot pin from underside using a 3mm hex wrench or rod to remove the lever. (I had to use a small hammer to loosen it as it was stuck in place.)
  5. Locate the T-shaped ball-end shaft which presses on the piston. Remove with a twisting motion on the head, snapping it into or out of the plastic guides.
  6. Locate the plastic pivot plate which has a hooked bottom for the pad contact adjust lever. Remove this; loosen by pushing it out via the holes in the lever body.
  7. Remove the pad contact adjust lever, which the pad contact adjust screw presses against. (This screw exists on both XT and SLX levers, although it’s externally blanked on SLX.) Depressing the piston with a ball end hex wrench and lifting the lever out with smooth jaw needle nose pliers makes this easier.
  8. Use a thin rod, such as a 3mm wrench, to push the piston and spring out via the brake hose end. Be careful not to mar the mirror-polished brake piston bore.
  9. Remove the other plastic pivot plate.

Cleaning:

  1. Wipe down the brake lever body to remove oil and gunk. Clean out the inside of the bore with a paper towel, being careful not to damage the mirror polish. I do not suggest submerging or using soap or degreaser as it’ll be difficult to clean out the reservoir half of the lever.
  2. Gently wipe off the piston and spring. Inspect the seals for damage. If they are damaged, you’ll need to find a new piston as these are key to the brake working and not leaking.
  3. Clean the lever and reach adjustment. (I used dish soap and a paintbush.)
  4. Clean the lever return spring. Do not bend this.
  5. Clean the plastic guide plates, being sure to not scratch the them.
  6. Disassemble and clean the T-shaped ball-end shaft. There are two small plastic caps, a bushing, an axle, and the ball end shaft. Take care of the plastic end caps, these slide in the guide plates to make everything work.

Reassembly:

  1. Reassemble the T-shaped ball-end shaft putting a bit of silicone grease in and on the bushing, in and on the plastic end caps, and on the ball end.
  2. Fit the pivot plate without the hooked bottom.
  3. Drop the spring into the brake lever.
  4. Apply a very thin film of silicone grease to the piston and drop it into the lever with the concave end facing out.
  5. Replace the pad contact adjust lever while gently holding the piston in with a tool.
  6. Fit the other pivot plate, with the hooked bottom, into place with the hooked bottom fitting around the pad contact adjust lever.
  7. Replace the T-shaped ball end shaft with a twisting motion that allows the end caps to it follows the ramps on the pivot plates.
  8. Partially insert the pivot pin into the lever.
  9. Fit the lever return spring between into the lever between the main lever blade and reach adjust.
  10. Align the pivot pin holes in the lever with the spring, with the lever pressing against the bushing on the T-shaped ball end shaft, and slide the pivot pin into place. (This was easiest when I guided the assembly together with a 3mm hex wrench.)
  11. Tighten the set screw to hold the pivot pin in place.
  12. Check that the lever moves and returns smoothly. Assess and fix if not.
  13. Turn the reach adjust for maximum reach. Reattach hose and bleed system.
Comments closed