diff --git a/bob/bpm/bpm_embed.bob b/bob/bpm/bpm_embed.bob
new file mode 100644
index 0000000..a9bbaed
--- /dev/null
+++ b/bob/bpm/bpm_embed.bob
@@ -0,0 +1,221 @@
+
+
+
+ bpm_embed
+ 280
+ 160
+
+
+
+
+
+
+
+
+
+ $(label)
+ 280
+ 160
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Label
+ I
+ 10
+ 20
+ 1
+ 1
+
+
+ Label_1
+ X
+ 40
+ 20
+ 1
+ 1
+
+
+ Label_2
+ Y
+ 70
+ 20
+ 1
+ 1
+
+
+ Readback PV_2
+ $(bpm):YPOS
+ 30
+ 70
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Readback PV_1
+ $(bpm):XPOS
+ 30
+ 40
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Readback PV
+ $(bpm):INTEN
+ 30
+ 10
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Open PVI
+
+
+ Open Display
+ bpm_setup.bob
+
+ $(bpm)
+
+ tab
+
+
+ More
+ 20
+ 100
+ 80
+ 20
+
+
+
+
+
+
+
+
+
+
+
+
+ $(actions)
+
+
+ X/Y Plot
+ 110
+ 130
+ 120
+
+
+
+
+ false
+
+
+ false
+ false
+ -3.0
+ 3.0
+ false
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+ false
+ false
+ -3.0
+ 3.0
+ false
+
+
+
+
+
+
+
+
+ false
+ true
+
+
+
+
+
+
+
+
+
+ $(bpm):XPOS
+ $(bpm):YPOS
+
+ 0
+ 0
+
+
+
+
+ 1
+ 0
+ 2
+ 8
+ true
+
+
+
+
+
diff --git a/bob/bpm/bpm_setup.bob b/bob/bpm/bpm_setup.bob
new file mode 100644
index 0000000..d93e09f
--- /dev/null
+++ b/bob/bpm/bpm_setup.bob
@@ -0,0 +1,561 @@
+
+
+
+ bpm_setup
+ 510
+ 265
+
+
+
+
+
+
+
+
+ 5
+ 5
+
+ Inputs
+ 260
+ 135
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Readback PV
+ $(bpm):BPMI1
+ 140
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Readback PV_1
+ $(bpm):BPMI2
+ 140
+ 25
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Readback PV_2
+ $(bpm):BPMI3
+ 140
+ 50
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Readback PV_3
+ $(bpm):BPMI4
+ 140
+ 75
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Label
+ A
+ 120
+ 20
+ 1
+ 1
+
+
+ Label_1
+ B
+ 120
+ 25
+ 20
+ 1
+ 1
+
+
+ Label_2
+ C
+ 120
+ 50
+ 20
+ 1
+ 1
+
+
+ Label_3
+ D
+ 120
+ 75
+ 20
+ 1
+ 1
+
+
+ Group
+ 10
+ 115
+ 80
+
+ true
+
+ Ellipse
+ 50
+ 65
+ 65
+ 2
+
+
+
+
+
+
+
+
+
+
+ Polyline
+ 50
+ 33
+ 63
+ 1
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ Polyline_1
+ 82
+ 1
+ 63
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ Label_4
+ X+
+ 30
+ 20
+ 20
+ 1
+ 1
+
+
+ Label_5
+ A
+ 65
+ 15
+ 20
+ 1
+ 1
+
+
+ Label_6
+ B
+ 80
+ 15
+ 20
+ 1
+ 1
+
+
+ Label_7
+ C
+ 80
+ 30
+ 20
+ 1
+ 1
+
+
+ Label_8
+ D
+ 65
+ 30
+ 20
+ 1
+ 1
+
+
+ Polygon
+ 35
+ 45
+ 35
+ 35
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ Label_9
+ Beam
+ 50
+ 40
+ 1
+ 1
+
+
+
+
+ Parameters
+ 250
+ 260
+ 135
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Label_10
+ A
+ 20
+ 1
+ 1
+
+
+ Label_11
+ B
+ 25
+ 20
+ 1
+ 1
+
+
+ Label_12
+ C
+ 50
+ 20
+ 1
+ 1
+
+
+ Label_13
+ D
+ 75
+ 20
+ 1
+ 1
+
+
+ Text Entry
+ $(bpm):DA
+ 20
+ 80
+
+
+ Text Entry_1
+ $(bpm):DA
+ 20
+ 25
+ 80
+
+
+ Text Entry_2
+ $(bpm):DA
+ 20
+ 50
+ 80
+
+
+ Text Entry_3
+ $(bpm):DA
+ 20
+ 75
+ 80
+
+
+ Label_20
+ KX
+ 110
+ 25
+ 1
+ 1
+
+
+ Text Entry_4
+ $(bpm):KX
+ 135
+ 80
+
+
+ Label_21
+ KY
+ 110
+ 25
+ 25
+ 1
+ 1
+
+
+ Text Entry_5
+ $(bpm):KY
+ 135
+ 25
+ 80
+
+
+ Label_22
+ Update rate:
+ 110
+ 50
+ 105
+ 1
+ 1
+
+
+ Combo Box
+ $(bpm):POSSCAN.SCAN
+ 115
+ 75
+ 20
+
+
+
+ Calculations
+ 130
+ 420
+ 135
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Label_23
+ I = (A-DA)+(B-DB)+(C-DC)+(D-DD) =
+ 290
+ 1
+ 1
+
+
+ Label_24
+ X = KX*((D-DD)-(B-DB))/((D-DD)+(B-DB)) =
+ 25
+ 290
+ 1
+ 1
+
+
+
+ X = KX*((A-DA)-(B-DB)-(C-DC)+(D-DD))/I =
+
+ $(bpm):ORIENT
+
+
+
+
+ Label_25
+ Y = KY*((A-DA)-(C-DC))/((A-DA)+(C-DC)) =
+ 50
+ 290
+ 1
+ 1
+
+
+
+ Y = KY*((A-DA)+(B-DB)-(C-DC)-(D-DD))/I =
+
+ $(bpm):ORIENT
+
+
+
+
+ Label_26
+ Q = ((A-DA)-(B-DB)+(C-DC)-(D-DD))/I =
+ 75
+ 290
+ 1
+ 1
+
+
+ Readback PV_8
+ $(bpm):INTEN
+ 300
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Readback PV_9
+ $(bpm):XPOS
+ 300
+ 25
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Readback PV_10
+ $(bpm):YPOS
+ 300
+ 50
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Readback PV_11
+ $(bpm):Q
+ 300
+ 75
+ 80
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+