Browning Hi-Power Magazine Capacity Reduction Block

Based on tweaking the measurements from the nut trap block trial, this block attaches to the inner floor plate of the magazine and reduces the magazine’s capacity to 10 rounds:

Browning Hi-Power Magazine Block - solid model - whole
Browning Hi-Power Magazine Block – solid model – whole

The horn fits between the follower’s pegs, so that chopping the pegs off won’t increase the magazine’s capacity. Chopping the horn off without modifying the follower won’t make any difference, either. As nearly as I can tell, chopping the pegs off the follower will destabilize it enough that it’ll roll over atop the spring, but I admit to not actually trying that.

The yellow comb supports the overhang that captures the tab around the magazine spring and there’s a tiny support spider inside the lower nut clearance that holds the ceiling in place:

Browning Hi-Power Magazine Block - solid model - section
Browning Hi-Power Magazine Block – solid model – section

The inner nut trap probably droops a bit without any support, but there’s no way to tell when it’s printed as one solid piece. That trap will hold the blob of steel-filled epoxy that secures the screw and helps prevent the block from turning, so it’s not really a nut trap and doesn’t require a precision fit. The vent tube from the top of the screw shaft gives the air and any excess epoxy an exit path.

Here’s a bottom view of two blocks, showing the support structures and the results:

Browning Hi-Power magazine - block support detail
Browning Hi-Power magazine – block support detail

I poked the tips of a snap ring pliers into the spider and twisted it out. The comb snaps off with fingernail pressure.

You could also print it without support by laying it flat, then glue the halves together with alignment pins. This is a bottom view:

Browning Hi-Power Magazine Block - solid model - split bottom
Browning Hi-Power Magazine Block – solid model – split bottom

The OpenSCAD program has a handful of configuration settings that determine which of those blocks it produces, which components appear, and how it’s oriented.

Installed in a Browning magazine, the block looks like this:

Browning Hi-Power magazine - block in place
Browning Hi-Power magazine – block in place

A detail of the bottom shows the notch capturing the spring tab:

Browning Hi-Power magazine - block detail
Browning Hi-Power magazine – block detail

I think the top surface would benefit from a small bevel to ease the spring around the block, but that’s in the nature of fine tuning.

Not having heard back from my legislators yet, I still don’t know whether this counts as a readily reversible modification. I have my doubts, what with it being plastic and all, but we shall see.

The OpenSCAD source code:

// Browning Hi-Power Magazine Block
// Ed Nisley KE4ZNU December 2013

Layout = "Whole";			// Show Whole Split
							//  Show = section view for demo, not for building
							//  Whole = upright for steel or plastic
							//  Split = laid flat for plastic show-n-tell assembly

AlignPins = (Layout == "Split");					// pins only for plastic show-n-tell

Support = (Layout != "Split");						// no support for split

//- Extrusion parameters must match reality!
//  Print with 2 shells and 3 solid layers

ThreadThick = 0.15;
ThreadWidth = 0.40;

HoleWindage = 0.2;

Protrusion = 0.1;			// make holes end cleanly

//----------------------
// Dimensions

Angle = 12.5;				// from vertical

SpringID = 10.3;			// magazine spring curvature (measure with drill shank)
SpringRadius = SpringID / 2;

Length = 24.0;				// front-to-back perpendicular to magazine shaft
Height = 18.0;				// bottom-to-top, parallel to magazine shaft
							//  18 = 10 round capacity

RectLength = Length - SpringID;	// block length between end radii

HornBaseOD = 8.0;			// fits between follower pegs to prevent shortening
HornTipOD = 5.0;
HornAddTip = (HornTipOD/2)*tan(Angle);
HornAddBase = (HornBaseOD/2)*tan(Angle);
HornAddLength = HornAddTip + HornAddBase + 2*Protrusion;
HornLength = 12.0;			// should recompute ODs, but *eh*

TrimHeight = 2.5;			// vertical clearance for spring clip on base plate
							//   OEM = 2.5
							//   generic A = 2.5

TrimInset = 1.5;			// ... horizontal
							//	 OEM = 0.0
							//   generic A = 1.5

ScrewOD = 3.0 - 0.25;		// screw hole dia - minimal thread engagement
ScrewLength = 11.0;
ScrewOffset = -1.5;			//   ... from centerline
							//  OEM = 0.0
							//  generic A = -1.5

NutOD = 5.6;				// hex nut dia across flats
NutThick = 2.4;				//  ... then add 50% to trap for thread engagement & epoxy
NutOffset = 6.0;			//  ... base height from floor

VentDia = 2.0;				// air vent from back of screw recess

PinOD = 1.72;				// alignment pins
PinLength = 6.0;
PinInset = 0.6*SpringRadius;	// from outside edges
echo(str("Alignment pin length: ",PinLength));

NumSides = 8*4;				// default cylinder sides

Offset = 5.0/2;				// from centerline for build layout

//----------------------
// Useful routines

function Delta(a,l) = l*tan(a);				// incremental length due to angle

// Locating pin hole with glue recess
//  Default length is two pin diameters on each side of the split

module LocatingPin(Dia=PinOD,Len=0.0) {

	PinLen = (Len != 0.0) ? Len : (4*Dia);

	translate([0,0,-ThreadThick])
		PolyCyl((Dia + 2*ThreadWidth),2*ThreadThick,4);

	translate([0,0,-2*ThreadThick])
		PolyCyl((Dia + 1*ThreadWidth),4*ThreadThick,4);

	translate([0,0,-(Len/2 + ThreadThick)])
		PolyCyl(Dia,(Len + 2*ThreadThick),4);

}

module PolyCyl(Dia,Height,ForceSides=0) {			// based on nophead's polyholes

  Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);

  FixDia = Dia / cos(180/Sides);

  cylinder(r=(FixDia + HoleWindage)/2,
           h=Height,
	   $fn=Sides);
}

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  Range = floor(50 / Space);

	for (x=[-Range:Range])
	  for (y=[-Range:Range])
		translate([x*Space,y*Space,Size/2])
		  %cube(Size,center=true);

}

//----------------------
// The magazine block

module Block(SectionSelect = 0) {

CropHeight = Height*cos(Angle);				// block height perpendicular to base
echo(str("Perpendicular height: ",CropHeight));

	difference() {
		union() {
			intersection() {
				rotate([Angle,0,0])
					hull() {
						for (i=[-1,1])
							translate([0,i*RectLength/2,-((Length/2)*sin(Angle) + Protrusion)])						cylinder(r=SpringRadius,
										h=(Height + 2*(Length/2)*sin(Angle) + 2*Protrusion),
										$fn=NumSides);
					}
				translate([0,0,CropHeight/2])
					cube([2*SpringID,3*Length,CropHeight],center=true);
			}
			translate([0,-Height*sin(Angle),Height*cos(Angle)])
				resize([SpringID,0,0])
					intersection() {
						rotate([Angle,0,0])
							translate([0,0,-(HornAddBase + Protrusion)])
								cylinder(r1=HornBaseOD/2,
										r2=HornTipOD/2,
										h=(HornLength + HornAddLength + Protrusion),
										$fn=NumSides);
					cube([2*SpringID,Length,2*(HornLength*cos(Angle) + Protrusion)],center=true);
				}
		}

		translate([0,ScrewOffset,-Protrusion])		// screw
			rotate(180/6)
				PolyCyl(ScrewOD,(ScrewLength + Protrusion),6);

		translate([0,ScrewOffset,NutOffset])		// nut trap in center
			rotate(180/6)
				PolyCyl(NutOD,1.5*NutThick,6);

		translate([0,ScrewOffset,-Protrusion])		// nut clearance at base
			rotate(180/6)
				PolyCyl(NutOD,(1.1*NutThick + Protrusion),6);

		translate([SpringID/2,-((Length/2)/cos(Angle) - TrimInset),-Protrusion])
			rotate(180)
				cube([SpringID,2*TrimInset,(TrimHeight + Protrusion)],center=false);

		if (AlignPins)								// alignment pins
			for (i=[-1,1])
				rotate([Angle,0,0])
				translate([0,
							(i*((Length/2)*cos(Angle) - PinInset)),
							(CropHeight/2 - i*2*PinInset)])
					rotate([0,90,0]) rotate(45 - Angle)
						LocatingPin(PinOD,PinLength);

		translate([0,(ScrewOffset - NutOD),-Protrusion])	// air vent
			rotate(180/8)
				PolyCyl(VentDia,(ScrewLength + Protrusion),8);
		translate([0,(ScrewOffset + VentDia/2),ScrewLength])
			rotate([90,0,0]) rotate(180/8)
				PolyCyl(VentDia,(NutOD + VentDia),8);

		if (SectionSelect == 1)
			translate([0*SpringID,-2*Length,-Protrusion])
				cube([2*SpringID,4*Length,(Height + HornLength + 2*Protrusion)],center=false);
		else if (SectionSelect == -1)
			translate([-2*SpringID,-2*Length,-Protrusion])
				cube([2*SpringID,4*Length,(Height + HornLength + 2*Protrusion)],center=false);

	}

	NumBars = floor((SpringID/2)/(5*ThreadWidth));

	if (Support) {									// add support structures
		for (i = [-NumBars:NumBars])
			translate([i*5*ThreadWidth,
					   -((Length/2)/cos(Angle) + TrimInset/2 + ThreadWidth),
					   (TrimHeight - ThreadThick)/2])
				color("Yellow")
				cube([(2*ThreadWidth),(3*TrimInset),(TrimHeight - ThreadThick)],center=true);

		translate([-SpringID/2,-((Length/2)/cos(Angle) + 2*TrimInset + ThreadWidth),0])
			color("Yellow")
			cube([SpringID,(2*ThreadWidth),(TrimHeight - ThreadThick)],center=false);

		translate([0,ScrewOffset,0])
			for (j=[0:5]) {
			rotate(30 + 360*j/6)
				translate([(NutOD/2 - ThreadWidth)/2,0,(1.1*NutThick - ThreadThick)/2])
					color("Yellow")
					cube([(NutOD/2 - ThreadWidth),
						  (2*ThreadWidth),
						  (1.1*NutThick - ThreadThick)],
						  center=true);
        }
	}

}

//-------------------
// Build it...

ShowPegGrid();

if (Layout == "Show")
	Block(1);

if (Layout == "Whole")
	Block(0);

if (Layout ==  "Split") {
	translate([(Offset + Length/2),Height/2,0])
		rotate(90) rotate([0,-90,-Angle])
			Block(-1);
	translate([-(Offset + Length/2),Height/2,0])
		rotate(-90) rotate([0,90,Angle])
			Block(1);
}

Browning Hi-Power Magazine: Nut Trap Block Trial

The general idea is to reduce the capacity of a 13 round Browning Hi-Power magazine to 10 rounds, in compliance with the NY Safe Act, using a number of possibly invalid assumptions. The new Firearms tag will produce earlier posts.

This early prototype tried out the sizes, shapes, and angles, using an M3x0.5 socket head cap screw:

Browning Hi-Power Magazine Block - solid model - nut trap prototype
Browning Hi-Power Magazine Block – solid model – nut trap prototype

The bottom nut trap locates the block on the inner floor plate by capturing the nut. It might need a bit more clearance or a chamfer to allow for brazing material around the nut flats; cleaning up the brazed nut with a file might also help.

The central trap holds a nut that anchors the block; the trap must be about 50% longer than the nut to allow for thread alignment, because the central hole is a loose tap fit.

That central nut probably isn’t needed, because you’d fill the central shaft with metal-loaded epoxy, which would form a perfectly serviceable, exactly form-fitting, and utterly non-removable “nut”. The vent from the end of the screw shaft releases air trapped behind the epoxy by the screw; if you don’t have a vent, then air pressure will force the epoxy out of the cavity.

If the epoxy “nut” is workable, then you can build it in a single piece printed vertically on the platform. Having a split version makes it easier to show off and, in truth, the cemented joint is about as strong as the rest of the object.

Hot off the M2 3D printer, it looks like this:

BHP magazine block - prototype nut trap - bare
BHP magazine block – prototype nut trap – bare

A few threads droop into the air vent, so that channel should be larger. The overall plastic block may be porous enough to release the air pressure even without a vent.

With locating pins glued in place and a nut in the central trap:

BHP magazine block - prototype nut trap
BHP magazine block – prototype nut trap

Pretty much as I expected, it doesn’t quite fit in the magazine, because it doesn’t have clearance for the little tab on the inner floor plate that captures the spring.

One might argue that a plastic block isn’t “permanent”, but it’s definitely not “readily” removed:

  • PLA doesn’t dissolve in common solvents
  • It doesn’t actually melt and flow away at high temperatures
  • It’s protected by the spring and inner floor plate
  • It’s certainly strong enough to resist simple mechanical attacks

This is a start…

The OpenSCAD source code, replete with inadequacies:

// Browning Hi-Power Magazine Plug
// Ed Nisley KE4ZNU November 2013

Layout = "Show";			// Show Whole Pin Build

CrossSection = 1;			// -1, 0, 1 to select section side or none

Section = (Layout == "Build") ? 1 : CrossSection;		// for cross-section for build

//- Extrusion parameters must match reality!
//  Print with 2 shells and 3 solid layers

ThreadThick = 0.25;
ThreadWidth = 0.40;

HoleWindage = 0.2;

Protrusion = 0.1;			// make holes end cleanly

//----------------------
// Dimensions

Angle = 12.5;				// from vertical

EndDia = 10.3;				// an 11/32 inch drill fits
EndRadius = EndDia / 2;

Length = 24.0;				// front-to-back perpendicular to magazine shaft
Height = 14.0;				// bottom-to-top, parallel to magazine shaft
							//  14 = 10 round capacity
							//  28 = 7 round

RectLength = Length - EndDia;	// block length between end radii

ScrewOD = 3.0 - 0.5;		// bottom screw tapping diameter
ScrewLength = 11.0;
ScrewOffset = 0;			//   ... from centerline

NutOD = 5.5;				// hex nut dia across flats
NutThick = 2.4;				//  ... then add 50% for thread engagement & epoxy
NutOffset = 6.0;			//  ... base height from floor

VentWidth = 2*ThreadWidth;	// air vent from back of screw recess
VentDepth = 4*ThreadThick;

NumSides = 8*4;				// default cylinder sides

PinOD = 1.72;				// alignment pins
PinLength = 6.0;
PinInset = 0.9*EndRadius;	// from outside edges
echo(str("Alignment pin length: ",PinLength));

Offset = 5.0/2;				// from centerline for build layout

//----------------------
// Useful routines

// Locating pin hole with glue recess
//  Default length is two pin diameters on each side of the split

module LocatingPin(Dia=PinOD,Len=0.0) {

	PinLen = (Len != 0.0) ? Len : (4*Dia);

	translate([0,0,-ThreadThick])
		PolyCyl((Dia + 2*ThreadWidth),2*ThreadThick,4);

	translate([0,0,-2*ThreadThick])
		PolyCyl((Dia + 1*ThreadWidth),4*ThreadThick,4);

	translate([0,0,-(Len/2 + ThreadThick)])
		PolyCyl(Dia,(Len + 2*ThreadThick),4);

}

module PolyCyl(Dia,Height,ForceSides=0) {			// based on nophead's polyholes

  Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);

  FixDia = Dia / cos(180/Sides);

  cylinder(r=(FixDia + HoleWindage)/2,
           h=Height,
	   $fn=Sides);
}

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  Range = floor(50 / Space);

	for (x=[-Range:Range])
	  for (y=[-Range:Range])
		translate([x*Space,y*Space,Size/2])
		  %cube(Size,center=true);

}

//----------------------
// Components

module Block(SectionSelect = 0) {

Delta = tan(Angle)*(Length/2);				// incremental length due to angle

CropHeight = Height*cos(Angle);				// block height perpendicular to base

echo(str("Perpendicular height: ",CropHeight));

	difference() {
		intersection() {
			rotate([Angle,0,0])
				difference() {
					translate([0,0,-Height/2])
						linear_extrude(height=2*Height,convexity=2) {
							for (i=[-1,1])
								translate([0,(i*RectLength/2),0])
									rotate(180/NumSides)
										circle(r=EndRadius/cos(180/NumSides),
												$fn=NumSides);
							square([EndDia,RectLength],center=true);
						}
					for (i=[-1,1])
						translate([0,
									(i*(Length/2 - PinInset)),
									(CropHeight/2 + i*(CropHeight/2 - PinInset))])
							rotate([0,90,0]) rotate(45-Angle)
								LocatingPin(PinOD,PinLength);
				}
			translate([0,0,CropHeight/2])
				cube([2*EndDia,3*Length,CropHeight],center=true);
		}
		translate([0,ScrewOffset,-Protrusion])		// screw
			rotate(180/6)
				PolyCyl(ScrewOD,(ScrewLength + Protrusion),6);

		translate([0,ScrewOffset,NutOffset])		// nut trap in center
			rotate(180/6)
				PolyCyl(NutOD,1.5*NutThick,6);

		translate([0,ScrewOffset,-Protrusion])		// nut clearance at base
			rotate(180/6)
				PolyCyl(NutOD,(1.1*NutThick + Protrusion),6);

		translate([0,-(ScrewOffset + NutOD),(ScrewLength - Protrusion)/2])	// air vent
			cube([VentDepth/2,VentWidth,(ScrewLength + Protrusion)],center=true);
		translate([0,(ScrewOffset - NutOD/2),(ScrewLength - VentWidth/2)])
			cube([VentDepth/2,NutOD,VentWidth],center=true);

		if (SectionSelect == 1)
			translate([EndDia,0,Height/2-Protrusion])
				cube([2*EndDia,3*Length,Height+2*Protrusion],center=true);
		else if (SectionSelect == -1)
			translate([-EndDia,0,Height/2-Protrusion])
				cube([2*EndDia,3*Length,Height+2*Protrusion],center=true);
	}

}

//-------------------
// Build it...

ShowPegGrid();

if (Layout == "Pin")
	LocatingPin(PinOD,PinLength);

if (Layout == "Show")
	Block(CrossSection);

if (Layout == "Whole")
	Block(0);

if (Layout ==  "Build") {
	translate([(Offset + Length/2),Height/2,0])
		rotate(90) rotate([0,-90,-Angle])
			Block(-1);
	translate([-(Offset + Length/2),Height/2,0])
		rotate(-90) rotate([0,90,Angle])
			Block(1);
}

Browning Hi-Power Magazine: Floor Plate Modification

The Browning Hi-Power magazine has two floor plates:

  • the interior plate captures the spring and locates it properly inside the magazine case
  • the exterior plate provides reaction force against the spring and locates the interior plate’s boss
Browning Hi-Power magazine - base plates
Browning Hi-Power magazine – base plates

The interior plate has two critical features:

  • the ramp on the front (to the right) that guides it over the edge of the exterior plate
  • the boss that latches the exterior plate in place

If you remove the interior plate, you must somehow hold the spring in place while sliding the exterior plate in place, after which the spring is free to thrash around inside the magazine under recoil forces.

An important point: you can buy exterior floor plates from all the usual sources, but, as nearly as I can tell, nobody sells replacement interior floor plates and they’re not included in kits of replacement springs. If you don’t have an interior floor plate, you must fabricate one from scratch before you can use the magazine.

So one thought is to drill a hole in the middle of the boss:

Browning Hi-Power magazine - drilled floor plate
Browning Hi-Power magazine – drilled floor plate

OK, that’s not quite centered, but it’ll suffice.

Wire-brush the coating around the inside of the boss to prepare it for brazing, then braze a nut onto the inside of the floor plate (which I haven’t done yet), and run a socket-head setscrew through it:

Browning Hi-Power magazine - drilled floor plate
Browning Hi-Power magazine – drilled floor plate

If that threaded into a block loaded with steel-filled epoxy, it’d never come back out again. You could machine the head down to a flat disk that would fit through the existing hole in the exterior floor plate and not provide any gripping surface:

BHP floor plate screw - disk head
BHP floor plate screw – disk head

To be absolutely certain, you could file the entire socket head off flush with the boss, leaving no way to grip the screw.

If the block surrounds the nut on the floor plate with a generous helping of steel-filled epoxy, then there’s no way to twist the block off the plate.

If the block also captures the spring, then you can’t heat the plate enough to un-braze the nut without also de-tempering and wrecking the spring.

I can think of a few other ways to attack it, but none seem like a project that would readily convert the magazine into one holding a few more rounds. Opinions may differ, of course, but …

Browning Hi-Power Magazine: Trigonometry

The Browning Hi-Power magazine case has a 12.5° forward angle with respect to the floor plates:

Browning Hi-Power magazine - components
Browning Hi-Power magazine – components

The natural axes lie parallel and perpendicular to the case axis, which means dimensions parallel and perpendicular to the floor plates (horizontal & vertical, respectively) require a bit of trigonometry. This doodle sketches some of the key values, not all of which are hereby asserted to be correct:

Magazine angle doodles
Magazine angle doodles

Name the variables:

  • Slant angle α
  • Height H along magazine axis
  • Length L perpendicular to H

Components of H:

  • vertical = H cos α
  • horizontal = H sin α

Components of L:

  • vertical = L sin α
  • horizontal = L cos α

Extreme point of the tilt at the edge, relative to center point on axis:

  • vertical = (L/2) sin α
  • horizontal= (L/2) cos α

Projection of top parallel to axis onto horizontal:

  • L / cos α

I suppose one could set up functions for all that, but I tend to just hammer out the trig where it’s needed.

Browning Hi-Power Magazine Dimensions

This is a standard 13 round magazine from a Browning Hi-Power 9 mm pistol:

Browning Hi-Power magazine - assembled
Browning Hi-Power magazine – assembled

Disassembled to show its five components:

Browning Hi-Power magazine - components
Browning Hi-Power magazine – components

The follower has 15.3 mm long pegs that taper from 8.75 mm to 7 mm, on 14.5 mm centers. The spring compresses down to a little longer than that with 13 rounds atop the follower:

Browning Hi-Power magazine - follower
Browning Hi-Power magazine – follower

The top of the follower has a rather complex shape (yes, that’s a crunch toward the front of the ridge):

Browning Hi-Power magazine - follower top
Browning Hi-Power magazine – follower top

The front view shows more curves:

Browning Hi-Power magazine - follower front
Browning Hi-Power magazine – follower front

Judging from the online pictures, BHP followers have taken on a wide variety of shapes over the decades, so I’d expect almost anything would work more-or-less well.

The inner floor plate attaches to the spring and has a 5 mm dia x 1 mm tall boss that matches the hole in the outer floor plate:

Browning Hi-Power magazine - base plates
Browning Hi-Power magazine – base plates

The hole in the outer floor plate is a scant 5.4 mm, just slightly under the head size of a 3.0×0.5 mm socket head cap screw. The OEM Browning magazines have a centered boss, but some aftermarket magazines move it a millimeter or so to the front or rear. The outer plate seems hard enough to be just about spring steel.

A tab on the front of the inner floor plate (to the left in this picture captures the spring:

Browning Hi-Power magazine - spring inside base plate
Browning Hi-Power magazine – spring inside base plate

The inner plate is 0.75 mm mild steel and may be removable, depending on how tightly the tab got crunched during manufacturing. The tab extends a millimeter or so beyond the spring on the inside of the curve and is about 2 mm tall at that point.

The boss on the inner plate and the hole on the outer plate locate the spring at the proper position and also ensure the outer plate doesn’t accidentally slide off; you must push the boss inward to release the outer plate before sliding it forward. Using a rounded rod lets you push the inner plate far enough inward to release the spring pressure on the outer plate, making it much easier to slide; in fact, for my fingers, I can’t move the outer plate without inserting a rod in the hole.

The case is a seamless 0.7 mm thick high-carbon-steel tube with complex curves:

Browning Hi-Power magazine - case on grid paper
Browning Hi-Power magazine – case on grid paper

The “high carbon” part means that it’s not in the least bendy; a few operations on large presses mashed it into that shape and it’s not going to take on anything else by accident. The feed lips on the top can get bent if you abuse the thing, but that’s about it.

The case is 20.5 x 31.7 mm from the base to the latch hole, 99 mm long in front and 109 mm long in the back. The latch hole is 4.2 x 7.3 mm with a 2.7 mm notch in the front side, 67.2 mm from the base and 27.7 mm from the top. The angle of the case axis with respect to the bottom (on the right) is 12.5°.

Inside measurements at the base: 30.5 x 18.7 mm. The rear corners are essentially right angles and the front curves fit 1/4 inch = 6.3 mm or 9/32 inch = 7.1 mm drills.

The lower flutes are 26 x  6.5 mm, centered on the side (even though it doesn’t look that way), and compress the outside of the case to 16.2 mm and the inside to 14.7 mm. The tabs engaging the outer floor plate are 23 mm edge-to-edge, 10.5 mm and 6.0 mm long, and protrude 1.5 mm from the outside of the case:

Browning Hi-Power magazine - bottom
Browning Hi-Power magazine – bottom

The top of the case is 10.5 mm wide at the rear of the feed lips, with the sharp bend 17.0 mm from the outside of the rear face:

Browning Hi-Power magazine - top
Browning Hi-Power magazine – top

The spring is 1.25 mm = 49 mil wire, 143 mm flat-to-flat high, about 15.1 mm turn-to-turn, 13/32 inch = 10.3 mm ID at the ends, 13.2 mm outside width, 25 mm inside length, and 27 mm outside length. Those don’t quite add up, but the whole thing is, well, springy.

The spring exerts these crudely measured forces:

  • 1 round = 1.1 kg
  • 10 rounds = 2.5 kg

The follower moves 5.3 mm, so the spring constant is very roughly 0.26 kg/mm = 14.8 pound/inch. Aftermarket springs tout their stiffness and come in 5% increments of additional force, so that’s probably not a critical number.

Limiting the capacity of a magazine so that it cannot be “readily” converted back to a higher capacity seems difficult, particularly if you allow disassembling the magazine for proper cleaning and maintenance. If operator safety and proper function isn’t a concern, then many things become possible.

Solubility of PLA in Common Gun Bore Cleaners

According to Wikipedia, Polylactic acid, a.k.a. PLA “is soluble in chlorinated solvents, hot benzene, tetrahydrofuran, and dioxane” and is not soluble in acetone, alcohol, or water.

Just to see what happens, I dunked a pair of those 3D printed dummy bullets in Shooter’s Choice Gun Solvent (which has since gone obsolete) and Hoppe’s No. 9 Gun Bore Cleaner (which seems to have been reformulated several times), then let them air-dry in those background puddles:

PLA dummy bullets after solvent bath
PLA dummy bullets after solvent bath

Nothing much happened: they’re not soft or gummy, haven’t slumped, and seem undaunted.

That’s in contrast to ABS plastic, which is readily soluble in acetone and the aromatic hydrocarbons commonly found in solvents used around firearms. Apart from that, ABS would be a slightly better choice on mechanical grounds. I’m not sure the difference really matters for most purposes, given the very wide tolerances on 3D printed objects.

NY SAFE Act Magazine Capacity: Assumptions

I AM NOT A LAWYER.

To review, PL 265.00 Section 23 as amended defines a large capacity magazine (a.k.a. “ammunition feeding device”):

23. “Large capacity ammunition feeding device” means a magazine, belt, drum, feed strip, or similar device, that
(a) has a capacity of, or that can be readily restored or converted to accept, more than ten rounds of ammunition, or

PL 265.36, defines unlawful possession:

§ 265.36 Unlawful possession of a large capacity ammunition feeding device.

It shall be unlawful for a person to knowingly possess a large capacity ammunition feeding device manufactured before September thirteenth, nineteen hundred ninety-four, and if such person lawfully possessed such large capacity feeding device before the effective date of the chapter of the laws of two thousand thirteen which added this section, that has a capacity of, or that can be readily restored or converted to accept, more than ten rounds of ammunition.

Despite the period at the end, that’s not actually a complete sentence.

Taken together, both sections assert that a magazine with “a capacity of, or that can be readily restored or converted to accept, more than ten rounds of ammunition” is (or will be, as of one year from the effective date of the legislation:15 January 2014) illegal.

The wording implies that an existing, formerly legal “large capacity” magazine can be brought into compliance by a modification that limits its capacity to ten rounds, with the caveat that actually inserting more than seven rounds may be illegal, depending on the situation and the effect of various amendments to PL 265.00, as discussed previously.

The legislation requires such a modified magazine must not be “readily restored or converted” to hold more than ten rounds. I cannot find the legislative definition of “readily”, despite some diligent searching. As mentioned earlier, the NY State Police guidelines use the word “permanently”, a much stronger word than “readily”, seemingly without basis in the law.

Merriam-Webster defines it thusly (slightly reformatted):


read·i·ly
adverb \ˈre-də-lē\
: quickly and easily
: in a way that shows you are willing to do something
: without hesitation or complaint
Full Definition of READILY
: in a ready manner: as
a : without hesitating : willingly <readily accepted advice>
b : without much difficulty : easily <for reasons that anyone could readily understand>

The full definition suggests that, in order to be “readily restored or converted”, the process must be both temporally short (“without hesitating”) and easy to accomplish (“without much difficulty”).

I realize that the legislature sometimes uses words in a special way, but it’s been two weeks since I asked my legislators for clarification and haven’t heard anything substantive, so I’m doing the best I can with what I have.

It also seems reasonable to assume “readily” includes the notion of something an ordinary person could do, without special tools. An experienced machinist in a well-equipped shop can readily accomplish tasks that seem impossible, right up through building a complete magazine (or, heck, a firearm) from scratch; permanently has no real meaning.

On that scale, I’m much closer to an ordinary person than an experienced machinist, but perhaps I can come up with a magazine modification that isn’t readily un-do-able.

I also assume any magazine modification should meet some practical requirements, even though they’re not spelled out in the legislation:

  • Safety – no change to OEM material specifications, properties, or designs
  • Function – no change to OEM specified operation or maintenance
  • Reliability – no change to critical dimensions or mechanical features

In short, the smaller and fewer the changes required to reduce the magazine capacity, the better.