Z-PLUS LZT Live Z-Score Training Software Revised with Z-Bars and Z-Maps Display

Multivariate Proportional Neurofeedback, Percent Z-OK, and the future of Live Z-Score Training
This report was revised 11-6-2010, and a power-point presentation has been added as an attachment.
Over the past 5 years, BrainMaster has led the industry in developing and innovating software to use normative or reference databases to provide Live Z-Score Training (LZT) methods for neurofeedback.  Documented by a series of publications and clinical reports, BrainMaster’s systems have produced positive results for hundreds of clinicians. Based upon this experience, we are introducing the next generation of LZT training in the form of the “Z-Plus” software package. This package is optional, and extends the existing LZT training software with new, innovative metrics and displays. These further empower the clinician and the client to identify and train relevant EEG parameters and their changes. Z-Plus is available for Atlantis or Discovery, and is built into the BrainMaster series of software.
NOTE: See the end of this article for info. on how to use the .bmzd file attached.
The Discovery 1.5.2 release with ZPlus enabled is available at:  http://www.brainm.com/software/discovery
The Atlantis 3.7i release with ZPlue enabled is available at http://www.brainm.com/software/3.0
BrainMaster is unique in providing live LZT methods that provide Multivariate Proportional (MVP) variables for use in training. MVP variables are continuous, proportional values that are used in training in the same ways that conventional values such as absolute power, relative power, or raw coherence values, have been used in the past. The key to this innovation is that the new MVP variables provide complex yet intuitively simple measurements that are field-proven in producing client results that are rapid, concise, and lasting. With the introduction of the “Z-Plus” series of software, BrainMaster defines the next generation of LZT technology for training of 1, 2, or up to 19 channels.
Other approaches to using live z-scores typically produce only an “on/off” response, depending on whether one or more z-scores are within a range. Thus, the brain is provided with information that tells it whether or not it meets a condition, but does not provide any proportional or “how much” information to the trainee. This limits the brain’s ability to learn and respond to the important EEG parameters. Also, such methods do not lend themselves to tuning the training, beyond setting the target sizes. BrainMaster’s MVP methods produce new quantitative variables that are not simply “yes/no”, but provide real-time, proportional feedback that can be used for sounds, videos, games, or other feedback methods that respond to either “on/off,” “how much,” or a combination of such control variables. This provides a level of guidance that reduces the number and length of sessions necessary to see results. Currently, with PZOK, it is common to see visible EEG changes in 1 or 2 sessions, and to see results significantly faster and more specific than seen with conventional amplitude-based training.  Some publications are available online at:  http://www.brainmaster.com/kb/entry/362/ 
Starting with the “Percent Z OK” training method, BrainMaster has developed a family of training variables that intuitively incorporate any or all of the z-scores, and turn them into a single proportional variable. With these variables, any combination of channels, parameters (absolute power, relative power, power ratios, coherence, phase, asymmetry), or frequency components (e.g. delta, theta, etc) can be trained. Regardless of the number of channels or parameters chosen, this variable always has the same meaning. It is the “percent of z-scores that are within the target limits.” It has a maximum value of 100 (100% normal), that continuously varies in time, and is useful both for training and for assessing the overall condition of the client. This method has been proven in over 3 years of field experience, and has been published in a variety of peer-reviewed journals, books, and industry publications.
Another key element of BrainMaster’s approach is the ability to dynamically change the difficulty of the training on multiple levels, in real-time without interrupting training. This is analogous to being able to adjust the throttle, choke, etc. of a vehicle while it is in motion, which is an essential element of clinical application. With the PZOK method, clinicians commonly adjust the size of the training window, and also the percentage of z-scores which are required to be met, in order to obtain an reward. This was a non-obvious, yet critical step in the evolution of BrainMaster’s exclusive LZT technology. 
PZOK provides a uniquely flexible and powerful approach to adjusting training conditions, particularly in real-time. By alternating changes in either the target sizes or the percentage of z-score required, the clinician can adjust the difficulty level of the training, as well the distribution of the z-scores which are being trained. For example, requiring a large percentage of the z-scores to fit within a wide range emphasizes the “outliers,” while ignoring smaller z-scores. On the other hand, requiring a small percentage of the z-scores to fit within a narrow target can provide a “challenge” form of training that emphasizes mid-range values, while ignoring outliers. This latter method can, for example, leave the brain free to exhibit abnormalities that are compensating or coping mechanisms that persist, and allow the brain to formulate its own self-regulation strategy. The ability to ignore outliers is, at times an important benefit. At other times, it is desirable to focus on outliers. The new metrics in the “Z-Plus” package address the outliers in new ways, that increase the power and flexibility of PZOK training.
PZOK has been shown to have significant clinical value, and it can also be combined with other methods. A number of our protocols combine LZT training with “biased” training such as alpha up, theta down, or other types of protocols.  The combined protocols provide the same simple feedback to the client, but also guide their brain in a particular direction desired by the clinician. All new “Z-Plus” based designs can also be combined with traditional training, as the clinical sees fit.
Building on the history and experience with the PZOK family of protocols, BrainMaster has re-examined the function and purpose of the LZT approach, and now introduces the “Z-Plus” extensions, designed to extend and reinforce the PZOK approach. Rather than changing or replacing the PZOK methods, the new software and displays provide additional information, flexibility, and direction for LZT training.
We first review PZOK in detail, and then introduce the new metrics, PZMO and PZME.
PZOK:  “percentage of all trained z-scores that fall within a given target range”
PZOK provides an overall assessment of “how normal” by counting how many of the z-scores fit within the desired target range.   The exact position of the z-scores is not important, only whether or not they are within the target limits. PZOK is useful as a real-time training variable. The clinician sets the size of the targets, and also the percent of z-scores required to achieve reward, and the client learns when the PZOK value exceeds the percentage target. It was found important to allow the percentage target to go below 100%, in order to avoid simply training on “outliers” all the time.
PZOK has the following behavior:
Minimum value: 0  (“no z-scores are within range”)
Maximum value: 100 (“all z-scores are within range”)
Intermediate values: 0 to 100: (“what percentage of z-scores are within range”)
Limiting behavior:
PZOK with very small target limits: not useful: PZOK becomes very small, even zero (no z-scores within range)
PZOK with very large target limits: not useful: PZOK will always be 100 with very wide limits (all z-scores within range)
Strengths of PZOK:
With any percentage less than 100%, PZOK allows you to ignore outliers (allows for coping or compensating mechanisms)
Adjustable target sizes to set difficulty of targets
Adjustable percent of targets setting sets total reward rate
Alternates between “challenge” and “easy” conditions for dynamic control of feedback, training of flexibility.
Weaknesses of PZOK:
When targets are small, outliers are ignored, might deviate further
When targets are wide, inner values are ignored, even if they move toward abnormal.
Only counts whether values are in range, does not analyze their size
Treats all z-scores the same, no weighting at this time
Requires attention to target limits, which should generally be adjusted.
Z-Plus – The next generation of LZT training software
When introduced, PZOK was met with some disbelief, even disregard, by some in the industry, while it was adopted and studied by others. Many of the initial objections were categorical, i.e. they addressed concepts or issues, not realities. Some objections reflected a lack of grasp, rather than a critical understanding of the methods.  Due to the fact that the approach seemed nonobvious, and the skeptical reception we received, we proceeded to file a patent (pending) on the underlying concepts of PZOK and its application.  We offered to share this method with other vendors for a nominal fee and proper recognition, but no one took us up on this offer.  Five years of clinical application and publication have resolved the categorical objections, while showing that we do need to address issues such as how to treat outliers, and how to give different types of z-scores different weights. Nonetheless, over time, it has become clear that PZOK is uniquely capable of delivering meaningful and useful feedback in a wide range of client situations.  Most of the initial objections to PZOK have been found insignificant, as the refinement and use of the technique has evolved into a sound clinical approach. The existing PZOK technology is entirely consistent with principles of operant conditioning, learning, and physiological adaptation.  All that is special is that the information fed back (the "operant") is a complex yet useful reflection of brain state.  As the industry continues to look to BrainMaster for leadership, we introduce a new series of functions that extend the intuition and usefulness of PZOK into new dimensions, the dimensions of “Z-Plus.”
Based on our experience and analysis, we now introduce two new families of metrics, plus additional displays, combined into the “Z-Plus” software option.   “Z-Plus” is entirely consistent with, and extends, the existing LZT software, designs, and methods that have been proven over the last 5 years. Like PZOK, the new functions are also accessible as “UL” versions, that use different upper and lower limits. The new functions are incorporated using the Event Wizard, and no new control panels or settings are required. This provides complete flexibility in how they are used, and does not require the clinician to stop using PZOK, or to choose between methods. All metrics are always available, and protocols can be designed as desired combining old with new, as desired.
As will be seen below, one interesting aspect of the new metrics is that, while they are useful with various target sizes, they are particularly useful with very small, even zero, target sizes. When target size is zero, the new metrics incorporate all z-scores into the calculation, providing true indicators of total system state and state change, and no z-scores will be ignored. This provides the ability to account for both outliers and intermediate z-scores, without ignoring any z-scores.
PZMO – "PZ Motive" - “percentage of z-score movement”
PZMO provides an overall assessment of the instantaneous movement (change) of all z-scores that are outslde the specified range.  Z-scores that are within the target range are ignored. PZMO uses concepts from physics to introduce the idea of “momentum” of the z-scores, which reflects their ” velocity,” direction,” and also a weighting factor suggesting their “mass.” It is not necessary to weigh all z-scores the same. With PZMO, it is possible to weigh different z-scores differently, providing an additional dimension of flexibility and control. PZMO is a z-score "motivator" and reflects the net z-score motion.  PZMO takes into account not just the direction (towards or away from normal) but also the amount of movement (a little or a lot), and the weight of each z-score ("lightweight" versus "heavy").  PZMO can be positive or negative, and reflects the total change in "momentum" of all z-scores. When it is positive, then the net movement of all z-scores outside the target range is inward, toward normal. When it is negative, then the net movement of the outlying z-scores is outward, away from normal. Thus, PZMO provides an instantaneous indicator of the CHANGE in the z-scores, indicating the brain’s immediate tendency toward normalization, or toward disregulation. Technically, PZMO is the instantaneous change in the total “momentum” of the system, as defined in physics.
PZMO is intended to be used in addition to PZOK. Existing protocols do not have to be changed, only extended (with a single Event Wizard event) to incorporate the PZMO data. Typically, when PZMO is above some positive threshold, the client will receive a bell, tone, or other reward. This provides an additional, highly dynamic reward ( think of it as a “gold star”) when the client moves in the right direction. 
PZMO incorporates useful and intuitive concepts from astronomy, celestial mechanics, in particular.  The client is learning about their "gravitational potential" which is the tendency toward normalization.  The training limit region is like a star, and the outlying z-scores are like planets.  Ideally, z-scores tend to move inward, to be captured by the sun.  If all planets are in the sun, then all z-scores are within range, and the client's EEG is deemed normal.  If a client can increase their "potential," then z-scores will normalize more directly and consistently.  The training limits define a "capture area" similar to the event horizon of a black hole.  Once z-scores go inside the boundaries, they disappear (are ignored).  Only the z-scores moving outside the boundaries (the orbiting z-scores, if you will) are incorporated into PZMO.   Thus, PZMO captures the tendency for z-scores ("planets") to move toward, not away from, their "sun."  This puts the training into a highly visual and dynamic context.  This informs the clinician as well as the client, as to what is happening and to what extent, in the complex dynamic "z-solar system" of the brain.
PZMO does not provide an overall assessment of “how normal” in the way that PZOK does. If all z-scores are within the target range and none are outside, then there is no net movement to reflect, and PZMO will be zero. At that point, PZOK would be 100. Thus, PZMO gives a rapid, intuitive indication of the direction of change, and has higher resolution and responsiveness than PZOK. As an analogy, it is somewhat like adding a tachometer, or actually an accelerometer, to a car dashboard, so that you can see how rapidly, and in what direction, your velocity is changing. It is also like a dieter monitoring the change in their weight every day, as an indication of how the diet is working.  PZMO introduces the idea that z-scores closer to normal have lower "potential energy," and that the client's brain has a natural tendency to normalize.  The normal brain is a "rest state" toward which the brain should naturally move.  Abnormalities require the brain to expend energy, and can be normalized as the brain relaxes, and brain dynamics settle into an optimal state.
PZMO can be thought of as conveying “motion,” “movement,” “momentum,” or related concepts to LZT training. It introduces concepts that derive from physics including gravity, velocity, acceleration, and dynamic behavior. Using PZMO, the practitioner can begin to think of z-scores as objects that have mass, direction, even intention. The intuitive view of PZMO is that if it is 100, then that is the maximum inward movement and thus, all the outlying z-scores have just moved inside the target limits. If PZMO is 0, then there is no net movement, that is, there is just as much inward movement as outward movement. If PZMO is negative, then the z-scores are in general moving outward. For example, if a client clenches their teeth, PZMO will immediately become a very large negative number. When they relax, it will become a very large positive number.  In the long run, if there is net improvement, PZMO will be positive more often than it is negative. The client should get a reward when PZMO is sufficiently positive, for example, say above 10, which would mean that the net motion of the outliers is to move 10 percent of the distance towards normal. PZMO will not generally be positive all the time, as the z-scores in their typical patterns of movement, simply cannot always be moving towards normal all the time.
PZMO emphasizes variability and dynamic change. It is analogous to a financial derivative that focuses on the change of a system, not simply its current state. As such, it has the potential to “leverage” LZT training by providing highly accurate information relating to dynamic change, and delivering it to the client.   Again, PZMO is not intended to replace PZOK, it is intended to be used as a supplemental training or assessment variable. If the client receives an extra reward every time there is a significant inward movement, then they will learn that skill as well, and tend to reinforce the process of normalization, not just the state of being “more normal.”
As an example of the use of PZMO, you might use the following Event:  If "x=PZMO(1);" IS GREATER THAN 10 THEN (play wav file)
This event would allow the user to hear a "beep" every time they achieved a 10% movement toward normal during the session.  They would hear the reward whenever the z-scores had significant improvement, even if PZOK was not yet above the target percentage.  This thus rewards improvement in the right direction, regardless of the current state.  This motivating feedback is a significant addition to watching the PZOK variable rise and fall;  it allows the client to know when they are moving in the right direction.
PZMO has the following behavior:
Minimum value: negative value, unlimited  (“z-scores are moving outward”)
Maximum value: 100 (“all z-scores have just moved within the target range”)
Intermediate values: typically -100 to +100: (“what is the overall motion toward or away from normal”)
Limiting behavior:
PZMO with very small or 0 target limits: useful, it simply incorporates all z-scores into the metric.
PZMO with very large target limits: not useful: PZMO would also be 0, as all z-scores would be ignored.
PZMOU: provides PZMO for all “upper” z-scores, i.e. those above upper target limit
PZMOL:  provides PZMOfor all “lower” z-scores, i.e. those below lower target limit
Strengths of PZMO:
Capable of reflecting all z-scores (with target size of zero)
Reflects dynamic change in the training process
Consistent with existing PZOK approaches
Provision for giving different weights to different types of z-scores
Weaknesses of PZMO:
PZMO can become large in the presence of artifact, producing feedback when it is not desired.  This is because, as the z-scores normalize when the artifact reduces, PZMO "sees" a lot of improvement!  But it is improvement from an abnormally noisy situation, hence is not really to be rewarded.  To manage this, designs should include both PZOK and PZMO in the reward mechanism.  When artifact is present, PZOK will fall rapidly, thus inhibiting feedback.
PZME – “PZ Mean ” or "PZ Measure"
PZME provides a measure of the mean size of all z-scores that are outside the target range. For every z-score considered, its distance from zero (normal) is computed, and these are combined into population mean (average). This provides a simple assessment of how abnormal all z-scores are as a group. Different types of z-scores can be given different weight, if desired. PZME is intended to be used primarily as an indicator of overall improvement, but can also be used for training. Training PZME (downward) would conform the naïve principle of simply “training everything toward normal,” and is conceptually a step backwards, yet is still an important new capability.
The interpretation of PZME is simple. If it has a value of 1.7, for example, then the average size of all the z-scores is simply 1.7. Direction is taken into account, so that z-scores above the range are treated the same as z-scores below the target range. There is also a separate function to get the average z-scores in the positive direction, and in the negative direction. Technically, PZME is the “mean error” as defined by statistics.  In the solar system analogy, PZME is the average distance of all the planets, hence reflects the overall "size" of the client's z-score solar system.  Generally, a smaller solar system is preferable to a larger one.
PZME is intended to be used as an indicator, to see progress within and across sessions. It provides a single number that has a very clear and simple interpretation. It may, for example, be useful in assessing the overall progress, and whether to terminate training.   For example, when clients tire, z-scores sometimes are seen to lose their tendency to be improving. If PZME shows an increase for more than 3 or 5 minutes, for example, then the client is moving in the wrong direction, and training should be re-evaluated. 
PZME also has the potential to be used to create target limits for LZT training. By providing an instantaneous measure of the average length of all z-scores across the board, PZME provides a basis for adjusting target limits for training. While the use of autothresholding is controversial and may or may not be desired in a particular case, PZME provides an objective, sound approach to creating an target thresholds that is based on the instantaneous state of the desired z-scores. 
For example, the following Event Wizard expression:
Would automatically train PZOK using the average of all positive z-scores as the upper target limit, and the average of all negative z-scores as the lower target limit.
Ironically, PZME is what some thought we were doing with PZOK, when they believed that we were simply “training them all together.”  The simplest approach to combining live z-scores would be to add them together (using absolute value) to get a single number. With PZME, we have decided to provide just that, a simple, total assessment of how all the z-scores add up. We leave it to clinical and research progress to determine the utility of PZME for training, control, or for assessment. Intuitively and from our experience, if trained z-scores are seen to visibly move toward normal, then the PZME variable would also have to go down in a uniform fashion. PZME simply now provides a number that can be used to estimate the total instantaneous condition of all z-scores, treated as a whole.
PZME has the following behavior:
Minimum value: 0 (“all z-scores are exactly normal”)
Maximum value: unlimited, but typically will not reach as high as 3.0 (“if z-scores are very abnormal”)
Intermediate values: typically 0 to 2.0 : (“the average size of all z-scores”)
Limiting behavior:
PZME with very small or 0 target limits: useful, it simply incorporates all z-scores into the metric.
PZME with very large target limits: not useful: PZME would also be 0, as all z-scores would be ignored.
PZMEU: provides PZME for all “upper” z-scores, i.e. those above upper target limit
PZMEL:  provides PZME for all “lower” z-scores, i.e. those below lower target limit
Strengths of PZME:
Extremely simple and intuitive
Capable of reflecting all z-scores (with target size of zero)
Reflects total state of the brain
Consistent with existing PZOK approaches
Provision for giving different weights to different types of z-scores
Can be used to develop targets, i.e. autothresholding for LZT
Weaknesses of PZME:
None yet known
“MVP,” “Z-Plus”, “PZOK,” “PZMO,” and “PZME” are trademarks of BrainMaster Technologies, Inc.
US, Canadian, and foreign patents pending
copyright 2010 BrainMaster Technologies and Thomas F. Collura, Ph.D.

There is also an attached Session Librarian file.

If you have not set up Session Librarian for Discovery, do the following:

save the bmzd file.
right click on it
select open with
select c:\brainm.20\futilsd
select "always open this type of file with this program"
click OK.
Then the Discovery Session Librarian will take over.
You only need to do this setup once, then your PC will know how to open bmzd files
The following shows live data from actual training, showing PZMO and PZME reflecting the training effects:
The following shows the effect of changing the target size.  The training parameters change in the expected way as the targets are widened.
A new display called Z-Bars shows all z-scores as bars with dynamic lines that show short-term changes:
As many z-scores as are being trained can be seen.  This panel shows 192 coherence z-scores from 19 channels.
An example of simultaneous text and Z-Bars is shown below:
We have now introduced Z-Maps.  These are live maps of the Z-Scores that can be used for training or for following training progress. 
We provide two types of maps.  "Instantaneous" maps show the moment-to-moment changes, and can change rapidly.  We also offer "damped" maps, which show the damped z-score, which is what is also used in the text display.  This provides a more stable map for viewing and biofeedback.  Both types of maps are useful, depending on the priority.  It is possible to display either or both types of maps at the same time.  Damped z-scores are what are shown in the text, and in the colored Z-Bars.  Instantaneous z-scores are what are shown by the dynamic lines & dots on the z-bars display.
An example of the Z-Maps is shown below:
The following screen shows simultaneous Z-Bars and Z-Maps:
PZMO is an outgrowth of the PZOK approach, and is an aggregate statistic reflecting change in the outlying Z-Scores. PZOK tells how many z-scores are within the target range, as a percentage. We usually use a percentage of between 50% and 80%, which means that a substantial portion of the z-scores are outliers. As a dynamical systems approach, this gives the brain flexibility to "choose" which z-scores to normalize, and which to leave as outliers. PZMO is the aggregate momentum of these outliers. It is a measure of their net motion, and is a dynamic systems concept. Think of the z-scores as having a life of their own, having mass and velocity. PZMO measures the group momentum, and tells you what percentage of the net motion is toward the target range. PZMO is generally below zero, as nothing is moving particularly toward the targets in general. However, when PZMO goes positive, it tells you the net positive movement. A value of 5% for PZMO is significant. It means that in the last instant, there was 5% net motion toward the targets. That is a very big deal. This is therefore a "derivative" measure that tells your client that at that moment, the outliers moved inward. We typically see only a few PZMO reward beeps every few seconds, so it is an added reward. It is like giving the brain a "gold star" when it has particularly good improvement that moment in time. In my view, it has a similar effect on the brain as the derivatives market had on Wall Street. Small changes can have huge effects, and major learning processes become possible.

PZME is a measure of the mean distance of the outliers from the zero point. It is a measure of the global size of the scattering of outliers in the collection of Z-Scores. As it moves lower, the outliers are moving closer to the targets. We mostly use this as a long-term statistic throughout the session, watching for a small change, say from 2.5 to 2.2, over the session.

In brief, PZOK only knows the percentage inside the target range, it does not know about the outliers, except that they must be out there someplace. PZMO tells you the net motion of the outliers at any instant. PZME tells you how far out they are in general. While PZMO is a very fast, derivative measure, PZME is a very slow, aggregate measure. It all feeds into a view of the brain and the z-scores as comprising a dynamic system that can determine its own rules for self-regulation if you give it the right information.

Thus, this approach, which we call "Z-Plus", gives you more than one type of information. There are various ways to use PZMO, but usually people give a reward when it jumps something above zero, indicating net motion toward the targets.

Attached Files


  • 2015-12-18 00:17:30SallyLee

    [url=http://www.hitsticker.com/Content/Default.aspx?c=14]Atlanta Sticker[/url]

  • 2015-11-22 22:35:31jeff66

    [url=http://www.hitsticker.com]Sticker Printing[/url] | [url=http://www.adstateagent.com]Realtor Marketing Ideas[/url] | [url=http://www.printradiant.com]Printing Services[/url] | [url=http://www.printmissile.com]Print Companies Tools[/url] | [url=http://www.printingexplorer.com]Canada Print Companies[/url] [url=http://www.sticker3.com]Custom Stickers[/url] | [url=http://www.stickermac.com]Print Stickers[/url] [url=http://www.printradiant.com/Content/Default.aspx?c=14]Atl anta Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=17]Boston Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=19]Chicago Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=26]Houston Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=30]Las Vegas Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=34]Miami Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=38]New Orleans Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=48]San Diego Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=44]Pittsburgh Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=51]Seattle Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=49]San Francisco Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=37]Nashville Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=39]New York Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=29]Kansas City Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=16]Baltimore Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=41]Oklahoma Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=43]Phoenix Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=25]Detroit Printing[/url] | [url=http://www.printradiant.com/Content/Default.aspx?c=42]Philadelphia Printing[/url] | [url=http://www.printlinkage.com]Printing Companies[/url]

Related Entries