**With the `AddObjectHelper` class** [![enter image description here][1]][1] Further to @brockmann's answer The `AddObjectHelper` class sets up some of the usual suspects for us, including location, rotation and align. class OBJECT_OT_add_object(Operator, AddObjectHelper): """Create a new Mesh Object""" bl_idname = "cylinder.add_object" bl_label = "Add Mesh Object" bl_options = {'REGISTER', 'UNDO'} # set other args like name and description for all vertices : IntProperty( name="Vertices", description="Number of Vertices", min=0, default=32) radius : IntProperty(default=2) depth : FloatProperty(default=2) def execute(self, context): bpy.ops.mesh.primitive_cylinder_add( vertices=self.vertices, radius=self.radius, depth=self.depth, location=self.location, rotation=self.rotation) return {'FINISHED'} One issue tho is that its draw method puts its stuff first, so may need to add your own draw method to re-sort as desired def draw(self, context): layout = self.layout layout.prop(self, "vertices") layout.prop(self, "radius") # and so on [1]: https://i.sstatic.net/rI35i.png