"It Takes More Than That to Kill a Bull Moose":
The Leader and The Cause*

* Address at Milwaukee, Wis., October, 14, 1912. Just before entering the auditorium at Milwaukee, an attempt was made on Colonel Roosevelt's life. The above speech is from a stenographic report, differing considerably from the prepared manuscript.

[TR was shot in an assasination attempt by John Schrank, who had been having disturbing dreams about TR's predecessor, William McKinley and also thought that no president should serve more than two terms.
Schrank spent the rest of his life in a mental institution. No one came to visit him. He died shortly after Franklin Delano Roosevelt, TR's fifth cousin, was elected to a third term. Schrank had stalked TR for thousands of miles before getting a clear shot at him in Milwaukee. Schrank was caught on the spot.]
Friends, I shall ask you to be as quiet as possible. I don't know whether you fully understand that I have just been shot; but it takes more than that to kill a Bull Moose. But fortunately I had my manuscript, so you see I was going to make a long speech, and there is a bullet - there is where the bullet went through - and it probably saved me from it going into my heart. The bullet is in me now, so that I cannot make a very long speech, but I will try my best.

And now, friends, I want to take advantage of this incident to say a word of solemn warning to my fellow countrymen. First of all, I want to say this about myself: I have altogether too important things to think of to feel any concern over my own death; and now I cannot speak to you insincerely within five minutes of being shot. I am telling you the literal truth when I say that my concern is for many other things. It is not in the least for my own life. I want you to understand that I am ahead of the game, anyway. No man has had a happier life than I have led; a happier life in every way. I have been able to do certain things that I greatly wished to do, and I am interested in doing other things. I can tell you with absolute truthfulness that I am very much uninterested in whether I am shot or not. It was just as when I was colonel of my regiment. I always felt that a private was to be excused for feeling at times some pangs of anxiety about his personal safety, but I cannot understand a man fit to be a colonel who can pay any heed to his personal safety when he is occupied as he ought to be with the absorbing desire to do his duty.

I am in this cause with my whole heart and soul. I believe that the Progressive movement is making life a little easier for all our people; a movement to try to take the burdens off the men and especially the women and children of this country. I am absorbed in the success of that movement.

Friends, I ask you now this evening to accept what I am saying as absolutely true, when I tell you I am not thinking of my own success. I am not thinking of my life or of anything connected with me personally. I am thinking of the movement. I say this by way of introduction, because I want to say something very serious to our people and especially to the newspapers. I don't know anything about who the man was who shot me to-night. He was seized at once by one of the stenographers in my party, Mr. Martin, and I suppose is now in the hands of the police. He shot to kill. He shot - the shot, the bullet went in here - I will show you.

I am going to ask you to be as quiet as possible for I am not able to give to challenge of the bull moose quite as loudly. Now, I do not know who he was or what he represented. He was a coward. He stood in the darkness in the crowd around the automobile and when they cheered me, and I got up to bow, he stepped forward and shot me in the darkness.

Now, friends, of course, I do not know, as I say, anything about him; but it is a very natural thing that weak and vicious minds should be inflamed to acts of violence by the kind of awful mendacity and abuse that have been heaped upon me for the last three months by the papers in the interest of not only Mr. Debs but of Mr. Wilson and Mr. Taft.

Friends, I will disown and repudiate any man of my party who attacks with such foul slander and abuse any opponent of any other party; and now I wish to say seriously to all the daily newspapers, to the Republicans, the Democrat, and Socialist parties, that they cannot, month in month out and year in and year out, make the kind of untruthful, of bitter assault that they have made and not expect that brutal, violent natures, or brutal and violent characters, especially when the brutality is accompanied by a not very strong mind; they cannot expect that such natures will be unaffected by it.

Now, friends, I am not speaking for myself at all, I give you my word, I do not care a rap about being shot; not a rap.

I have had a good many experiences in my time and this is one of them. What I care for is my country. I wish I were able to impress upon my people -- our people, the duty to feel strongly but to speak the truth of their opponents. I say now, I have never said one word one the stump against any opponent that I cannot defend. I have said nothing that I could not substantiate and nothing that I ought not to have said -- nothing that I -- nothing that, looking back at, I would not say again.

Now, friends, it ought not to be too much to ask that our opponents -[speaking to some one on the stage]-I am not sick at all. I am all right. I cannot tell you of what infinitesimal importance I regard this incident as compared with the great issues at stake in this campaign, and I ask it not for my sake, not the least in the world, but for the sake of common country, that they make up their minds to speak only the truth, and not use that kind of slander and mendacity which if taken seriously must incite weak and violent natures to crimes of violence. Don't you make any mistake. Don't you pity me. I am all right. I am all right and you cannot escape listening to the speech either.

And now, friends, this incident that has just occurred - this effort to assassinate me- emphasizes to a peculiar degree the need of the Progressive movement. Friends, every good citizen ought to do everything in his or her power to prevent the coming of the day when we shall see in this country two recognized creeds fighting one another, when we shall see the creed of the "Havenots" arraigned against the creed of the "Haves." When that day comes then such incidents as this to-night will be commonplace in our history. When you make poor men - when you permit the conditions to grow such that the poor man as such will be swayed by his sense of injury against the men who try to hold what they improperly have won, when that day comes, the most awful passions will be let loose and it will be an ill day for our country.

Now, friends, what we who are in this movement are endeavoring to do is forestall any such movement for justice now - a movement in which we ask all just men of generous hearts to join with the men who feel in their souls that lift upward which bids them refuse to be satisfied themselves while their countrymen and countrywomen suffer from avoidable misery. Now, friends, what we Progressives are trying to do is to enroll rich or poor, whatever their social or industrial position, to stand together for the most elementary rights of good citizenship, those elementary rights which are the foundation of good citizenship in this great Republic of ours.

(At this point a renewed effort was made to persuade Mr. Roosevelt to conclude his speech.)

My friends are a little more nervous than I am. Don't you waste any sympathy on me. I have had an A-1 time in life and I am having it now.

I never in my life was in any movement in which I was able to serve with such whole-hearted devotion as in this; in which I was able to feel as I do in this that common weal. I have fought for the good of our common country.

And now, friends, I shall have to cut short much of that speech that I meant to give you, but I want to touch on just two or three points.

In the first place, speaking to you here in Milwaukee, I wish to say that the Progressive party is making its appeals to all our fellow citizens without any regard to their creed or to their birthplace. We do not regard as essential the way in which a man worships his God or as being affected by where he was born. We regard it as a matter of spirit and purpose. In New York, while I was police commissioner, the two men from whom I got the most assistance were Jacob Riis, who was born in Denmark, and Arthur von Briesen, who was born in Germany - both of them as fine examples of the best and highest American citizenship as you could find in any part of this country.

I have just been introduced by one of your own men here - Henry Cochems. His grandfather, his father, and that father's seven brothers, all served in the United States army, and they entered it four years after they had come to this country from Germany. Two of them left their lives, spent their lives, on the field of battle. I am all right - I am a little sore. Anybody has a right to be sore with a bullet in him. You would find that if I was in battle now I would be leading my men just the same. Just the same way I am going to make this speech.

At one time I promoted five men for gallantry on the field of battle. Afterward in making some inquiries about them I found that two of them were Protestants, two Catholic, and one a Jew. One Protestant came from Germany and one was born in Ireland. I did not promote them because of their religion. It just happened that way. If all five of them had been Jews I would have promoted them, or if all five of them had been Protestants I would have promoted them; or if they had been Catholics. In that regiment I had a man born in Italy who distinguished himself by gallantry; there was another young fellow, a son of Polish parents, and another who came here when he was a child from Bohemia, who likewise distinguished themselves; and friends, I assure you, that I was incapable of considering any question whatever, but the worth of each individual as a fighting man. If he was a good fighting man, then I saw that Uncle Sam got the benefit of it. That is all.

I make the same appeal to our citizenship. I ask in our civic life that we in the same way pay heed only to the man's quality of citizenship, to repudiate as the worst enemy that we can have whoever tries to get us to discriminate for or against any man because of his creed or birthplace.

Now, friends, in the same way I want out people to stand by one another without regard to differences or class or occupation. I have always stood by labor-unions. I am going to make one omission to-night. I have prepared my speech because Mr. Wilson had seen fit to attack me by showing up his record in comparison with mine. But I am not going to do that to-night. I am going to simply speak of what I myself have done and what I think ought to be done in this country of ours.

It is essential that here should be organizations of labor. This is an era of organization. Capital organizes and therefore labor must organize. My appeal for organized labor is two-fold; to the outsider and the capitalist I make my appeal to treat the laborer fairly, to recognize the fact that he must organize that there must be such organization, that the laboring man must organize for his own protection, and that it is the duty of the rest of is to help him and not hinder him in organizing. That is one-half appeal that I make.

Now, the other half is to the labor man himself. My appeal to him is to remember that as he wants justice, so he must do justice. I want every labor man, every labor leader, every organized union man, to take the lead in denouncing disorder and in denouncing the inciting of riot; that in this country we shall proceed under the protection of our laws and with all respect to the laws, I want the labor men to feel in their turn that exactly as justice must be done them so they must do justice. They must bear their duty as citizens, their duty to this great country of ours, and that they must not rest content unless they do that duty to the fullest degree.

I know these doctors, when they get hold of me, will never let me go back, and there are just a few more things that I want to say to you.

And here I have got to make one comparison between Mr. Wilson and myself, simply because he has invited it and I cannot shrink from it. Mr. Wilson has seen fit to attack me, to say that I did not do much against the trusts when I was President. I have got two answers to make to that. In the first place what I did, and then I want to compare what I did when I was President with what Mr. Wilson did not do when he was governor.

When I took the office the antitrust law was practically a dead letter and the interstate commerce law in as poor a condition. I had to revive both laws. I did. I enforced both. It will be easy enough to do now what I did then, but the reason that it is easy now is because I did it when it was hard.

Nobody was doing anything. I found speedily that the interstate commerce law by being made perfect could be made a most useful instrument for helping solve some of our industrial problems. So with the antitrust law. I speedily found out that almost the only positive good achieved by such a successful lawsuit as the Northern Securities suit, for instance, was in establishing the principle that the government was supreme over the big corporation, but by itself that the law did not accomplish any of the things that we ought to have accomplished; and so I began to fight for the amendment of the law along the lines of the interstate commerce law, and now we propose, we Progressives, to establish and interstate commission having the same power over industrial concerns that the Interstate Commerce Commission has over railroads, so that whenever there is in the future a decision rendered in such important matters as the recent suits against the Standard Oil, the Sugar - no, not that - Tobacco - Tobacco Trust - we will have a commission which will see that the decree of the court is really made effective; that it is not made a merely nominal decree.

Our opponents have said that we intend to legalize monopoly. Nonsense. They have legalized monopoly. At this moment the Standard Oil and Tobacco Trust monopolies are legalized; they are being carried on under the decree of the Supreme Court. Our proposal is really to break up monopoly. Our proposal is to lay down certain requirements, and then to require the commerce commission - the industrial commission - to see that the trusts live up to those requirements. Our opponents have spoken as if we were going to let the commission declare what those requirements should be. Not at all. We are going to put the requirements in the law and then see that the commission requires them to obey that law.

And now, friends, as Mr. Wilson has invited the comparison, I only want to say this: Mr. Wilson has said that the States are the proper authorities to deal with the trusts. Well, about eighty percent of the trusts are organized in New Jersey. The Standard Oil, the Tobacco, the Sugar, the Beef, all those trusts are organized in the state of New Jersey and the laws of New Jersey say that their charters can at any time be amended or repealed if they misbehave themselves and give the government ample power to act about those laws, and Mr. Wilson has been governor a year and nine months and he has not opened his lips. The chapter describing what Mr. Wilson has done about trusts in New Jersey would read precisely like a chapter describing snakes in Ireland, which ran: "There are no snakes in Ireland." Mr. Wilson has done precisely and exactly nothing about the trusts.

I tell you, and I told you at the beginning, I do not say anything on the stump that I do not believe. I do not say anything I do not know. Let any of Mr. Wilson's friends on Tuesday point out one thing or let Mr. Wilson point out one thing that he has done about the trusts as governor of New Jersey.

And now, friends, there is one thing I want to say especially to you people here in Wisconsin. All that I have said so far is what I would say in any part of the Union. I have a peculiar right to ask that in this great contest you men and women of Wisconsin shall stand with us. You have taken the lead in progressive movements here in Wisconsin. You have taught the rest of us to look to you for inspiration and leadership. Now, friends, you have made that movement here locally. You will being doing a dreadful injustice to yourselves; you will be doing a dreadful injustice to the rest of us throughout the Union, if you fail to stand with us now that we are making this national movement. What I am about to say now I want yo to understand. If I speak of Mr. Wilson I speak with no mind of bitterness. I merely want to discuss the difference of policy between the Progressive and the Democratic party and to ask you to think for yourselves which party you will follow. I will say that, friends, because the Republican party is beaten. Nobody needs to have any idea that anything can be done with the Republican party.

When the Republican party - not the Republican party - when the bosses in control of the Republican party, the Barneses and Penroses, last June stole the nomination and wrecked the Republican party for good and all - I want to point out to you that nominally they stole that nomination from me, but it was really from you. They did not like me, and the longer they live the less cause they will have to like me. But while they don't like me, they dread you. You are the people that they dread. They dread the people themselves, and those bosses and the big special interests behind them made up their mind that they would rather see the Republican party wrecked than see it come under the control of the people themselves. So I am not dealing with the Republican party. There are only two ways you can vote this year. You can be progressive or reactionary. Whether you vote Republican or Democratic it does not make a difference, you are voting reactionary.

Now, the Democratic party in its platform and through the utterances of Mr. Wilson has distinctly committed itself to the old flintlock, muzzle-loaded doctrine of States' rights, and I have said distinctly we are for people's rights. We are for the rights of the people. If they can be obtained best through National Government, then we are for national rights. We are for people's rights however it is necessary to secure them.

Mr. Wilson has made a long essay against Senator Beveridge's bill to abolish child labor. It is the same kind of argument that would be made against our bill to prohibit women from working more than eight hours a day in industry. It is the same kind of argument that would have to be made; if it is true, it would apply equally against our proposal to insist that in continuous industries there shall be by law one day's rest in seven and three-shift eight-hour day. You have labor laws here in Wisconsin, and chamber of commerce will tell you that because of that fact there are industries that will not come to Wisconsin. They prefer to stay outside where they can work children of tender years, where they can work women fourteen and sixteen hours a day, where if it is a continuous industry, they can work men twelve hours a day and seven days a week.

Now, friends, I know that you of Wisconsin would never repeal those laws even if they are at your commercial hurt, just as I am trying to get New York to adopt such laws even though it will be to the New York's commercial hurt. But if possible I want to arrange it so that we can have justice without commercial hurt, and you can only get that if you have justice enforced nationally. You won't be burdened in Wisconsin with industries not coming to the State if the same good laws are extended all over the other States. Do you see what I mean? The States all compete in a common market; and it is not justice to the employers of a State that has enforced just and proper laws to have them exposed to the competition of another State where no such laws are enforced. Now, the Democratic platform, and their speakers declare we shall not have such laws. Mr. Wilson has distinctly declared that we shall not have a national law to prohibit the labor of children, to prohibit child labor. He has distinctly declared that we shall not have a law to establish a minimum wage for women.

I ask you to look at our declaration and hear and read our platform about social and industrial justice and then, friends, vote for the Progressive ticket without regard to me, without regard to my personality, for only by voting for that platform can you be true to the cause of progress throughout this Union.