Introduction: CNC Needle Cutter
"Cutting foam sheets... with a needle!" I'd been wanting to build a CNC machine for cutting 20"x30" sheets of foam board for a few years - basically since I got hooked on building and flying cheap RC planes. I'd actually wanted a CNC machine for much longer, well before I got hooked on RC planes. I had looked into it a few times but always decided it was too expensive to justify. But that click bait sounding title worked on me and I gave it a click.
I had just build my first 3D printer less than a week before, and had seen the MPCNC on thingiverse but the idea of a 3D printed CNC machine just sounded like a bad idea to me so I skipped over it. But reading the needle cutter thread I saw that the guy who developed it had built several CNC machines over the years and was now hooked on the MPCNC. Still, my printer was new and that's a LOT of printing to build that machine. So I didn't dig right in but just watched for awhile.
What I saw continued to impress me. And finally I decided I had to give it a try. So I dug in on building a MPCNC.
First a little more background:
Needle Cutter Theory - The theory behind the needle cutter is that it works very much like a sewing machine causing a sharp needle to go up and down rapidly enough to repeatedly puncture the foam board. Ideally you want a needle speed matched to your feedrate to achieve 10-15 punctures per mm for a super smooth cut. This is also similar to how a tattoo machine works and there are a number of different ways to achieve the conversion of rotation motion to a reciprocating up/down movement. The foam cutter uses the simplest approach by taking advantage of the flexibility of the needle. This mechanically simple approach is easy to build and get working - but does mean the needles are consumable as the repeated flexing does fatigue them over time.
Needle Cutter Benefits - You can cut foamboard with a regular spindle and a small end mill. However it creates a lot of dust which is a real pain to deal with due to the static charge it picks up. You also wind up with a rather large kerf (the material removed by the tooling) and the detail you can achieve is limited by the size of the tool you use - larger tools give less detail while smaller tools are easier to break and work slower. The needle cutter has none of these drawbacks. It creates VERY little dust and most of what it does create gets pressed into the waste board. With a 0.025" needle the kerf is also very small, not quite as small as the needle itself but still far smaller than the kerf from an endmill (and some people have used even thinner needles - though they can be problematic and wear quicker.) Finally the needle cutter also excels at fine detail on both inside and outside corners - again due to the tiny size of the cutting tool. While far from silent it's also considerably quieter than most low cost spindles.
Oh...and also it can be considerably cheaper. I already had the motor and speed controller on hand, but suitable motors and controllers can be purchased for ~$20 on ebay or Amazon. Most of the parts to build one can be purchased at dollar tree - David who popularized the needle cutter made one from mouse traps bought at a dollar store for the entire structure and crankshaft! For me the two biggest expenses were a few dollars for several pieces of piano wire to make the needle and $13 I spent on a digital optical tach for dialing in the speed correctly.
Alright - now...let's build a CNC machine to mount this thing on first!
Step 1: Build a CNC Machine
NOTE: The MPCNC has gone through a major design upgrade since I printed mine. The new parts make for a stiffer machine but I haven't had time to reprint mine and upgrade yet. The version in my photos is the old version which is no longer posted.
Printing the MPCNC took me a long time. I don't have any reason to distrust my printer, but I do. Even with a fire alarm right over it I don't like letting it print unattended or overnight. I started printing on Feb 18th with the 4 corner locks that clamp the conduit to the corner blocks. Estimated print time was 4 hours...but the actual print took me almost 8. I knew my printing time estimates were off from doing smaller prints but didn't realize how much worse the estimates would get as the print times went up! It took me close to a month to print the parts with my first test assembly happening on March 13th.
Unfortunately I had to do it all over again. I ran out of the "purple" (honestly, it's far more pink than purple) Hatchbox filament I started with and ordered a roll of Black to finish with thinking it would provide a nice contrast. But Amazon delivered me eSun filament instead of Hatchbox. No big deal I figured...I'd heard the eSun was pretty good so why not try it instead of hassling with a return. Well...the roll I got was utter junk. It printed well enough - though had serious bed adhesion issues I haven't experience before or since with any other filament. But every time I'd finish printing the filament would snap just above my extruder and the next 6-10 inches would be brittle. I'd cut out the brittle part and keep going. That turned out to be a bad call. The finished parts all started failing. Some would break in half just sitting on my desk!
But I also realized just how big this machine was going to be! The design of the MPCNC means you loose a good bit of working area. To fit 20"x30" sheets of foam board I had to build the machine 3' x 4', Once I test assembled it it was obvious that this was way bigger than I had mentally envisioned and I had to face the dilemma of where to store it and use it! My plan of building on the dining room table wasn't going to work. I was going to have to clean out my old home office and finally convert it into a shop - lots of work...but well worth it!
The downside is I live in southern AZ where summer temps regularly hit 110F (44C) and higher. My shop is air conditioned...but I don't run the AC out there full time to save money. A machine printed in PLA did not have a good chance of surviving. So...I chose to reprint all the parts in PETG. I also decided to first build the machine on a 2'x2' footprint (giving about 13"x13" work area) to test and debug before rebuilding it a third time to it's full size.
Building the MPCNC really deserves it's own instructable, one of these days maybe I'll find time to make that happen.
This kind of breaks the timeline a bit, but once I had the smaller version up and working I dug right in on getting a needle cutter working.
Step 2: Building the Cutter
I chose to 3D print my cutter. This isn't the only way. The original cutters David made were wooden. Others have built them from aluminum. Basically all you need is a way to hold a motor and create reciprocating action on the needle.
David shared his designs on thingiverse starting with his first 3D printed cutter using a standard brushed motor: http://www.thingiverse.com/thing:1138627
He followed that up with an improved version using a brushless motor http://www.thingiverse.com/thing:1211039 I happened to have the exact same motor on hand and not being used so that was the version I chose to start with.
While I was printing my machine David continued to improve his cutter design. The original design used a 3D printed flywheel which had to be carefully balanced to run smooth. He also used a 3D printed mount for the needle guide but had issues with the guide heating from friction and melting the mount.
The new design replaced the flywheel with a lightweight crank made from a clothespin spring, and replaced the printed guide mount with a simple piece of 1/4" wood (David cut his from a dollar store mousetrap, I used some scrap oak I had on hand.)
Experiments were also ongoing about the best choice of needle guide. In the photo I'm using a welding tip which seemed like the way to go at the time. But they seem to generate more friction and don't dissipate the heat fast enough. David went back to his original air inflation needle and I followed.
The needle itself is fashioned from 0.025" piano wire I got at a local hobby store. There aren't any exact dimensions for it but you want it to stick out of the guide as little as possible. I cut mine a little long initially, then wrap them around an old drill bit to create the coil that goes over the crank. It's important to pay attention to which way the motor/crank turns and which way your coil sits so that it can't get caught on the crank as it turns. Once it's mounted on the crank I cut it off so that with the crank at it's lowest position (deepest cut) I have enough needle sticking out to go completely through my foam board and just one or two mm's into my waste board (I use pink insulating foam from the hardware store as waste board - but more on that later.) . The shorter you can keep the needle the more accurate the cutting will be.
The end of the needle is then sharpened by twirling it in my fingers while gently touching it to a cutting disc on a Dremel to create a nice sharp conical tip. It will cut with a dull tip, but will tend to drift a little and leave a very ragged bottom of the cut.
With the cutter finished mechanically it was time to wire it up and test it out!
Step 3: Testing the Cutter.
The suggested setup for the cutter was a 12v power supply or 2s Lipo, a servo tester to control the ESC (Electronic Speed Controller) and an optical tachometer to set the speed.
My good 12v supply is burned out and I didn't feel like rigging up another computer supply...so I just used a 3s lipo pack which is 12.6v fully charged but nominally 11.4v - close enough for testing. A 2s lipo is only 8.4v fully charged and 7.6v nominal. (Lipo cells are 4.2 volts fully charged / 3.8v nominal - the Xs notation indicates how may cells are in a pack. Cell voltage * Xs = pack voltage.)
The speed controller came with the motor in a power pack setup from Flitetest.com which I bought when I visited their flitefest event last summer in Ohio and was used for a few rounds of aerial combat before being stripped out since I didn't have room to bring a plane back to AZ with me. The components here aren't critical. The cutter works best with a motor RPM of around 6,000RPM and the optical tach is a great way to make sure you're at that sweet spot.
This motor is an EMAX CF2822 1200KV which is commonly available and low cost, but any similarly sized brushless outrunner RC motor can work. 1200KV means that this motor will give 1200RPM for every 1V of power it's supplied at full throttle. So at 12v full throttle you'll get 14,400 RPM out of this motor...the cutter puts very little load on the motor so this is way more than adequate.
I didn't have a servo tester on hand, but I had quite a few arduino's so I grabbed the closest one at hand (which happened to be a mega) and loaded up one of the example servo sketches which uses a potentiometer to control the speed. This is a standard example sketch that ships with arduino and basically works the same as a servo tester...just a bit more cumbersome.
I fired it up...and it scared me...but holding it in my hand I was able to make some not very straight cuts my moving it across a piece of foam board! I connected it to my MPCNC, generated some gcode...and was able to cut a few small shapes! This thing had potential! I even got brave and tried to cut the RotorRiot logo with fairly good success. My first attempts were a little jagged, but shortening the needle and sharpening it quickly improved that. The biggest problem I had was due my own sloppiness in creating the gcode as I had to trace a bitmap to get the vector art to pass to my CAM software and rushed the job out of excitement leaving a few minor errors.
After some experimenting my cuts continued to improve...but fairly quickly my needle broke right where the coil was that mounts it to the crankshaft. This was likely due to a combination of the needle being too long and being run way too fast. At this point I didn't have a tach yet and was just trying to guestimate motor speed based on percentage of throttle sent to the ESC. The problem is I forgot that ESC's aren't very linear, and I missed that David had suggested using a 2s pack instead of 3s...I also made a few silly arithmetic errors. As a result while I thought I was running around 6k RPM I was actually doing more like 15k-20k! Which led to a number of weeks of frustration and continued revisions trying to figure out why I was having problems with my needles flying off. (Since the very first test I've always worn eye protection and a full face shield while testing and would strongly suggest doing the same!)
My frustrations with flying needles led to continued refinement of the needle cutter.
Step 4: Improving the Cutter
So my initial needle broke fairly quickly. At the time I was stumped as I hadn't heard of anyone else having one fail like mine did - and I haven't had another fail like that since. But in hind sight I now know that I was running too high of a speed and too long of a needle which was putting too much force on it.
I also swapped from the welding tip to an air inflation needle - the air inflation needle resulted in a much cooler running needle. Our current theory is that the higher mass of the welding tip held in more of the heat generated from the friction of the needle while the low mass inflation needle an dissipate the heat much quicker.
However My replacement needles refused to stay on the cutter. They kept flying off on me. I tried adding various things to the end of the crank to help retain them, but spent over a month fighting with the cutter and the problem of it throwing needles. However there were signs of what was wrong - I just continuously misinterpreted them.
The first obvious sign was that the needle was visibly bowing out while cutting, bad enough that it wore a groove into the base of the cutter bracket where the needle guide attached. What finally convinced me that it wasn't the design of my crankshaft (I had gone through half a dozen revisions at this point) was a video of a needle getting tossed. When a friend watched it he played it back in slow motion and commented "wow, that crank is really expanding"
Which was the key thing I had been missing. Looking at the video again now it's obvious even at regular speed that the crank was deforming from the high RPM's. I considered making a tach myself and even tried a few sound based tach apps on my phone. But finally gave in and spent the $13 on an optical tach. As soon as I tried the optical tach the problem was obvious. I set it back up the way I had been going and pointed the tach...only to see 16k RPM read back at me! Woah, that's a bit more than the 6k I was aiming for!
On the servo tester I was at about a 7 - I ended up having to dial back to 2.5 to get it down to 6k, no wonder I was having so many issues! At the proper speed it's a lot less scary sounding and I've yet to have a single needle go flying since taming it down.
However - while I was fighting with flying needles David and others continued to experiment and improve the basic cutter design. And I suffered a cutter failure that forced me to jump in on the new improvements.
Step 5: Improve the Cutter...again.
My cutter fell apart! When I first printed it I noticed that a few layers had some issues. I used MakerGeeks PLA for these parts and I've had ongoing issues with their PLA not always feeding well and suddenly jamming up like the nozzle was clogged even when it isn't. (I have since solved this issue by adding a small bit of paper towel with some cooking oil on it over the filament just before it feeds into my extruder - since adding that I haven't had any further issues and the MG PLA has been printing like a dream.) .
I was able to glue the cutter back together and keep going. But as I mentioned David had made some improvements to the basic cutter design. Nothing major, but enough that I wanted to try the new version. The big difference is he simply made it taller.
I took this basic change and redrew the cutter mount in openSCAD attempting to make the design more parametric so it could be customized. The result came out pretty close to how I had hoped: http://www.thingiverse.com/thing:1723915 The defaults give a nice standard cutter, but almost everything about it can be customized to fit the users needs. The motor mounting screws can be changed to match different motors, the height can be adjusted to experiment with longer/shorter needles, and the needle guide mounts can be changed to match what the user has on hand.
The one thing I'm not entirely happy with is the mount selection. Currently the only options are no mount or the hicwic mount. I do plan on implementing the new default MPCNC mount, but since I haven't had time to upgrade my MPCNC to use that mount it's been on the back burner. I did make a non parameterized version with the default mount: http://www.thingiverse.com/thing:1976501 but it's not wonderful. Printing it requires support due to the design of the mount. When I finally add this style of mount to the customizable version I'm going to convert that from two pieces to one so it can print without support.
At this point my cutter finally became reliable so I dug in on enlarging my machine to finally fit full 20"x30" sheets of foam board!
Step 6: Make Some Cuts!
Enlarging the MPCNC was fairly straight forward. Mostly a matter of cutting new longer pieces of conduit and then reassembling it with them. I did run into a few issues due to my choice to use CAT5 network connectors on the stepper wiring to make it easier to connect/disconnect. On my initial 2'x2' setup this made sense since I moved the machine around quite a bit. But on this setup it's not going anywhere so there really was no need to have the wires easy to detach, and eliminating the RJ-45's also eliminated some wiring confusion and intermittent connections.
My First full sheet cut wasn't perfect. I didn't have the sheet in quite the right position so my cut ended up going off the edge, and I had my starting Z too low and my raise between moves too short so the needle dragged between cuts. There was also some bowing to the foam board which made the problem worse and just taping the board down wasn't sufficient to eliminate that. I'm working on a vac table to solve the issue...but haven't had time to fully finalize it.
So my machine finally works and works rather well. I get nice clean cuts, I can control it to give full cuts or partial depth cuts, and I haven't had one thrown needle or failure since finally dialing in the speed correctly!
Next let's go over some tips to help you avoid my mistakes if you decide to build your own.
Step 7: Needle Cutter Resources
First some resources:
David's thread on Flight Test is very active and where I learned about the needle cutter. It's not only about the needle cutter at this point though. We've had quite a few discussions about other uses for the machines as well and lately have been experimenting with drag knifes for cutting vinyl decals and lasers for engraving and cutting wood and other materials. It's a long thread but a good read with tons of great information including all of my own successes and failures:
David initially shared his creation and it's evolution on a different forum, RC Powers, and the discussion there continues as well. This thread also includes his walkthrough of building an MPCNC and several other user builds and foam cutting information:
David also has a thread on Open Builds discussing the cutter and featuring more user builds:
RC Groups also features a thread David started which includes another method of monitoring the needle speed using an inline tach instead of an optical tach:
Oddly enough the thread David started on the official MPCNC forums about his needle cutter is the least used...but here it is for reference as well:
Bottom line is there are tons of people building and enjoying these simple needle cutters so if you have any issues getting one up and running there are a number of sources you can turn to for assistance! And if you're just planning a build there's piles of information and personal experiences you can draw on to base your plans off of.
So...with all that and my experiences in mind let's review how to build one without going through the months of trial and error I did :D
Step 8: Tips for Building Your Own
First you'll need to collect your parts:
- Motor - just needs to be able to maintain 6k RPM under light load. Brushed motors can work, but brushless seems to give the best results and the EMAX CF2822 1200kv has proven to be a popular choice. It's affordable and easy to find and has a suitable RPM range. It also has a shaft that happens to fit most clothespin springs quite well.
- ESC - Your motor will determine your speed controller, but it doesn't need to be much. I've used a small 10a controller just fine as there's almost no load on the motor. One thing I've been wanting to look into is using a controller with blheli firmware to try it's governor mode and see if I can just program the ESC to hold a steady 6200 RPM instead of using the tach to dial it in with throttle. I would love to hear how this goes if anyone tries it before I get a chance.
- Servo tester - or some other way of getting a signal to the speed controller. Servo testers are common and cheap, you can get them delivered from China for <$3 on ebay and sites like banggood.com But an arduino can work as well. On an MPCNC you can also just use the servo outputs on the RAMPS board - though it's not as user friendly since you don't have a nice easy knob to adjust the speeds with. I have a version of Marlin I modified the LCD menus in to have an extra menu just for the MPCNC including three menu options for sending set values to the servo outputs: https://github.com/jhitesma/Marlin-Folger/tree/mp... the default settings on there are still probably too high, but it's an interesting starting point. Once you find the proper speed you could even add commands to your gcode to start/stop the cutter automatically.
- Power Source - I generally just use a 12v bench supply now, but a battery can work as well. The cutter is low draw enough that you don't really have to worry about a battery going dead even during a 30 minute cut.
- Crankshaft - Don't bother with the old flywheel style setup, the crankshaft is simpler and works just fine. You may luck out and find a clothespin laying around that has a proper sized spring. I ended up buying bags of pins from three different stores before finding some that I liked the size of the spring on best.
- Needle - This is just a piece of 0.025" piano wire commonly available from hobby and craft stores. It is a consumable item but comes in a bundle of 3 - 3' sections for a few dollars which is enough for quite a few needles!
- Needle guide - The air inflation needle seems to be the best bet here, but a MIG tip can work as well. The air inflation needle you'll have to trim the tip off and try to remove any burrs but that's a quick and easy job with a small cutoff wheel.
- Mount - The 3D printed mount is very popular. But mounts have been made from wood and aluminum as well as other materials. Basically anything that can hold the motor and needle guide and mount to your CNC machine can work.
- Tachometer - Optional but HIGHLY recommended. If I had bought one I wouldn't have spent over a month fighting with flying needles! There are in-line tachs that read the speed from the signals sent by the ESC, or the optical tachs like I used. I like the optical one since it can be used on all kinds of things. Alternatively if you can come up with some other way to make sure your motor is running at the correct RPM (like a governed ESC or a motor that turns at 6k at an easy to provide voltage) go for it.
Then, put them together! It's fairly straight forward. Just pay attention to the direction of the coils on the needle and the crankshaft so that the crankshaft will self tighten and the needle will bounce off the crank instead of getting caught on it if it rides up. There are tons of builds in the threads I posted on the last step including a few detailed descriptions of how people have built theirs.
Things to watch for are the crank deforming and the needle bowing - both of those are symptoms of running too high of an RPM on the motor.
Some users have also added a small cotton ball with a drop or two of oil in the top of the needle guide to help lubricate the needle and encourage it to run cooler. I haven't tried this yet but as long as you don't add too much oil I can't see any harm to trying it
The needle cutter works best with a feed rate of about 600-1000 mm/min, David suggests and RPM of 8k-10k to go with those speeds...but I've found 6k works best on my cutter. You want to match your motor RPM and feed rate to get about 10-15 "pokes" per mm for a clean cut. But the cutter really gives best results at slower speeds. A few people have tried running them much faster but it quickly becomes more difficult to maintain due to the forces on the needle and the issues I experienced with the needle flying off the crank. The flywheel style setup is probably better if you want to try higher speeds...but is a lot more work to get setup and has to be balanced VERY carefully at those speeds.
I hope you give it a go and this helps some people avoid the issues I ran into with mine. Now that it's working it's a wonderful tool to have for easily and accurately cutting large sheets of foam. The only thing keeping me from using it more often are not having finished a vacuum table and being too lazy to convert PDF based designs into gcode very often ;)
Step 9: Future Improvements
A vacuum table! I already started on this but it's been on hold mostly because I want to finish a vacuum shoe for my spindle first due to the mess it makes cutting pink insulation foam. My initial attempt mostly came out, but I had a belt slip on my X axis throwing off the cuts a bit. I also didn't want to drill a hole in my table for the vacuum hose so I modified an existing design on Thingiverse to allow me to make an offset nozzle for my vacuum to make it easier to hook up. http://www.thingiverse.com/thing:1776239 The basic plan for the vac table is to route the set of grooves into a sheet of pink insulation foam that's been glued down to a piece of thin plywood to keep it flat. Then mill a pocket into the top that will allow a sheet of foam board with a grid of holes drilled/milled into it to sit over the grooves leaving an opening on one side where the nozzle can attach. When I eventually finish the vac table I'll hopefully remember to make a new instructable for it.
LCD Customizations. I already did a few basic ones in my fork of Marlin: https://github.com/jhitesma/Marlin-Folger/tree/mpc... . Basically I added options that let me reset the zero position on the machine, turn the needle on and off at a set speed and a few other common commands. Now that I also have a laser on my machine and more experience using the machine I want to rethink the menus entirely and make settings I use commonly easier to access.
ESC Feedback. I really want to experiment with the governed modes in blheli to see if I can get the motor to run a constant speed without using a tach to dial it in. It's possible to just create a customized firmware for an ESC that would do it but that's a bit beyond my coding skills. It looks like the governor stuff in blheli will do what I want, I just need to find time to play with it.
Step 10: More of the Machine in Action
I just want to stop and thank everyone who voted for this in the CNC 2016 contest, I'm overwhelmed by the response to this instructable and can't wait to use the new router I won!
You also inspired me to do some more cutting and show the machine in action a bit better.
So I branched out and instead of a new plane I cut a 3D dinosaur skeleton from this design:
That design is for 1/8" or 3.175mm material, Adams Rediboard from the dollar tree ($1 a sheet!) is just over 5mm thick. I don't have the exact measurements handy but if you have the exact measurements you can do a bit of math (larger size / smaller size = scale factor) or since foam board isn't super precise a bit of trial and error can work just as well. I opened the SVG in inkscape and selected all the objects then scaled by 180%. The measurement tool showed this as pretty close so I did a test of one piece. It fit but was just a little loose. So I went back and scaled by only 170% instead which gave a better fit even though the measurement suggested it would be a bit too tight.
With the SVG scaled to match foamboard I then opened it in ESTLCAM and setup my tool. I used a tool diameter of 0.8mm after measuring my needle, and set the feed rate at 10mm/sec (or 600mm/min) and the tool depth to 8mm matching how much needle sticks out past my guide.
I used the engrave option to generate toolpaths down the center of the lines with 6mm cutting depth to make sure it went fully through the 5mm board and then saved the resulting gcode to a SD card to load in the RAMPS LCD controller I use to control the machine.
On the machine I setup for the cut by putting down a piece of 1/2" pink insulation board with carpet tape as a spoil board and then used a few bits of regular tape to hold my foamboard on top. The big issue is that foamboard rarely sits flat, so I also added a few random tools I had laying around on the foam to hold it flat while it cut. I just move them around to clear the cutter while it works. I really need to finish that vac table :D
With the work in place I moved the cutter so the needle was just over the lower left corner had set as 0,0 when creating my gcode and then rotated the cutter motor so the needle was fully extended. With the needle fully extended I slowly lowered my z gantry until the needle just barely scraped the surface of the board.
Next I powered up the cutter and used my laser tach to dial in the speed to ~6,000RPM
Finally I selected my file and hit go. Then just had to move my weights around as it cut :D
When the cut is finished the work will usually be slightly stuck to the spoil board as the two foams slightly melt together from the friction generated by the needle. The pieces will usually still be stuck slightly in place. If your needle is "just right" then pieces may fall out by themselves. Right now my needle is a little too long so it's kind of sloppy and isn't creating a perfect cut on the bottom surface, but I kind of like this since it holds the pieces in place. It just takes very gentle pressure to pop them loose - though on the smallest pieces I'll sometimes carefully run a sharp knife over the bottom of the cuts to free the pieces first. If you don't want to keep the paper on the foam you could also just peel it off to free the parts as the foam is fully cut it's just the bottom layer of paper that is still somewhat holding together. But I measured with the paper so I like to keep it.
With the parts out I followed the assembly instructions from the designer and was rewarded with a nice big foam T-Rex skeleton!
Cutting the T-rex took 28 minutes. I also cut a new FT Scout to replace my worn out one which took a little over 30 minutes. I also started cutting the velociraptor from the same designer as the T-Rex which was a 38 minute cut when scaled up...but had a small issue with my ESC shutting down halfway through. I haven't fully debugged that yet but I think what happened is one of my motor wires rubbed against the motor bell and cut through the insulation shorting it out. At least I can see the scrape so that makes sense ;) Need to do a bit better wire management and I'll be back in action.
We have a be nice policy.
Please be positive and constructive.