The Optional Stop newsletter
Home | More Issues | Contact Us
From our website:
Home
Products
Services
Resources
On-Line Classes
CD-Rom Courses
CNC Books
Software
CNC Jobs
CNC Schools
CNC Tips
Educator's Page
Tech Talk Forum
Back Issues

March 22, 2012

Dear Subscribers,

Welcome to Issue 90!  I hope you agree that we've put together another informative issue. 

Special thanks to Mark Albert, Editor for Modern Machine Shop Magazine for including this newsletter in his blog after our last issue was published.  He placed special emphasis on the article related to CNC operator skills - and we received many requests from readers wanting to be added to our distribution list.  Again, thanks Mark!

In this issue we've included a range of topics.  Again, enjoy! 

 

Mike Lynch

IN THIS ISSUE
Product Corner: Eleven self-study manuals to learn many facets of CNC
Instructor Note: Do you have a listing on our (free) schools page?
Manager's Insight: Having to hire new people?
G Code Primer: Reasons for using a strict programming structure
Macro Maven: Help for re-running cutting tools in a program
Parameter Preference: Arc center specification
Safety First: Repeat initialized words at the beginning of all programs

Product Corner: Eleven self-study manuals to learn many facets of CNC

These highly tutorial materials help you learn about CNC from the ground up without taxing your pocket book. We offer seven self-study manuals to help you learn the basics of CNC. All assume you know nothing about CNC. Some even assume you have no previous machine shop experience. All include lots of exercises – indeed some have tests and programming activities included. Others require the purchase of a separate workbook and answer-book to take full advantage of all the practice you can do.

  • Machining center setup and operation - $60.00 – for milling-type CNC machines called machining centers – assumes you have no previous shop experience, let alone CNC experience – includes twelve exercises and answers.  Machining center programming - $60.00 – follow up to the machining center setup and operation self-study manual – stresses G code level manual programming – includes sixteen exercises and eleven programming activities – answers included.

  • Turning center setup and operation - $60.00 – for lathe-type CNC machines called turning centers – assumes you have no previous shop experience, let alone CNC experience – includes twelve exercises and answers.

  • Machining center programming - $60.00 – follow up to the machining center setup and operation self-study manual – stresses G code level manual programming – includes eighteen exercises and eleven programming activities – answers included.

  • Turning center programming - $60.00 – follow up to the turning center setup and operation self-study manual – stresses G code level manual programming – includes eighteen exercises and eleven programming activities – answers included.

  • Machining center programming, setup, and operation - $70.00 – assumes you have experience in a machine shop and understand basic machining practices – stresses all three tasks a person must master to become proficient – stresses G code level manual programming, how to get a machine up and running a job, and how to complete a production run – requires separate workbook and answer book combination ($49.90) if you want to do the twenty-four exercises and eleven programming activities.

  • Turning center programming, setup, and operation - $70.00 – assumes you have experience in a machine shop and understand basic machining practices – stresses all three tasks a person must master to become proficient – stresses G code level manual programming, how to get a machine up and running a job, and how to complete a production run – requires separate workbook and answer book combination ($49.90) if you want to do the twenty-eight exercises and twelve programming activities.

  • Router programming, setup, and operation - $60.00 – assumes you have experience in a woodworking shop and understand some basic concepts (like blueprint reading) – stresses all three tasks a person must master to become proficient – stresses G code level manual programming, how to get a machine up and running a job, and how to complete a production run – requires separate workbook and answer book combination ($39.90) if you want to do the twenty-three exercises and ten programming activities.

We also offer self-study manuals for more advanced CNC topics. While they are still quite tutorial in nature, with some we do not provide any practice exercises or programming activities. We simply relate the more advanced information.

  • Parametric programming for CNC machining centers and turning centers - $60.00 – stresses three versions of parametric programming – custom macro B (Fanuc), user task 2 (Okuma), and macro (Fadal) – separate workbook and answer book combination available for $39.90.

  • Setup reduction for CNC machining centers and turning centers - $50.00 – presents principles of setup reduction (that can be applied to any kind of production machine tools) and specific techniques to reduce setup time on CNC machining centers and turning centers.

  • Cycle time reduction for CNC machining centers and turning centers - $50.00 – presents principles of cycle time reduction (that can be applied to any kind of production machine tools) and specific techniques to production run time on CNC machining centers and turning centers.

  • Getting more from your CNC machines - $70.00 – Chapters include basic premises you must understand, who are you?, machine utilization must dictate personnel utilization, advanced techniques, setup reduction principles, setup reduction techniques, cycle time reduction principles, cycle time reduction techniques – setup and cycle time reduction materials are the same as are in the separate self-study manuals.

 

M01

Top of page

Instructor Note: Do you have a listing on our (free) schools page?

It is important to take advantage of every opportunity to let potential students know about your manufacturing-related (including CNC) classes. It doesn’t matter how good your manufacturing classes are if you cannot attract students to them. Most educators know this, and do as much as they can to get the word out. For example, most make regular trips to local high schools and manufacturing companies for recruiting purposes. If you are not currently doing so, then you should strongly consider doing so soon.

Today all community colleges, technical schools, and universities have web sites that promote the school and provide information about what the school teaches. But unfortunately, many do not make it very easy for potential students to find any meaningful information about the CNC-related (or manufacturing) classes they provide. I have unsuccessfully searched many school sites looking for manufacturing classes only to find later that the school did indeed have a manufacturing (and CNC) program, but it was not at all visible on the school’s website.

I urge educators to ensure that your school’s manufacturing program is included in the school’s web site, that it is kept up-to-date, that you list people and phone numbers for students to call should they have questions, and – not the least of which – that it is easy to navigate to the related web pages. Your goal should be to make it as easy as possible for perspective students to find information about your classes.

To help you promote your school, my company provides a CNC schools page. It can be found here:

Listings are free, meaning all you have to do to be included is to fill in and submit a listing form. You can find it here:

The listing includes a link your school’s website (or more preferably, a page on your web site that promotes your CNC classes) and some basic information perspective students will be interested in. Once submitted, I usually get the listing posted within a few days.

I know people are using this page because I get several calls a week from perspective students asking if we know of a school in their area. Though we try to make it clear that we’re simply listing schools that have submitted, people seem to think we’re running all of the schools we list. Also, if you search for “CNC schools” in Google, our schools page comes up right at the top. So please consider taking advantage of this free service.

M01

Top of page

Manager's Insight: Having to hire new people?

While job growth in the United States is still rather slow, most so-called experts say our economy is on the rise – and that manufacturing is among the leading reasons. What a refreshing change! For the last twenty years (or more it seems), we’ve seen manufacturing move overseas, along with the related jobs. Add to this the worst economic disasters of our life-times and even more manufacturing jobs went down the drain. So it’s great to see an increase in manufacturing. It is long overdue.

Unfortunately, growing companies are finding it difficult – if not impossible – to find skilled people to attend to manufacturing equipment – including CNC machine tools. And there are at least three reasons for this.

First, many skilled people left our field– or were forced to leave –during the recent down-turn. Many were let-go as companies down-sized – and few waited around for times to change back. They cross trained themselves and went into other fields. And after being burned so badly, it’s unlikely that they will ever come back to our field. Indeed, most feel they were treated badly, and wouldn’t come back on a bet.

Second, we have an aging work force. Regardless of whether they have managed to stay employed during the down-turn, older skilled workers are getting ready to retire or have already done so. Many even took early retirement as times began to get worse.

Third, young people have been discouraged from entering our field – there were so few jobs, and the jobs that did exist didn’t always pay very well. And there are the all-too familiar fears of manufacturing stereotypes and misconceptions about working in sweat shops and having to get their hands dirty. For these reasons and more, there haven’t been many parents in recent years who encouraged their kids to pursue careers in our field – nor have there been many young people who wanted to chance it.

Now that times are finally turning around, companies need to grow again. While many companies have found ways to stay productive with fewer people, there comes a point for all companies when adding people is mandatory for continued growth.

Few manufacturing companies in the U.S. have done any large-scale hiring for a very long time – nor have they had to compete with other companies for perspective employees. And unfortunately, companies that are now starting to search for qualified people are finding the well pretty dry. For the reasons just given, there simply aren’t enough skilled people to go around.

So what do you do? One approach should be to contact your local community college (or a technical school in your area) to see if they have a manufacturing program. If they do, they may have graduates for you to choose from. Unfortunately, you may find that others have already beaten you to the punch. The school may not be graduating enough people to satisfy the needs of industry in your area – and graduating students for the next year or so may have already committed to other companies.

If your local school doesn’t have a manufacturing program, be sure to make it clear that you have an interest in hiring skilled manufacturing people. Many schools are currently evaluating the feasibility of reinstating there manufacturing programs. Your input – and that of people from other manufacturing companies in your area – could help sway them.

You might also check with local high schools – especially those with any kind of vocational emphasis. I’m amazed by what I’ve seen being done at high school level – both in the content of curriculum and the quality of machine tools being used.

You can, of course, use traditional methods – like running ads in local newspaper classifieds, contacting employment agencies, etc., but again, you may find the pickings to be pretty slim. Note that my company does maintain a free jobs page on our web site – you can post a free listing and/or look through people that have posted listings for themselves.
People looking for jobs:

Companies looking for people:

The job listing form:

If you cannot find qualified people through traditional means, you only alternative may be to hire inexperienced (yet motivated) people and train them. Frankly speaking, it is my belief that – for most companies in the foreseeable future – this will be the only viable method for acquiring people with the skills a CNC-using company requires.

While it may be only part of your training solution, my company does have some materials that can help. For entry level positions of CNC setup person and CNC operator, we have reasonably priced on-line classes and self-study manuals for CNC setup and operation. They begin with lengthy chapters on basic machining practices like shop safety, shop math, blueprint reading, tolerance interpretation, measuring devices, machining operations, and cutting tools. And of course they continue with chapters teaching what it takes to get a CNC machine up and running – and keep it running through a production run. They are available for both CNC machining centers (mills) and CNC turning centers (lathes). We also have more advanced materials that teach programming, setup reduction, cycle time reduction, and other topics related to getting more out of your CNC machine tools. You can find more information here:
On-line classes:

Self-study manuals (scroll to the second major topic):

CD-rom courses:

In recent years, it has been an employer’s market. Companies could dictate wages – and since so many people were out of work, people had to work for what was offered. But as times continue to get better, our field will become more of a worker’s market. Be prepared to pay more as companies compete for available people – especially skilled people. This must be factored into your plans for growth.

M01

Top of page

G Code Primer: Reasons for using a strict programming structure

I’ve seen all kinds of structure (or lack of it) in CNC programs. Admittedly, it is hard to argue with success – and if the structure you use is working for you, by all means, continue using it. I simply want to make a few suggestions that may get you thinking about the structure you use.

Here is an example of a structure recommended for vertical CNC machining centers.

Program startup:

  • O0001 (program number)

  • N001 G17 G20 G23 (Select XY plane, inch mode, cancel stored stroke limit)

  • N002 G40 G50 G64 (Cancel cutter radius compensation, cancel scaling, select normal cutting mode)

  • N003 G67 G69 G80 (Cancel modal custom macro call, cancel rotation, cancel canned cycle)

  • (TOOL NAME FOR FIRST TOOL)

  • N005 T01 M06 (Load first tool in spindle)

  • N010 G54 G90 S300 M03 T02 (Select fixture offset, absolute mode, turn spindle on fwd at desired RPM, get next tool ready)

  • N015 G00 X5.0 Y5.0 (Move to first XY position)

  • N020 G43 H01 Z0.1 (Instate tool length compensation for first tool, move to first Z position)

  • N025 M08 (Turn on the coolant)

  • N030 G01 . . . . F3.0 (In first cutting movement, be sure to include a feedrate)

Tool changing:

  • N075 M09 (Turn the coolant off)

  • N080 G91 G28 Z0 M19 (Return to tool change position, orient the spindle during motion)

  • N085 M01 (Optional stop)

  • (TOOL NAME FOR THIS TOOL)

  • N135 T02 M06 (Ensure that the next station is still ready and make the tool change)

  • N140 G54 G90 S450 M03 T03 (Select fixture offset, select absolute mode, turn spindle on CW at desired RPM, get next tool ready)

  • N145 G00 X4.0 Y4.0 (Move to this tool’s first XY position)

  • N150 G43 H02 Z0.1 (Instate tool length compensation, move to first Z position)

  • N155 M08 (Turn on the coolant)

  • N160 G01…. F4.0 (In first cutting movement, be sure to include a feedrate)

Program ending:

  • N310 M09 (Turn coolant off)

  • N315 G91 G28 X0 Z0 M19 (Return to tool change position in Z, orient spindle during motion)

  • N320 G28 Y0 (Return to zero return position in Y)

  • N325 M30 (End of program)

Notice right off the bat that a large percentage of commands in most programs are related to the program’s structure. Only the commands related to what the cutting tool is doing (motion commands) are not part of the structure shown.

Familiarization

The first reason I offer for strictly structuring your programs is that it will help you (and others that view your programs) become familiar with programming words and commands.

When you start writing a new program, simply follow the program startup format. Then write the motion commands for the first tool. When you’re done with the first tool, follow the tool changing structure. Then write the motion commands for the second tool. Repeat this process until you’re finished with the last tool’s cutting motions – and finish by following the program ending structure.

With the format developed, you – and others – won’t have to memorize all words and commands in a program. You’ll simply have to remember what the word or command does when you see it. This should be easy since the word or command will be in the correct context of a CNC program.

You may be questioning the first three commands after the program number (N1 through N3). I call these safety commands. The goal is to ensure that all initialized states (words that are automatically instated during power up) are still in effect. The G20, for example, ensures that the machine is in the Imperial measurement system (inch) mode. Since many Fanuc controls allow only three compatible G codes per command, we break the safety commands into three separate commands.

Consistency

Setup people and operators must often read – and work on – your programs. Using a strict structure ensures that once they learn how you structure your programs, they won’t be in for any nasty surprises. It will also help you repeat past successes since if the structure works in one program, it will continue to work in another.

If your company has more than one programmer, it is important to ensure that they all structure their programs in the same manner. I have been in companies that have several programmers, and everyone structures their programs differently. This can wreak havoc for setup people and operators, since they’ll have multiple program structures to learn.

Re-running tools

The most important reason for strictly formatting programs is to allow the re-running of individual cutting tools. If you have a five-tool program and something goes wrong in the middle of the fifth tool, you’ll need to correct the problem and run the fifth tool again. It wouldn’t make sense – nor would it be advisable – to run the entire program again just to get to the fifth tool. Doing so would be a waste of time – and could cause some damage to the workpiece.

The way a program is structured determines whether it will be possible to re-run individual tools. Certain programming words and commands needed to at the beginning of the program will be needed for each tool. In some cases, this means repeating some redundant information at the beginning of each tool – just to gain the ability to rerun the tool should the need arise.


M01

Top of page

Macro Maven: Help for re-running cutting tools in a program

Most programmers do not overly consider program restarting when they develop programs. Most will simple include all CNC words and commands necessary to start up the program at the beginning of each tool, even if it means some redundancy in the program. They then expect the setup person or operator to possess the skill required to restart programs (determining and scanning to the correct command in the program and executing from there). But as many CNC-using companies have found out, restart mistakes can be very costly

Unfortunately, it may be impossible to make the process of re-running tools totally fail-safe. Some kind of mistake can always be made, regardless of how simple you make the procedure. But if you're willing to modify the way programs are written - and if your machines have custom macro B - there is a way to dramatically simplify the task. Again, it requires modification to your current programs. If you have but a few programs to run (lots of repeat business), it shouldn't be too bad. Consider this simple program:

  • O0004

  • N001 G17 G20 G23

  • N002 G40 G50 G64

  • N003 G67 G69 G80

  •  

  • (TEST FOR RESTART HERE)

  • IF [#500 EQ 0] GOTO 5 (NO RESTART)

  • IF [#500 EQ 1.0] GOTO 5

  • IF [#500 EQ 2.0] GOTO 105

  • IF [#500 EQ 3.0] GOTO 150

  • IF [#500 EQ 4.0] GOTO 240

  • #3000 = 100 (BAD RESTART NUMBER)

  •  

  • (CENTER DRILL)

  • N005 #500 = 0

  • N008 T01 M06

  • N010 G54 G90 S1200 M03 T02

  • N015 G00 X0 Y0 (pt 1)

  • N020 G43 H01 Z0.1

  • N025 M08

  • N030 G01 Z-0.12 F4.0

  • N035 G00 Z0.1

  • N040 Y1.125 (pt 2)

  • N045 G01 Z-0.12

  • N050 G00 Z0.0

  • N055 X1.125 Y0 (pt 3)

  • N050 G01 Z-0.12

  • N055 G00 Z0.1

  • N060 X0 Y-1.125 (pt 4)

  • N065 G01 Z-0.1

  • N070 G00 Z0.1

  • N075 X-1.125 Y0 (pt 5)

  • N080 G01 Z-0.1

  • N085 G00 Z0.1

  • N090 G00 Z0.1 M09 

  • N095 G91 G28 Z0 M19

  • N100 M01

  •  

  • (1.0 DRILL)

  • N105 #500 = 0

  • N108 T02 M06

  • N110 G54 G90 S350 M03 T03

  • N115 G00 X0 Y0 (pt 1)

  • N120 G43 H02 Z0.1

  • N125 M08

  • N130 G01 Z-0.83 F6.5

  • N135 G00 Z0.1 M09

  • N140 G91 G28 Z0 M19

  • N145 M01

  •  

  • (3/8 DRILL)

  • N150 #500 = 0

  • N153 T03 M06

  • N155 G54 G90 S800 M03 T04

  • N165 G00 X0 Y1.125 (pt 2)

  • N170 G43 H03 Z0.1

  • N175 M08

  • N180 G01 Z-0.64 F5.0

  • N185 G00 Z0.1

  • N190 X1.125 Y0 (pt 3)

  • N195 G01 Z-0.64

  • N200 G00 Z0.1

  • N205 X0 Y-1.125 (pt 4)

  • N210 G01 Z-0.64

  • N215 G00 Z0.1

  • N220 X-1.125 Y0 (pt 5)

  • N225 G01 Z-0.64

  • N230 G00 Z0.1 M09

  • N235 G91 G28 Z0 M19

  • N240 M01

  •  

  • (3/4 END MILL)

  • N245 #500 = 0

  • N248 T04 M06

  • N250 G54 G90 S450 M03 T01

  • N255 G00 X0 Y0 (pt 1)

  • N260 G43 H04 Z0.1

  • N265 M08

  • N270 G01 Z-0.25 F50.0

  • N275 Y0.125 F5.5 (pt 6)

  • N280 G42 D34 X-0.625 (pt 7)

  • N285 G02 X0 Y0.75 R0.625 (pt 8)

  • N290 Y-0.75 R0.75 (pt 9)

  • N295 Y0.75 R0.75 (pt 8)

  • N300 X0.625 Y0.125 R0.625 (pt 10)

  • N305 G01 G40 X0 (pt 6)

  • N310 G00 Z0.1 M09

  • N315 G91 G28 Z0 M19

  • N400 G28 Y0

  • N405 M30

We're using permanent common variable #500 to specify the station number for the tool at which the program must be restarted (I'm assuming that you'd only be restarting at the beginning of each tool, but similar techniques could be used if you want to restart in the middle of tools).

#500 (or any permanent common variable) can be set manually, just like an offset. With many controls you can even place a message next to this variable on the variables page by giving this command:

  • SETVN 500 [RESTART TOOL NO.] 

Normally the value of #500 will be zero - so the program will run in its normal manner. When a tool must be rerun, the operator simply enters (manually) the restart tool station number in this permanent common variable. The series of IF statements determine which tool is to be rerun and jump to the appropriate command. Note that each tool resets #500 back to zero so the next time the program is run, it will not restart again (unless the operators sets a value in #500.

While there will still be some obstacles to overcome (some tool changers require different restart commands depending upon which tool is currently in the spindle), with a little more work, you should be able to get the needed results.

 

M01

 

Top of page

Parameter Preference: Arc center specification

Circular motion commands (G02 and G03), of course, cause the machine to articulate an arc with two of the machine’s axes (usually X and Y on a machining center or X and Z on a turning center). In similar fashion, helical motion – for machining centers – allows two axes to articulate a circular motion while the third axis (usually Z) moves in a linear fashion. In both cases, the machine requires two specifications – the end point of the motion and the arc size/center.

The end point specification is universal among control manufacturers. That is, you’ll always specify an X, Y, and/or Z departure in the circular/helical motion command. But control manufacturers vary when it comes to how the arc size/center is specified – and some make it easier than others.

Most current controls make it easy – requiring only the arc size to be specified. This is commonly done with an R word. For most circular/helical motions, the control will automatically figure out where the center point for the arc is located based on the end point and arc size. Most manual programmers use the R word for all of the circular/helical motions they command.

There are some circular/helical motions that require a bit more work. If, for example, you want to cause a full 360 degree circular motion in one command, most controls do not allow you to do so with the R word. Instead, they require an older method of arc specification using one of two methods. In both cases, letter addresses I, J, and K are used.

With one method, the distance and direction from the start point to the center of the arc are required. These are called directional vectors. With the other method, the absolute position of the arc center is specified. In both cases, I is related to the X axis value, J is related to the Y axis value, and K is related to the Z axis value.

The main point of this article is that many current model controls allow you to specify which method of arc size/center specification is desired with a parameter setting. While this may not be of immediate need to many programmers, there is at least one time when you’ll want to know this.

Say you have a computer aided manufacturing (CAM) system that is outputting CNC programs for all of your machines. And say it is outputting circular commands with I, J, and K values (instead of the R word). At this point in time all of your machines may be requiring (or set for) arc center specification with directional vectors. So your CAM system is outputting I, J, and K values accordingly.

The day may come when you buy a CNC machine that requires arc center specification with the absolute position of the arc center. While the CAM system can be set to specify circular commands in this manner, it may be wiser to change the machine’s parameter to make the machine accept circular commands with directional vectors. This will allow consistency among your machines – you won’t have to maintain two separate CNC programs for each job.

To find out whether your machine’s control has a parameter related to arc center specification, look in the programming manual in the section for circular motion. If your machine has this parameter, documentation for which parameter is related and how it must be set will be provided in this section of your manual.


M01Top of page

Safety First: Repeat initialized words at the beginning of all programs

As you probably know, initialized words those that are automatically instated at power up. Most are modal G codes that select the most common or desired choice for the modal state. And since there are many choices for modal states, many G codes are initialized.
As an example, consider the current motion type. G codes G00, G01, G02, and G03 control the most basic motion types – and all are modal. With many machines G00 (rapid motion mode) is initialized, meaning right after the power is turned on and before any other commands are given, any axis motion specifications (X, Y, and/or Z) will be executed at rapid.

There are some rather obscure – or at least not commonly thought of – G codes that are also initialized. And there correct setting is crucial to the successful running of the program. If the machine is not in the correct mode, the results could be disastrous. Consider the measurement system mode selection (Imperial or Metric). If you work in the Metric measurement system, your machine will initialize to the Metric mode – specified with G21 with many machines.

Many programmers assume that certain initialized words are still in effect when their programs are run. This can be a terrible – and often dangerous – mistake. With this example (Metric system selection), the programmer may not be including a G21 close to the beginning of the program. Again, they’re assuming the machine is still in the Metric mode from power up. But if someone has selected the Imperial (inch)measurement system mode – possibly by running a program since power up that required it – the machine will be in the imperial system mode when the program requiring the Metric measurement system mode is run.

In this case, the machine will take the millimeter specified coordinate in the program as inches. 200.0 mm will be accepted as 200 inches. All commanded motions will travel much further than intended. At the very least, the machine will probably over-travel in one of the axes. Worse, the machine may cause a tool to go crashing into a workpiece or fixture.

For this reason, we urge programmers to include a series of commands at the beginning of all program to ensure that initialized modes are still in effect when the program is run. I call them safety commands since they are of paramount importance to safely running programs. Here is an example for a machining center.

  • N001 G17 G20 G23 (Select XY plane, inch mode, cancel stored stroke limit)

  • N002 G40 G50 G64 (Cancel cutter radius compensation, cancel scaling, select normal cutting mode)

  • N003 G67 G69 G80 (Cancel modal custom macro call, cancel rotation, cancel canned cycle)

Note that many controls allow only three compatible G codes per command, which is why multiple safety commands are given.

M01

Top of page

 
 
Sofware ad
 
Machining center training materials
 
Parametric programming ad

The Optional Stop newsletter is published quarterly by CNC Concepts, Inc. and is distributed free of charge to people subscribing to our (email) distribution list and to those downloading it from our website (www.cncci.com). Information is aimed at CNC users and instructors teaching live CNC classes. All techniques given in this newsletter are intended to help CNC people. However, CNC Concepts, Inc. can accept no responsibility for the use or misuse of the techniques given.

To subscribe: Simply email us (newsletter@cncci.com) and let us know you'd like to be added to our distribution list.

To unsubscribe: Respond to this email, typing REMOVE in the subject. Please accept our apologies if we have disturbed you.

ThirtyThirty hotel
Powered by Best Free Counters