Moto Tuner Pro v10.158
By Can Akkaya, Superbike-Coach Corp.
Already a member, or ready to join?
Always Improving
This app is never really "done" — we're constantly building on it based on what riders actually ask for. Got an idea or found something clunky? Tell us.
Latest update (v10.158):
New: Contribution Champion, monthly and annual titles built on the existing points system — no new way to earn points, just a real periodic moment for the points that already exist. Whoever's total contribution points grew the most that month or year wins a bonus (+50 monthly, +100 annually), recorded permanently in a new Hall of Fame under Contribution Leaders. Refactored the leaderboard's points computation into a shared function first, so the live leaderboard and this contest can never silently compute different totals for the same person.
What's in here
Ten live calculators live under one My Bike Tuning tab — drag a slider and watch the bars move, the verdict change, the numbers react in real time. Stuck on something weird the bike's doing? The Global System Diagnostic thinks across all of them to find it. Go play with it.
🔧 Suspension & Sag — measure it, and watch it grade itself instantly
🎛️ Damping Matrix — pick your style, get real clicker targets
🛢️ Oil Level & Viscosity — fork air gap, oil weight, rear gas charge
📐 Geometry & Swingarm — drag rake, ride height, offset — feel the tradeoffs
🖐️ Testing — hands-on checks: balance test, tire temps, lap times
🏁 Tires & Thermals — read the wear pattern like a tuner would
⚡ Electronics Mapping — TC, slide control, ABS, wheelie control, live
⚙️ Gear Ratios — a real straightaway RPM solver, not guesswork
🧩 Global System Diagnostic — one complaint, every likely cause, ranked
Your Garage, Your History, Your Plan
The tools above are for tuning. This part's for keeping track of everything else — the bikes you own, the tracks you've ridden, and what's coming up next.
🏍️ My Garage — every bike you've got, current or past, with a photo and full specs
🔧 Service Log — set your own intervals, the app tells you when something's actually due
🛠️ Upgrade Log — every part you've put on, where it came from, what it cost
🏆 Race Track History — a permanent record of every track you've ridden, under My Track Stuff
📅 Track Day Planner — countdown, tickets, directions, and a reminder before it sneaks up on you, under My Track Stuff
💸 My Discounts — every partner deal and code you've got, in one place instead of your inbox
My Performance Analyzer
Where your actual lap times and race results live — not just logged, but genuinely analyzed. Everything here is built from what you've logged yourself; it never guesses at another rider's pace or states a finishing position without a real results sheet to back it up.
🏁 Full Session Lap Times — log every lap, CSV or by hand, tagged with what actually happened
📊 Best Lap Time Analysis — a real sector breakdown, built from your own logged splits
🏆 Race Position Analyzer — your real finishing position from an uploaded results sheet, not a guess
📈 Long Haul Analyzer — the whole season, by track or combined, with recurring patterns and a real outlook
Disclaimer & Terms of Use
Moto Tuner Pro is a technical logging and reference tool provided strictly for informational purposes. The user is solely responsible for verifying all mechanical adjustments, structural integrity, and machine safety before operating a motorcycle. Superbike-Coach Corp assumes no liability for mechanical failure, property damage, personal injury, or death resulting from the use of this application. Use at your own risk and always obey applicable traffic laws and safety regulations.
You'll agree to this once, as part of creating your account under My Profile — no need to do it again after that.
My Profile
Log in if you're already a member, or create your account with your Member ID.
Log In
New Member? Create Your Account
Not a Superbike-Coach member yet? Sign up here first. You can add your display name any time under Preferences once you're in.
My Garage
Log in from My Profile to access your garage.
My Track Stuff
Log in from My Profile to access this.
Ten live calculators, not a spec sheet. Drag a slider and watch the numbers react in real time.
Suspension & Sag Architecture
Recommended Rider Sag by Riding Category
Rider (loaded) sag targets in mm, front and rear, by riding category. Standard is the exact number as given — slide up for Expert/Pro (5mm tighter), down for Novice/Intermediate (5mm looser).
Free (static/unloaded) sag is commonly cited around 5-15mm for street/sport bikes, but that figure scales up with travel — it runs deeper in mm on higher-travel categories like Adventure, Supermoto, and Moto Cross, so don't apply the flat street number to those. Either way, this chart covers rider sag only, not free sag.
1. Front Real-Time Measurements (mm)
2. Rear Real-Time Measurements (mm)
Preload Adjustment Direction
Once your measured sag tells you which way to move, this is the direction to turn the collar to get there.
Real-Time Target Measurement Analysis
3. Spring Rate & Preload Troubleshooter
Spring rate only becomes the issue once preload adjustment alone can't get your sag numbers into target range. Fill in your profile below, measure your sag above, then pick the symptom that matches what you're seeing.
💡 Change one spring (front or rear) at a time and re-measure sag before touching the other end — otherwise you won't know which change actually fixed it.
Be honest about your level — it directly shapes how aggressive the recommendation below is, and an inflated answer will steer you toward a setup that fights you rather than helps you.
Hydraulic Damping Vector Diagnostics
Be honest about your level — it shifts both the baseline graphic below and how many clicks the troubleshooter suggests moving at once. Overstating it can push you into changes bigger than you can actually feel.
This assumes one compression and one rebound adjuster per end, like most stock and mid-tier suspension. If yours has separate high/low-speed circuits, treat this as your low-speed starting point.
Front
Rear
Fluid Dynamic Assessment
Hydraulic Circuit Troubleshooter
Pick what you're actually feeling out on track or the street — not the technical cause. The diagnosis and fix are below.
💡 Change one click at a time, on the same road or same section of track, back-to-back — otherwise you're guessing which change actually did what.
Oil Level & Viscosity
Clickers adjust the shim stack. Oil level and viscosity change the fluid itself — the thing the shim stack is working against. If you've maxed out your clickers and it's still not right, this is usually the next place to look, not another re-valve.
Be honest about your level — it changes how big a move the troubleshooter below suggests.
Fork Fluid Behavior Map
Fork Oil Settings
Rear Shock Oil & Gas Charge
No oil level (air gap) slider here on purpose — a fork is a genuinely different design. Forks use an intentional air gap above the oil that gets compressed for progressive end-of-stroke resistance, which is exactly why oil level is a real tunable parameter up there. A rear shock's damper body is sealed and fully oil-filled, with no air gap to speak of; the job of giving the fluid somewhere to go under hard, fast compression is handled by a separate nitrogen gas charge instead (in the piggyback reservoir or an internal bladder). Different mechanism, different parameter — viscosity and gas pressure, not "oil level."
This range is illustrative, not a spec — actual gas charge PSI varies a lot by shock model and manufacturer. Set it to your shock's actual spec sheet as the real baseline; treat this slider as showing the direction of the effect, not a number to chase.
Oil Troubleshooter
Pick what you're feeling. If clickers alone haven't fixed it, this is usually why.
💡 Change one thing at a time — air gap or viscosity, not both — and give it a full session before judging, since fade-related symptoms only show up once things get hot.
Chassis Geometry & Swingarm Anti-Squat Structural Vectors
1. Main Frame Rake and Trail Alignments
2. Swingarm Kinematics & Wheelbase Slots
3. Fork Offset & Trail
Set by the triple clamps, not a clicker. Less offset = more trail = more stable, heavier steering. More offset = less trail = lighter, quicker, less planted at speed. Roughly 1mm of offset moves trail about 1mm the other way — a rule of thumb, not an exact figure for your bike.
Geometric Handling Balance Map
Track Geometry Advisor (Track / Racing)
Describe what this specific track demands, and this sets a suggested starting point on the four sliders above — it drives the same map, it doesn't replace it.
Geometry Troubleshooter
Pick what you're feeling and where in the corner it happens — straight, braking, entry, mid-corner, or exit.
💡 Change one lever at a time — fork height, rear height, pivot, or wheelbase — and go back to the same corner before changing another. Moving two at once means you won't know which one actually fixed it.
Be honest — it changes how big a move the troubleshooter suggests.
Testing — Reading the Bike, Not Just the Numbers
Every other tab in this plugin is about dialing in a number on a stand — sag targets, damping clicks, pressures, geometry. This tab is the opposite direction: simple checks you do with the bike, before and after you ride, to see whether what you dialed in is actually what's happening out there. None of these replace the calculators elsewhere — they're the reality check that tells you whether to trust the number or go back and dig further.
1. Static Balance Check
A quick push test that tells you whether the front and rear are working together as one system, before you ever add speed, weight transfer, or cornering forces into the mix.
How to do it: bike upright on level ground, off any stand, both wheels down, nobody sitting on it. Find roughly the bike's center — usually somewhere around the tank/seat junction. Push down firmly right there and watch the front fork and rear shock together as they compress: they should move down at a similar rate, not one end diving noticeably faster or deeper than the other. Then let go and watch them come back up — both ends should extend at a similar rate too, not one snapping back quicker while the other lags.
If they're off — one end visibly faster or slower going down, or coming back up — that's a compression or rebound damping mismatch between the two ends, not something sag or preload alone will fix. Adjust the faster end's damping up (or the slower end's down) until they move together.
This gives you a solid static baseline — how the two ends respond in isolation, with no weight transfer or moving contact patch involved. What actually happens under real riding load can shift from this, so treat it as a starting reference to test against on track or the road, not a final answer.
2. Zip Tie Fork Travel Marker
A loose zip tie around one fork stanchion is the cheapest travel indicator you'll ever own. With the front fully extended, slide it down until it rests on the dust seal — that's your zero. As the fork compresses, the seal pushes the tie up the stanchion and it stays at the highest point reached, even after the fork extends back out.
Barely moved: using very little travel — not necessarily wrong, but worth knowing.
Comfortably up the tube, room left above: healthy, normal usage.
Right up near the top: you're bottoming out — a real warning, treat it as a case for more preload or compression damping.
Run one on each leg for a consistency check — if the two sides don't match, check Geometry & Swingarm before assuming it's a straightforward suspension setting.
A relative, by-eye read, not a measurement — it tells you whether your Suspension & Sag numbers are holding up in the real world, it doesn't replace them.
3. Tire Pressures & Temperatures
Two separate readings, both worth taking every time: pressure cold (before you ride, your known baseline) and pressure hot (immediately after, before it has time to bleed back down) — the rise between the two tells you whether you're actually reaching working pressure or overshooting it. Log both; the delta matters as much as either number alone.
Temperature is the same idea applied across the tread instead of over time — take it at the inner, center, and outer thirds of the contact patch (a pyrometer probed into the rubber is far more reliable than a surface IR gun, which mostly reads whatever's on top of the rubber, not the rubber itself). Even heat across all three thirds generally means pressure and lean angle usage are matched to the tire; a hot edge next to a cold one is a pressure or geometry mismatch, not something to average away.
Log the actual numbers and get the diagnosis on the Tires & Thermals tab — the fields and the interpretation both live there. This box is just the "why" behind taking the readings this specific way.
For tracking these numbers session to session rather than just diagnosing one reading, log them in the Setup Sheet tab alongside whatever else changed that session — that's what actually lets you tell whether a pressure change did what you expected, instead of relying on memory.
4. Lap Time Tracking (track)
Every check on this tab, every number on every other tab, is ultimately in service of one outcome: is the bike faster and more predictable to ride? Lap time is the only number that can't be argued with — it's the one place where a setup change either shows up or it didn't.
That's exactly why the Setup Sheet tab has a Lap Time field built into every session, right alongside every setting you changed for that session. Log it every time, even on a day that felt slow — a session that felt bad but times fine tells you something different than one that felt bad and was slow, and you can't tell them apart later without both pieces logged together.
One change at a time, one session at a time, lap time and notes logged alongside it — that's what turns the Setup Sheet from a list of numbers into an actual record of what worked. Without it, you're relying on memory for which change did what, and memory is the least reliable instrument on the bike.
A single quick lap doesn't prove much either way — conditions, traffic, and a cold tire can swing a lap time more than most setup changes do. Look for a consistent shift across a run, not one outlier lap.
Tire Pressure & Appearance
Pressure and appearance are the two things worth checking first — appearance tells you what already happened, pressure and compound are usually what you change because of it. A tire tells a fairly honest story if you know how to read it: cold and hot pressure together show whether you're building heat the way the compound expects, and where the wear or damage actually sits across the tread points at pressure, geometry, or riding style specifically, not just "the tire's worn out." Treat this tab as a diagnostic first and a logbook second — the numbers matter less on their own than what they mean when read together.
1. Pressure & Hot Lap Track Thermals
2. Tire Size Comparison
Changing tire size affects rolling circumference and ride height. This tells you the tire-side effect — apply the actual slider move on the Geometry & Swingarm tab.
Diameter only — check the tire's spec sheet or sidewall, or look up the size code online. Estimating from width/aspect can be off by 2x or more on race slicks, so it's not worth the false precision.
Tire Pressure Balance Map
The confusing part: hotter conditions build heat faster, so start lower on cold pressure. Colder conditions build heat slower, so start higher — otherwise you never reach working pressure at all.
Pressure & Dimension Diagnostics
3. Compound
Tire Troubleshooter
Pick what you're feeling or seeing — appearance, pressure feel, or compound behavior.
What does your tire actually look like?
Cold Tear
Rough, chunky, torn — not melted
Hot Tear
Shallow, shedding patches
Overheated / Greasy
Marbled, debris stuck to surface
Healthy
Even, consistent, fine texture
Reference photos only — lighting, compound, and camera angle all affect how a surface looks. Use these as a rough guide, not a certain diagnosis. Appearance alone can't tell you whether it's pressure or compound — pick the matching symptom below for both possibilities.
💡 Change one thing at a time — pressure or compound, not both — and give it a full run before judging, since some of this only shows up once the tire's fully cycled.
Be honest — it changes how big a move the troubleshooter suggests.
Electronic Interventions & Engine Management Maps
Modern race electronics do in software what riders used to do by feel alone — reading lean angle, wheel speed, and pitch dozens of times a second and stepping in before you can react. Every one of these systems is still just a leash, though: fully off gives you the raw mechanical bike, all rider; fully on gives the ECU the most room to intervene. None of it fixes a bad mechanical setup — it masks it, sometimes just long enough to hide the real problem. If you're leaning hard on TC or Slide Control to hold a line the chassis won't hold on its own, that's worth chasing on the Suspension & Sag or Geometry & Swingarm tabs too.
1. Central Integrated Power Strategy Modes
2. Fine-Tuning Multi-Axis Subsystem Integration Arrays
Position 0 switches the selected processor completely OFF.
Not a safety processor, so 0 here means Direct (least smoothing) rather than "off" — this is the shape of the power curve for a given throttle position. Some bikes bundle it into Riding Mode automatically; others let you set it independently.
Power Cut & Slippage Matrix
Illustrative, relative percentages showing how your settings interact — not manufacturer telemetry or a claim about your specific bike's actual ECU curves.
ABS, Cornering ABS, and Rear Lift-off Mitigation all trade some raw stopping power for stability — each catches a problem sooner, but that also means intervening before the tire's or chassis's true limit more often. This bar is that trade, not a claim about absolute stopping distance in feet or meters.
The IMU: Why These Systems Talk to Each Other
TC, Slide Control, Wheelie Control, and Cornering ABS all read from the same 6-axis Inertial Measurement Unit — that's why they behave consistently as a set (e.g. all getting more conservative together at higher lean) instead of acting like unrelated, independent systems.
3. Digital Logic Systems Troubleshooter
Symptoms are sorted by where you're actually riding — a Street list and a Track list, since the same complaint often points at a different system (or isn't an electronics question at all) depending on which one you're in.
Final Drive Transmission Gearing Strategy Dashboard
This tab only touches the last link in the chain — literally: front and rear sprockets, the final drive ratio. The diagram shows why that's a narrower job than it sounds: your bike's actual ratio in any gear is Primary × Gearbox × Final Drive, all multiplied together. Changing sprockets scales that whole stack by the same amount in every gear at once — which is exactly what makes the solver below work, and also why it can't fix a wrong internal gearbox ratio, only work around it. Street riders get a quicker-revving, more connected engine (or better highway economy geared the other way); track riders get a way to stop guessing and calculate the exact combo that uses the whole straight.
1. Countershaft & Hub Sprocket Allocation Comparer
Test modifications to pinpoint ratio changes down to single-tooth accuracy adjustments.
2. Long Straightaway RPM Optimization Solver
Give it your CURRENT sprockets (above), redline, and what you actually saw at the braking marker last session — it calculates the specific sprocket combo to close the gap, not a generic "try a tooth" guess.
Whichever gear you actually ended up in at the marker is fine to enter — closing an RPM gap works the same in any gear, since a sprocket change scales every gear by the same amount. It doesn't have to be 6th.
Drive Ratio Optimization Array
Straightaway Solver Result
3. Gearing Troubleshooter
A sprocket change touches more than just the ratio number — chain fit, chassis behavior, and everyday rideability all move with it.
Global Diagnostic Router
Every other tab's troubleshooter is the real, maintained answer for its own system — this one doesn't duplicate any of that. Its job is the step before: a complaint like "runs wide on exit" isn't one thing, it's Electronics, Geometry, and chassis balance all capable of causing the exact same feeling. This tab tells you which of those to actually go check, in the order worth checking them, then sends you straight to the specific answer.
1. Cross-System Symptom Router
Category shifts which system is worth checking first, not which ones are possible — a track rider leaning on active electronics gets a different first stop than a street rider who mostly doesn't.
2. Describe It Yourself
Not on the list above, or don't know the right words for it? Search across every specific symptom in every troubleshooter in this plugin — 94 of them — and jump straight to a match.
Likely Systems, In Order
Search Results
Member Community
Log in from My Profile to access this.
DISCLAIMER: The patterns, trends, and suggestions across these tabs come from your own logged data — they're a way to spot what's worth a closer look, not professional coaching, fitness, or medical advice. Use your own judgment, and check with a qualified coach or doctor for anything more serious.
What My Performance Analyzer Is
A place to log real lap times, race results, and what actually happened on track — session by session — and let honest patterns surface over time instead of relying on memory or a gut feeling about what's working. Everything it says is built from data you logged yourself; it never guesses at things it can't know, like another rider's pace or a finishing position without the real results to back it up. Four tabs, each building on the last:
1. Full Session Lap Times
The foundation everything else reads from. Log every lap of a practice, qualifying, warm-up, or race session — either typed in one at a time or uploaded as a CSV — along with an honest note on what happened each lap if anything did. This is also where Track, Bike, and Weekend Name get set; a Race Weekend groups several sessions (Friday practice, Saturday qualifying, Sunday race) under one shared name, even though each keeps its own real date. Once two or more sessions exist at the same track, a Your Trends box appears automatically, showing how pace, consistency, and the things you tagged are actually trending. Checking the box on entries at Logged Days (further down this tab) also unlocks Archive & Reset — once you're done with a track or weekend and don't need the lap-by-lap detail cluttering the page anymore, this permanently clears it while keeping its trends, stamina, consistency, and recurring patterns alive in Long Haul Analyzer going forward. One thing it doesn't currently carry forward: Split Analysis (tab 2) only reads live sessions, so archiving a session with splits logged means losing its contribution there specifically — the confirmation dialog says so plainly before anything happens.
2. Best Lap Time Analysis
Doesn't have its own separate entries — it works directly on the sessions already logged in tab 1. Add the session leader's best lap and split times to any session here, and it builds a Sector Breakdown (which section of the track is actually costing time, and whether that lines up with what you tagged) plus the same kind of trend analysis as tab 1, scoped to whichever track or weekend you're looking at.
3. Race Position Analyzer
Built specifically around races — your total time, the winner's time, grid position, and how the start went. Optionally link it to a Race session already logged in tab 1 (it'll usually guess the right one once Track and Bike are set) to unlock a real time-cost breakdown: which flagged laps actually cost time, and what your theoretical race time would have been without them. Upload the official results sheet for that race and this becomes the one place in the app that will actually state a real finishing position — everywhere else deliberately sticks to time alone, since it has no way to know the rest of the field's pace without that file.
4. Long Haul Analyzer
The season-long view — reads straight from everything already logged in the first three tabs, tied to one bike at a time so a genuine equipment change never gets blurred together with actual rider progress. Nothing separate to fill in here beyond picking which bike to look at.
A Few Things Worth Knowing
Nothing merges automatically. Every session or race you save is its own entry, permanently. Track, Weekend Name, or Bike matching close-but-not-exact between two entries never silently combines or splits them behind the scenes — where entries need to be viewed together, that's always a deliberate choice (checking boxes in tab 1, or picking a link in tab 3), never an automatic guess based on matching text.
Auto-filled fields stay editable. Your Total Race Time, Winner's Total Race Time, and Bike can all fill themselves in from linked data — but every one of them can still be typed over by hand if the guess is wrong or the official number differs slightly from what the lap timer logged.
CSV uploads exist in two different places for two different things: the lap-times CSV in tab 1 (your own lap-by-lap data for one session) and the results CSV in tab 3 (the whole field's official finishing times for one race) — they're not interchangeable, and each has its own format explained right where you upload it. A photo of a paper timing sheet or printed results works too — a chat with Claude or another AI can read either one into the right format.
Archive & Reset clears clutter without losing history. Check entries at one track in tab 1's Logged Days, and an Archive & Reset button appears — it permanently removes the raw lap-by-lap detail for those sessions, but Long Haul Analyzer keeps their trends, stamina, consistency, and recurring patterns alive going forward. The one thing it doesn't carry forward yet is Split Analysis, which only reads live (non-archived) sessions.
Advice throughout stays hands-off on purpose. It'll point at what's worth checking on the bike, or worth a closer look on video, or worth building through seat time — never a raw riding directive like "brake later" or "go faster." The disclaimer above means it, not just as a formality.
Getting a Full Lap Sheet In
Fill in the session details below, then either upload a CSV of lap times or add them one by one. Every session you save becomes its own entry — check the box on two or more to view them combined (stats + one CSV export) without merging them for good, so nothing ever gets silently fragmented by a date or a name typed slightly differently between sessions.
Add a Session's Laps
This one resets after every save on purpose — it's the field most likely to actually change between sessions, so it's never left holding whatever was picked last.
Format: lap #, time, optional note. Anything that isn't a real lap time (titles, instructions, headers) is skipped automatically. Uses whatever Track/Bike/Event Type/Date/Session Type are set above — pick those first. Photo of a paper timing sheet? A chat with Claude or another AI can read it into this format — just won't have notes on it to transcribe.
⬇ Download fillable Excel template
Or add individual laps/list here:
Logged Days
Check the box on any entries below to combine them into one view — stats and a single CSV export, without merging anything permanently. For a race weekend, checking every session logged for it is the way to see the whole weekend's picture at once. Checking a single track's worth of entries also unlocks Archive & Reset — permanently clears the raw lap detail for those sessions while keeping their trends alive in Long Haul Analyzer, for once you're done with a track or weekend and want it out of the way.
Best Lap Time Analysis
Every session logged under Full Session Lap Times shows up below automatically, with its best lap already pulled from that log — nothing to retype. Fill in what you can for each one first: the session leader's best lap, and — if you've got real sector timing, not just a stopwatch — up to three splits with an honest reason for each. Once that's in, Your Trends at the bottom turns it into the bigger picture across every session at that track.
Race Position Analyzer
Links to an already-logged Race session on Full Session Lap Times for the lap-by-lap time cost — or works on its own with just your total time, the winner's, and your grid position. Photo of an official results sheet? A chat with Claude or another AI can read the field's finishing times, which is what turns "time lost" into an actual position you could have been racing for — but that lookup is yours to make against the real results, this app doesn't guess at other riders' pace.
This is the official results sheet for the whole race — everyone's finishing position and time, not just yours. Photo of a printed or posted results sheet? A chat with Claude or another AI can read the field's times into this format for you to upload here.
Upload here before you hit Save to unlock the extra conclusions that need a real field to compare against — your actual finishing position, whether the flagged laps would have actually changed it, and whether a rough start explains a position loss the lap times alone don't. Without this, Save still logs everything else fine, just without those.
Logged Races
Results CSVs are attached above, alongside Save, when you first log a race — format: position, rider name, and either a full time or a "+gap" to the leader (mixing both is fine, it's detected per row). DNF/DNS/DQ and "+1 Lap" are recognized and kept out of the ranking rather than treated as a real time. Once attached, this is the one place the app will actually name a position — everywhere else it deliberately sticks to time, since it doesn't know the field's real pace without this.
Long Haul Analyzer
Personal and per-track performance over a season or longer — not one session or race in isolation, but the shape of progress across everything already logged in Full Session Lap Times, Best Lap Time Analysis, and Race Position Analyzer combined. Tied to one bike at a time, since mixing bikes together would blur a genuine equipment change together with actual rider progress rather than show either one clearly — pick which bike below before anything else. This tab reads straight from what's already logged elsewhere; there's nothing separate to fill in here beyond that.
Coach Can Akkaya’s book, Mind Over Machine is available on Amazon as ebook, paper or hardcover.













Leave a Reply
Want to join the discussion?Feel free to contribute!